├── .gitignore ├── LICENSE ├── README.md ├── package-lock.json ├── package.json └── src ├── index.js ├── style.css └── tailwind.config.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2021 Soheil Rashidi 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mailwind 2 | Use Tailwind CSS to design HTML emails. 3 | 4 | Tailwind makes it very easy to design websites, why not use it to design HTML emails? I've been using this for [volt.fm](https://volt.fm) and [pikaso.me](https://pikaso.me) and it has made my life a lot easier. 5 | 6 | ## Install 7 | ``` 8 | npm install -g mailwind 9 | ``` 10 | 11 | ## Usage 12 | 13 | Design your HTML email using the Tailwind utility classes like you normally would for the web. 14 | 15 | Then run the following command to generate the corresponding CSS file: 16 | 17 | ``` 18 | mailwind --input-html email.html --output-css style.css 19 | ``` 20 | 21 | Or run this command to generate an inlined HTML file: 22 | 23 | ``` 24 | mailwind --input-html email.html --output-html email-inlined.html 25 | ``` 26 | 27 | ## Options 28 | 29 | `--input-css` 30 | 31 | The path to your base CSS file. Use this if you need to write custom CSS. Defaults to [style.css](./src/style.css). 32 | 33 | `--input-html` 34 | 35 | The path to your HTML email file. 36 | 37 | `--output-css` 38 | 39 | The path to the CSS file that will be generated. 40 | 41 | `--output-html` 42 | 43 | The path to the inlined HTML file that will be generated. 44 | 45 | `--tailwind-config` 46 | 47 | The path to your custom Tailwind configuration file. Defaults to [tailwind.config.js](./src/tailwind.config.js). 48 | 49 | ## Note 50 | 51 | In the provided default config file, all the units are changed to pixel which is probably what you want for HTML emails. 52 | 53 | ## Example 54 | 55 | Given an `email.html` file with this content: 56 | 57 | ```html 58 | 59 | 60 |

Welcome

61 | 62 | 63 | ``` 64 | 65 | running this command: 66 | ``` 67 | mailwind \ 68 | --input-html email.html \ 69 | --output-css style.css \ 70 | --output-html email-inlined.html 71 | ``` 72 | 73 | will generate the following CSS and inlined HTML files: 74 | 75 | ```css 76 | .text-lg { 77 | font-size: 18px 78 | } 79 | 80 | .font-bold { 81 | font-weight: 700 82 | } 83 | ``` 84 | 85 | ```html 86 | 87 | 88 |

Welcome

89 | 90 | 91 | ``` 92 | 93 | ## Version History 94 | + **2.2** 95 | + Tailwind CSS is now a peer dependency so you can `npm install` newer versions if you need to (Thanks [Songkeys](https://github.com/Songkeys)) 96 | + **2.1** 97 | + Colors are now generated without using CSS variables 98 | + Upgrade to Tailwind CSS v3.2 99 | + **2.0** 100 | + New design 101 | + Upgrade to Tailwind CSS v3 102 | + **1.0** 103 | + Initial release 104 | 105 | ## Author 106 | **Soheil Rashidi** 107 | 108 | + http://soheilrashidi.com 109 | + http://twitter.com/soheilpro 110 | + http://github.com/soheilpro 111 | 112 | ## Copyright and License 113 | Copyright 2022 Soheil Rashidi. 114 | 115 | Licensed under the The MIT License (the "License"); 116 | you may not use this work except in compliance with the License. 117 | You may obtain a copy of the License in the LICENSE file, or at: 118 | 119 | http://www.opensource.org/licenses/mit-license.php 120 | 121 | Unless required by applicable law or agreed to in writing, software 122 | distributed under the License is distributed on an "AS IS" BASIS, 123 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124 | See the License for the specific language governing permissions and 125 | limitations under the License. 126 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mailwind", 3 | "version": "2.0.3", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "mailwind", 9 | "version": "2.0.3", 10 | "license": "MIT", 11 | "dependencies": { 12 | "juice": "8.1.0", 13 | "tailwindcss": "3.2.2", 14 | "yargs": "17.6.2" 15 | }, 16 | "bin": { 17 | "mailwind": "src/index.js" 18 | } 19 | }, 20 | "node_modules/@nodelib/fs.scandir": { 21 | "version": "2.1.5", 22 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 23 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 24 | "dependencies": { 25 | "@nodelib/fs.stat": "2.0.5", 26 | "run-parallel": "^1.1.9" 27 | }, 28 | "engines": { 29 | "node": ">= 8" 30 | } 31 | }, 32 | "node_modules/@nodelib/fs.stat": { 33 | "version": "2.0.5", 34 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 35 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 36 | "engines": { 37 | "node": ">= 8" 38 | } 39 | }, 40 | "node_modules/@nodelib/fs.walk": { 41 | "version": "1.2.8", 42 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 43 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 44 | "dependencies": { 45 | "@nodelib/fs.scandir": "2.1.5", 46 | "fastq": "^1.6.0" 47 | }, 48 | "engines": { 49 | "node": ">= 8" 50 | } 51 | }, 52 | "node_modules/acorn": { 53 | "version": "7.4.1", 54 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 55 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 56 | "bin": { 57 | "acorn": "bin/acorn" 58 | }, 59 | "engines": { 60 | "node": ">=0.4.0" 61 | } 62 | }, 63 | "node_modules/acorn-node": { 64 | "version": "1.8.2", 65 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 66 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 67 | "dependencies": { 68 | "acorn": "^7.0.0", 69 | "acorn-walk": "^7.0.0", 70 | "xtend": "^4.0.2" 71 | } 72 | }, 73 | "node_modules/acorn-walk": { 74 | "version": "7.2.0", 75 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 76 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", 77 | "engines": { 78 | "node": ">=0.4.0" 79 | } 80 | }, 81 | "node_modules/ansi-colors": { 82 | "version": "4.1.3", 83 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 84 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", 85 | "engines": { 86 | "node": ">=6" 87 | } 88 | }, 89 | "node_modules/ansi-regex": { 90 | "version": "5.0.1", 91 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 92 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 93 | "engines": { 94 | "node": ">=8" 95 | } 96 | }, 97 | "node_modules/ansi-styles": { 98 | "version": "4.3.0", 99 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 100 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 101 | "dependencies": { 102 | "color-convert": "^2.0.1" 103 | }, 104 | "engines": { 105 | "node": ">=8" 106 | }, 107 | "funding": { 108 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 109 | } 110 | }, 111 | "node_modules/anymatch": { 112 | "version": "3.1.2", 113 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 114 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 115 | "dependencies": { 116 | "normalize-path": "^3.0.0", 117 | "picomatch": "^2.0.4" 118 | }, 119 | "engines": { 120 | "node": ">= 8" 121 | } 122 | }, 123 | "node_modules/arg": { 124 | "version": "5.0.2", 125 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 126 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 127 | }, 128 | "node_modules/binary-extensions": { 129 | "version": "2.2.0", 130 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 131 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 132 | "engines": { 133 | "node": ">=8" 134 | } 135 | }, 136 | "node_modules/boolbase": { 137 | "version": "1.0.0", 138 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 139 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" 140 | }, 141 | "node_modules/braces": { 142 | "version": "3.0.2", 143 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 144 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 145 | "dependencies": { 146 | "fill-range": "^7.0.1" 147 | }, 148 | "engines": { 149 | "node": ">=8" 150 | } 151 | }, 152 | "node_modules/camelcase-css": { 153 | "version": "2.0.1", 154 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 155 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 156 | "engines": { 157 | "node": ">= 6" 158 | } 159 | }, 160 | "node_modules/cheerio": { 161 | "version": "1.0.0-rc.10", 162 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", 163 | "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", 164 | "dependencies": { 165 | "cheerio-select": "^1.5.0", 166 | "dom-serializer": "^1.3.2", 167 | "domhandler": "^4.2.0", 168 | "htmlparser2": "^6.1.0", 169 | "parse5": "^6.0.1", 170 | "parse5-htmlparser2-tree-adapter": "^6.0.1", 171 | "tslib": "^2.2.0" 172 | }, 173 | "engines": { 174 | "node": ">= 6" 175 | }, 176 | "funding": { 177 | "url": "https://github.com/cheeriojs/cheerio?sponsor=1" 178 | } 179 | }, 180 | "node_modules/cheerio-select": { 181 | "version": "1.6.0", 182 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", 183 | "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", 184 | "dependencies": { 185 | "css-select": "^4.3.0", 186 | "css-what": "^6.0.1", 187 | "domelementtype": "^2.2.0", 188 | "domhandler": "^4.3.1", 189 | "domutils": "^2.8.0" 190 | }, 191 | "funding": { 192 | "url": "https://github.com/sponsors/fb55" 193 | } 194 | }, 195 | "node_modules/chokidar": { 196 | "version": "3.5.3", 197 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 198 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 199 | "funding": [ 200 | { 201 | "type": "individual", 202 | "url": "https://paulmillr.com/funding/" 203 | } 204 | ], 205 | "dependencies": { 206 | "anymatch": "~3.1.2", 207 | "braces": "~3.0.2", 208 | "glob-parent": "~5.1.2", 209 | "is-binary-path": "~2.1.0", 210 | "is-glob": "~4.0.1", 211 | "normalize-path": "~3.0.0", 212 | "readdirp": "~3.6.0" 213 | }, 214 | "engines": { 215 | "node": ">= 8.10.0" 216 | }, 217 | "optionalDependencies": { 218 | "fsevents": "~2.3.2" 219 | } 220 | }, 221 | "node_modules/chokidar/node_modules/glob-parent": { 222 | "version": "5.1.2", 223 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 224 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 225 | "dependencies": { 226 | "is-glob": "^4.0.1" 227 | }, 228 | "engines": { 229 | "node": ">= 6" 230 | } 231 | }, 232 | "node_modules/cliui": { 233 | "version": "8.0.1", 234 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 235 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 236 | "dependencies": { 237 | "string-width": "^4.2.0", 238 | "strip-ansi": "^6.0.1", 239 | "wrap-ansi": "^7.0.0" 240 | }, 241 | "engines": { 242 | "node": ">=12" 243 | } 244 | }, 245 | "node_modules/color-convert": { 246 | "version": "2.0.1", 247 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 248 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 249 | "dependencies": { 250 | "color-name": "~1.1.4" 251 | }, 252 | "engines": { 253 | "node": ">=7.0.0" 254 | } 255 | }, 256 | "node_modules/color-name": { 257 | "version": "1.1.4", 258 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 259 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 260 | }, 261 | "node_modules/commander": { 262 | "version": "6.2.1", 263 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 264 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 265 | "engines": { 266 | "node": ">= 6" 267 | } 268 | }, 269 | "node_modules/css-select": { 270 | "version": "4.3.0", 271 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 272 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 273 | "dependencies": { 274 | "boolbase": "^1.0.0", 275 | "css-what": "^6.0.1", 276 | "domhandler": "^4.3.1", 277 | "domutils": "^2.8.0", 278 | "nth-check": "^2.0.1" 279 | }, 280 | "funding": { 281 | "url": "https://github.com/sponsors/fb55" 282 | } 283 | }, 284 | "node_modules/css-what": { 285 | "version": "6.1.0", 286 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 287 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", 288 | "engines": { 289 | "node": ">= 6" 290 | }, 291 | "funding": { 292 | "url": "https://github.com/sponsors/fb55" 293 | } 294 | }, 295 | "node_modules/cssesc": { 296 | "version": "3.0.0", 297 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 298 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 299 | "bin": { 300 | "cssesc": "bin/cssesc" 301 | }, 302 | "engines": { 303 | "node": ">=4" 304 | } 305 | }, 306 | "node_modules/defined": { 307 | "version": "1.0.1", 308 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", 309 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==", 310 | "funding": { 311 | "url": "https://github.com/sponsors/ljharb" 312 | } 313 | }, 314 | "node_modules/detective": { 315 | "version": "5.2.1", 316 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 317 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 318 | "dependencies": { 319 | "acorn-node": "^1.8.2", 320 | "defined": "^1.0.0", 321 | "minimist": "^1.2.6" 322 | }, 323 | "bin": { 324 | "detective": "bin/detective.js" 325 | }, 326 | "engines": { 327 | "node": ">=0.8.0" 328 | } 329 | }, 330 | "node_modules/didyoumean": { 331 | "version": "1.2.2", 332 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 333 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 334 | }, 335 | "node_modules/dlv": { 336 | "version": "1.1.3", 337 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 338 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 339 | }, 340 | "node_modules/dom-serializer": { 341 | "version": "1.4.1", 342 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 343 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 344 | "dependencies": { 345 | "domelementtype": "^2.0.1", 346 | "domhandler": "^4.2.0", 347 | "entities": "^2.0.0" 348 | }, 349 | "funding": { 350 | "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" 351 | } 352 | }, 353 | "node_modules/domelementtype": { 354 | "version": "2.3.0", 355 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 356 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", 357 | "funding": [ 358 | { 359 | "type": "github", 360 | "url": "https://github.com/sponsors/fb55" 361 | } 362 | ] 363 | }, 364 | "node_modules/domhandler": { 365 | "version": "4.3.1", 366 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 367 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 368 | "dependencies": { 369 | "domelementtype": "^2.2.0" 370 | }, 371 | "engines": { 372 | "node": ">= 4" 373 | }, 374 | "funding": { 375 | "url": "https://github.com/fb55/domhandler?sponsor=1" 376 | } 377 | }, 378 | "node_modules/domutils": { 379 | "version": "2.8.0", 380 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 381 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 382 | "dependencies": { 383 | "dom-serializer": "^1.0.1", 384 | "domelementtype": "^2.2.0", 385 | "domhandler": "^4.2.0" 386 | }, 387 | "funding": { 388 | "url": "https://github.com/fb55/domutils?sponsor=1" 389 | } 390 | }, 391 | "node_modules/emoji-regex": { 392 | "version": "8.0.0", 393 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 394 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 395 | }, 396 | "node_modules/entities": { 397 | "version": "2.2.0", 398 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 399 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 400 | "funding": { 401 | "url": "https://github.com/fb55/entities?sponsor=1" 402 | } 403 | }, 404 | "node_modules/escalade": { 405 | "version": "3.1.1", 406 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 407 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 408 | "engines": { 409 | "node": ">=6" 410 | } 411 | }, 412 | "node_modules/escape-goat": { 413 | "version": "3.0.0", 414 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", 415 | "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==", 416 | "engines": { 417 | "node": ">=10" 418 | }, 419 | "funding": { 420 | "url": "https://github.com/sponsors/sindresorhus" 421 | } 422 | }, 423 | "node_modules/fast-glob": { 424 | "version": "3.2.12", 425 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 426 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 427 | "dependencies": { 428 | "@nodelib/fs.stat": "^2.0.2", 429 | "@nodelib/fs.walk": "^1.2.3", 430 | "glob-parent": "^5.1.2", 431 | "merge2": "^1.3.0", 432 | "micromatch": "^4.0.4" 433 | }, 434 | "engines": { 435 | "node": ">=8.6.0" 436 | } 437 | }, 438 | "node_modules/fast-glob/node_modules/glob-parent": { 439 | "version": "5.1.2", 440 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 441 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 442 | "dependencies": { 443 | "is-glob": "^4.0.1" 444 | }, 445 | "engines": { 446 | "node": ">= 6" 447 | } 448 | }, 449 | "node_modules/fastq": { 450 | "version": "1.13.0", 451 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 452 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 453 | "dependencies": { 454 | "reusify": "^1.0.4" 455 | } 456 | }, 457 | "node_modules/fill-range": { 458 | "version": "7.0.1", 459 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 460 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 461 | "dependencies": { 462 | "to-regex-range": "^5.0.1" 463 | }, 464 | "engines": { 465 | "node": ">=8" 466 | } 467 | }, 468 | "node_modules/fsevents": { 469 | "version": "2.3.2", 470 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 471 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 472 | "hasInstallScript": true, 473 | "optional": true, 474 | "os": [ 475 | "darwin" 476 | ], 477 | "engines": { 478 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 479 | } 480 | }, 481 | "node_modules/function-bind": { 482 | "version": "1.1.1", 483 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 484 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 485 | }, 486 | "node_modules/get-caller-file": { 487 | "version": "2.0.5", 488 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 489 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 490 | "engines": { 491 | "node": "6.* || 8.* || >= 10.*" 492 | } 493 | }, 494 | "node_modules/glob-parent": { 495 | "version": "6.0.2", 496 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 497 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 498 | "dependencies": { 499 | "is-glob": "^4.0.3" 500 | }, 501 | "engines": { 502 | "node": ">=10.13.0" 503 | } 504 | }, 505 | "node_modules/has": { 506 | "version": "1.0.3", 507 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 508 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 509 | "dependencies": { 510 | "function-bind": "^1.1.1" 511 | }, 512 | "engines": { 513 | "node": ">= 0.4.0" 514 | } 515 | }, 516 | "node_modules/htmlparser2": { 517 | "version": "6.1.0", 518 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 519 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 520 | "funding": [ 521 | "https://github.com/fb55/htmlparser2?sponsor=1", 522 | { 523 | "type": "github", 524 | "url": "https://github.com/sponsors/fb55" 525 | } 526 | ], 527 | "dependencies": { 528 | "domelementtype": "^2.0.1", 529 | "domhandler": "^4.0.0", 530 | "domutils": "^2.5.2", 531 | "entities": "^2.0.0" 532 | } 533 | }, 534 | "node_modules/is-binary-path": { 535 | "version": "2.1.0", 536 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 537 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 538 | "dependencies": { 539 | "binary-extensions": "^2.0.0" 540 | }, 541 | "engines": { 542 | "node": ">=8" 543 | } 544 | }, 545 | "node_modules/is-core-module": { 546 | "version": "2.11.0", 547 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 548 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 549 | "dependencies": { 550 | "has": "^1.0.3" 551 | }, 552 | "funding": { 553 | "url": "https://github.com/sponsors/ljharb" 554 | } 555 | }, 556 | "node_modules/is-extglob": { 557 | "version": "2.1.1", 558 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 559 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 560 | "engines": { 561 | "node": ">=0.10.0" 562 | } 563 | }, 564 | "node_modules/is-fullwidth-code-point": { 565 | "version": "3.0.0", 566 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 567 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 568 | "engines": { 569 | "node": ">=8" 570 | } 571 | }, 572 | "node_modules/is-glob": { 573 | "version": "4.0.3", 574 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 575 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 576 | "dependencies": { 577 | "is-extglob": "^2.1.1" 578 | }, 579 | "engines": { 580 | "node": ">=0.10.0" 581 | } 582 | }, 583 | "node_modules/is-number": { 584 | "version": "7.0.0", 585 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 586 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 587 | "engines": { 588 | "node": ">=0.12.0" 589 | } 590 | }, 591 | "node_modules/juice": { 592 | "version": "8.1.0", 593 | "resolved": "https://registry.npmjs.org/juice/-/juice-8.1.0.tgz", 594 | "integrity": "sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==", 595 | "dependencies": { 596 | "cheerio": "1.0.0-rc.10", 597 | "commander": "^6.1.0", 598 | "mensch": "^0.3.4", 599 | "slick": "^1.12.2", 600 | "web-resource-inliner": "^6.0.1" 601 | }, 602 | "bin": { 603 | "juice": "bin/juice" 604 | }, 605 | "engines": { 606 | "node": ">=10.0.0" 607 | } 608 | }, 609 | "node_modules/lilconfig": { 610 | "version": "2.0.6", 611 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", 612 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", 613 | "engines": { 614 | "node": ">=10" 615 | } 616 | }, 617 | "node_modules/mensch": { 618 | "version": "0.3.4", 619 | "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", 620 | "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" 621 | }, 622 | "node_modules/merge2": { 623 | "version": "1.4.1", 624 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 625 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 626 | "engines": { 627 | "node": ">= 8" 628 | } 629 | }, 630 | "node_modules/micromatch": { 631 | "version": "4.0.5", 632 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 633 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 634 | "dependencies": { 635 | "braces": "^3.0.2", 636 | "picomatch": "^2.3.1" 637 | }, 638 | "engines": { 639 | "node": ">=8.6" 640 | } 641 | }, 642 | "node_modules/mime": { 643 | "version": "2.6.0", 644 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 645 | "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", 646 | "bin": { 647 | "mime": "cli.js" 648 | }, 649 | "engines": { 650 | "node": ">=4.0.0" 651 | } 652 | }, 653 | "node_modules/minimist": { 654 | "version": "1.2.7", 655 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 656 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 657 | "funding": { 658 | "url": "https://github.com/sponsors/ljharb" 659 | } 660 | }, 661 | "node_modules/nanoid": { 662 | "version": "3.3.4", 663 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 664 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", 665 | "bin": { 666 | "nanoid": "bin/nanoid.cjs" 667 | }, 668 | "engines": { 669 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 670 | } 671 | }, 672 | "node_modules/node-fetch": { 673 | "version": "2.6.7", 674 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 675 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 676 | "dependencies": { 677 | "whatwg-url": "^5.0.0" 678 | }, 679 | "engines": { 680 | "node": "4.x || >=6.0.0" 681 | }, 682 | "peerDependencies": { 683 | "encoding": "^0.1.0" 684 | }, 685 | "peerDependenciesMeta": { 686 | "encoding": { 687 | "optional": true 688 | } 689 | } 690 | }, 691 | "node_modules/normalize-path": { 692 | "version": "3.0.0", 693 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 694 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 695 | "engines": { 696 | "node": ">=0.10.0" 697 | } 698 | }, 699 | "node_modules/nth-check": { 700 | "version": "2.1.1", 701 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 702 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 703 | "dependencies": { 704 | "boolbase": "^1.0.0" 705 | }, 706 | "funding": { 707 | "url": "https://github.com/fb55/nth-check?sponsor=1" 708 | } 709 | }, 710 | "node_modules/object-hash": { 711 | "version": "3.0.0", 712 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 713 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 714 | "engines": { 715 | "node": ">= 6" 716 | } 717 | }, 718 | "node_modules/parse5": { 719 | "version": "6.0.1", 720 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 721 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 722 | }, 723 | "node_modules/parse5-htmlparser2-tree-adapter": { 724 | "version": "6.0.1", 725 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", 726 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", 727 | "dependencies": { 728 | "parse5": "^6.0.1" 729 | } 730 | }, 731 | "node_modules/path-parse": { 732 | "version": "1.0.7", 733 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 734 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 735 | }, 736 | "node_modules/picocolors": { 737 | "version": "1.0.0", 738 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 739 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 740 | }, 741 | "node_modules/picomatch": { 742 | "version": "2.3.1", 743 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 744 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 745 | "engines": { 746 | "node": ">=8.6" 747 | }, 748 | "funding": { 749 | "url": "https://github.com/sponsors/jonschlinkert" 750 | } 751 | }, 752 | "node_modules/pify": { 753 | "version": "2.3.0", 754 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 755 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 756 | "engines": { 757 | "node": ">=0.10.0" 758 | } 759 | }, 760 | "node_modules/postcss": { 761 | "version": "8.4.18", 762 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", 763 | "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", 764 | "funding": [ 765 | { 766 | "type": "opencollective", 767 | "url": "https://opencollective.com/postcss/" 768 | }, 769 | { 770 | "type": "tidelift", 771 | "url": "https://tidelift.com/funding/github/npm/postcss" 772 | } 773 | ], 774 | "dependencies": { 775 | "nanoid": "^3.3.4", 776 | "picocolors": "^1.0.0", 777 | "source-map-js": "^1.0.2" 778 | }, 779 | "engines": { 780 | "node": "^10 || ^12 || >=14" 781 | } 782 | }, 783 | "node_modules/postcss-import": { 784 | "version": "14.1.0", 785 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", 786 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", 787 | "dependencies": { 788 | "postcss-value-parser": "^4.0.0", 789 | "read-cache": "^1.0.0", 790 | "resolve": "^1.1.7" 791 | }, 792 | "engines": { 793 | "node": ">=10.0.0" 794 | }, 795 | "peerDependencies": { 796 | "postcss": "^8.0.0" 797 | } 798 | }, 799 | "node_modules/postcss-js": { 800 | "version": "4.0.0", 801 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 802 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 803 | "dependencies": { 804 | "camelcase-css": "^2.0.1" 805 | }, 806 | "engines": { 807 | "node": "^12 || ^14 || >= 16" 808 | }, 809 | "funding": { 810 | "type": "opencollective", 811 | "url": "https://opencollective.com/postcss/" 812 | }, 813 | "peerDependencies": { 814 | "postcss": "^8.3.3" 815 | } 816 | }, 817 | "node_modules/postcss-load-config": { 818 | "version": "3.1.4", 819 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 820 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 821 | "dependencies": { 822 | "lilconfig": "^2.0.5", 823 | "yaml": "^1.10.2" 824 | }, 825 | "engines": { 826 | "node": ">= 10" 827 | }, 828 | "funding": { 829 | "type": "opencollective", 830 | "url": "https://opencollective.com/postcss/" 831 | }, 832 | "peerDependencies": { 833 | "postcss": ">=8.0.9", 834 | "ts-node": ">=9.0.0" 835 | }, 836 | "peerDependenciesMeta": { 837 | "postcss": { 838 | "optional": true 839 | }, 840 | "ts-node": { 841 | "optional": true 842 | } 843 | } 844 | }, 845 | "node_modules/postcss-nested": { 846 | "version": "6.0.0", 847 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", 848 | "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", 849 | "dependencies": { 850 | "postcss-selector-parser": "^6.0.10" 851 | }, 852 | "engines": { 853 | "node": ">=12.0" 854 | }, 855 | "funding": { 856 | "type": "opencollective", 857 | "url": "https://opencollective.com/postcss/" 858 | }, 859 | "peerDependencies": { 860 | "postcss": "^8.2.14" 861 | } 862 | }, 863 | "node_modules/postcss-selector-parser": { 864 | "version": "6.0.10", 865 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 866 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 867 | "dependencies": { 868 | "cssesc": "^3.0.0", 869 | "util-deprecate": "^1.0.2" 870 | }, 871 | "engines": { 872 | "node": ">=4" 873 | } 874 | }, 875 | "node_modules/postcss-value-parser": { 876 | "version": "4.2.0", 877 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 878 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 879 | }, 880 | "node_modules/queue-microtask": { 881 | "version": "1.2.3", 882 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 883 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 884 | "funding": [ 885 | { 886 | "type": "github", 887 | "url": "https://github.com/sponsors/feross" 888 | }, 889 | { 890 | "type": "patreon", 891 | "url": "https://www.patreon.com/feross" 892 | }, 893 | { 894 | "type": "consulting", 895 | "url": "https://feross.org/support" 896 | } 897 | ] 898 | }, 899 | "node_modules/quick-lru": { 900 | "version": "5.1.1", 901 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 902 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", 903 | "engines": { 904 | "node": ">=10" 905 | }, 906 | "funding": { 907 | "url": "https://github.com/sponsors/sindresorhus" 908 | } 909 | }, 910 | "node_modules/read-cache": { 911 | "version": "1.0.0", 912 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 913 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 914 | "dependencies": { 915 | "pify": "^2.3.0" 916 | } 917 | }, 918 | "node_modules/readdirp": { 919 | "version": "3.6.0", 920 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 921 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 922 | "dependencies": { 923 | "picomatch": "^2.2.1" 924 | }, 925 | "engines": { 926 | "node": ">=8.10.0" 927 | } 928 | }, 929 | "node_modules/require-directory": { 930 | "version": "2.1.1", 931 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 932 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 933 | "engines": { 934 | "node": ">=0.10.0" 935 | } 936 | }, 937 | "node_modules/resolve": { 938 | "version": "1.22.1", 939 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 940 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 941 | "dependencies": { 942 | "is-core-module": "^2.9.0", 943 | "path-parse": "^1.0.7", 944 | "supports-preserve-symlinks-flag": "^1.0.0" 945 | }, 946 | "bin": { 947 | "resolve": "bin/resolve" 948 | }, 949 | "funding": { 950 | "url": "https://github.com/sponsors/ljharb" 951 | } 952 | }, 953 | "node_modules/reusify": { 954 | "version": "1.0.4", 955 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 956 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 957 | "engines": { 958 | "iojs": ">=1.0.0", 959 | "node": ">=0.10.0" 960 | } 961 | }, 962 | "node_modules/run-parallel": { 963 | "version": "1.2.0", 964 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 965 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 966 | "funding": [ 967 | { 968 | "type": "github", 969 | "url": "https://github.com/sponsors/feross" 970 | }, 971 | { 972 | "type": "patreon", 973 | "url": "https://www.patreon.com/feross" 974 | }, 975 | { 976 | "type": "consulting", 977 | "url": "https://feross.org/support" 978 | } 979 | ], 980 | "dependencies": { 981 | "queue-microtask": "^1.2.2" 982 | } 983 | }, 984 | "node_modules/slick": { 985 | "version": "1.12.2", 986 | "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", 987 | "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==", 988 | "engines": { 989 | "node": "*" 990 | } 991 | }, 992 | "node_modules/source-map-js": { 993 | "version": "1.0.2", 994 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 995 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 996 | "engines": { 997 | "node": ">=0.10.0" 998 | } 999 | }, 1000 | "node_modules/string-width": { 1001 | "version": "4.2.3", 1002 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1003 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1004 | "dependencies": { 1005 | "emoji-regex": "^8.0.0", 1006 | "is-fullwidth-code-point": "^3.0.0", 1007 | "strip-ansi": "^6.0.1" 1008 | }, 1009 | "engines": { 1010 | "node": ">=8" 1011 | } 1012 | }, 1013 | "node_modules/strip-ansi": { 1014 | "version": "6.0.1", 1015 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1016 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1017 | "dependencies": { 1018 | "ansi-regex": "^5.0.1" 1019 | }, 1020 | "engines": { 1021 | "node": ">=8" 1022 | } 1023 | }, 1024 | "node_modules/supports-preserve-symlinks-flag": { 1025 | "version": "1.0.0", 1026 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1027 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1028 | "engines": { 1029 | "node": ">= 0.4" 1030 | }, 1031 | "funding": { 1032 | "url": "https://github.com/sponsors/ljharb" 1033 | } 1034 | }, 1035 | "node_modules/tailwindcss": { 1036 | "version": "3.2.2", 1037 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.2.tgz", 1038 | "integrity": "sha512-c2GtSdqg+harR4QeoTmex0Ngfg8IIHNeLQH5yr2B9uZbZR1Xt1rYbjWOWTcj3YLTZhrmZnPowoQDbSRFyZHQ5Q==", 1039 | "dependencies": { 1040 | "arg": "^5.0.2", 1041 | "chokidar": "^3.5.3", 1042 | "color-name": "^1.1.4", 1043 | "detective": "^5.2.1", 1044 | "didyoumean": "^1.2.2", 1045 | "dlv": "^1.1.3", 1046 | "fast-glob": "^3.2.12", 1047 | "glob-parent": "^6.0.2", 1048 | "is-glob": "^4.0.3", 1049 | "lilconfig": "^2.0.6", 1050 | "micromatch": "^4.0.5", 1051 | "normalize-path": "^3.0.0", 1052 | "object-hash": "^3.0.0", 1053 | "picocolors": "^1.0.0", 1054 | "postcss": "^8.4.18", 1055 | "postcss-import": "^14.1.0", 1056 | "postcss-js": "^4.0.0", 1057 | "postcss-load-config": "^3.1.4", 1058 | "postcss-nested": "6.0.0", 1059 | "postcss-selector-parser": "^6.0.10", 1060 | "postcss-value-parser": "^4.2.0", 1061 | "quick-lru": "^5.1.1", 1062 | "resolve": "^1.22.1" 1063 | }, 1064 | "bin": { 1065 | "tailwind": "lib/cli.js", 1066 | "tailwindcss": "lib/cli.js" 1067 | }, 1068 | "engines": { 1069 | "node": ">=12.13.0" 1070 | }, 1071 | "peerDependencies": { 1072 | "postcss": "^8.0.9" 1073 | } 1074 | }, 1075 | "node_modules/to-regex-range": { 1076 | "version": "5.0.1", 1077 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1078 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1079 | "dependencies": { 1080 | "is-number": "^7.0.0" 1081 | }, 1082 | "engines": { 1083 | "node": ">=8.0" 1084 | } 1085 | }, 1086 | "node_modules/tr46": { 1087 | "version": "0.0.3", 1088 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1089 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1090 | }, 1091 | "node_modules/tslib": { 1092 | "version": "2.4.1", 1093 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 1094 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 1095 | }, 1096 | "node_modules/util-deprecate": { 1097 | "version": "1.0.2", 1098 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1099 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1100 | }, 1101 | "node_modules/valid-data-url": { 1102 | "version": "3.0.1", 1103 | "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", 1104 | "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==", 1105 | "engines": { 1106 | "node": ">=10" 1107 | } 1108 | }, 1109 | "node_modules/web-resource-inliner": { 1110 | "version": "6.0.1", 1111 | "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", 1112 | "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", 1113 | "dependencies": { 1114 | "ansi-colors": "^4.1.1", 1115 | "escape-goat": "^3.0.0", 1116 | "htmlparser2": "^5.0.0", 1117 | "mime": "^2.4.6", 1118 | "node-fetch": "^2.6.0", 1119 | "valid-data-url": "^3.0.0" 1120 | }, 1121 | "engines": { 1122 | "node": ">=10.0.0" 1123 | } 1124 | }, 1125 | "node_modules/web-resource-inliner/node_modules/domhandler": { 1126 | "version": "3.3.0", 1127 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 1128 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 1129 | "dependencies": { 1130 | "domelementtype": "^2.0.1" 1131 | }, 1132 | "engines": { 1133 | "node": ">= 4" 1134 | }, 1135 | "funding": { 1136 | "url": "https://github.com/fb55/domhandler?sponsor=1" 1137 | } 1138 | }, 1139 | "node_modules/web-resource-inliner/node_modules/htmlparser2": { 1140 | "version": "5.0.1", 1141 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", 1142 | "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", 1143 | "dependencies": { 1144 | "domelementtype": "^2.0.1", 1145 | "domhandler": "^3.3.0", 1146 | "domutils": "^2.4.2", 1147 | "entities": "^2.0.0" 1148 | }, 1149 | "funding": { 1150 | "url": "https://github.com/fb55/htmlparser2?sponsor=1" 1151 | } 1152 | }, 1153 | "node_modules/webidl-conversions": { 1154 | "version": "3.0.1", 1155 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1156 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1157 | }, 1158 | "node_modules/whatwg-url": { 1159 | "version": "5.0.0", 1160 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1161 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1162 | "dependencies": { 1163 | "tr46": "~0.0.3", 1164 | "webidl-conversions": "^3.0.0" 1165 | } 1166 | }, 1167 | "node_modules/wrap-ansi": { 1168 | "version": "7.0.0", 1169 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1170 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1171 | "dependencies": { 1172 | "ansi-styles": "^4.0.0", 1173 | "string-width": "^4.1.0", 1174 | "strip-ansi": "^6.0.0" 1175 | }, 1176 | "engines": { 1177 | "node": ">=10" 1178 | }, 1179 | "funding": { 1180 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1181 | } 1182 | }, 1183 | "node_modules/xtend": { 1184 | "version": "4.0.2", 1185 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 1186 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 1187 | "engines": { 1188 | "node": ">=0.4" 1189 | } 1190 | }, 1191 | "node_modules/y18n": { 1192 | "version": "5.0.8", 1193 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1194 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1195 | "engines": { 1196 | "node": ">=10" 1197 | } 1198 | }, 1199 | "node_modules/yaml": { 1200 | "version": "1.10.2", 1201 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 1202 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 1203 | "engines": { 1204 | "node": ">= 6" 1205 | } 1206 | }, 1207 | "node_modules/yargs": { 1208 | "version": "17.6.2", 1209 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", 1210 | "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", 1211 | "dependencies": { 1212 | "cliui": "^8.0.1", 1213 | "escalade": "^3.1.1", 1214 | "get-caller-file": "^2.0.5", 1215 | "require-directory": "^2.1.1", 1216 | "string-width": "^4.2.3", 1217 | "y18n": "^5.0.5", 1218 | "yargs-parser": "^21.1.1" 1219 | }, 1220 | "engines": { 1221 | "node": ">=12" 1222 | } 1223 | }, 1224 | "node_modules/yargs-parser": { 1225 | "version": "21.1.1", 1226 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1227 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1228 | "engines": { 1229 | "node": ">=12" 1230 | } 1231 | } 1232 | }, 1233 | "dependencies": { 1234 | "@nodelib/fs.scandir": { 1235 | "version": "2.1.5", 1236 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 1237 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 1238 | "requires": { 1239 | "@nodelib/fs.stat": "2.0.5", 1240 | "run-parallel": "^1.1.9" 1241 | } 1242 | }, 1243 | "@nodelib/fs.stat": { 1244 | "version": "2.0.5", 1245 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 1246 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" 1247 | }, 1248 | "@nodelib/fs.walk": { 1249 | "version": "1.2.8", 1250 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 1251 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 1252 | "requires": { 1253 | "@nodelib/fs.scandir": "2.1.5", 1254 | "fastq": "^1.6.0" 1255 | } 1256 | }, 1257 | "acorn": { 1258 | "version": "7.4.1", 1259 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 1260 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" 1261 | }, 1262 | "acorn-node": { 1263 | "version": "1.8.2", 1264 | "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", 1265 | "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", 1266 | "requires": { 1267 | "acorn": "^7.0.0", 1268 | "acorn-walk": "^7.0.0", 1269 | "xtend": "^4.0.2" 1270 | } 1271 | }, 1272 | "acorn-walk": { 1273 | "version": "7.2.0", 1274 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", 1275 | "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==" 1276 | }, 1277 | "ansi-colors": { 1278 | "version": "4.1.3", 1279 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", 1280 | "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==" 1281 | }, 1282 | "ansi-regex": { 1283 | "version": "5.0.1", 1284 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1285 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 1286 | }, 1287 | "ansi-styles": { 1288 | "version": "4.3.0", 1289 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1290 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1291 | "requires": { 1292 | "color-convert": "^2.0.1" 1293 | } 1294 | }, 1295 | "anymatch": { 1296 | "version": "3.1.2", 1297 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 1298 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 1299 | "requires": { 1300 | "normalize-path": "^3.0.0", 1301 | "picomatch": "^2.0.4" 1302 | } 1303 | }, 1304 | "arg": { 1305 | "version": "5.0.2", 1306 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1307 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 1308 | }, 1309 | "binary-extensions": { 1310 | "version": "2.2.0", 1311 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1312 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" 1313 | }, 1314 | "boolbase": { 1315 | "version": "1.0.0", 1316 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 1317 | "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" 1318 | }, 1319 | "braces": { 1320 | "version": "3.0.2", 1321 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1322 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1323 | "requires": { 1324 | "fill-range": "^7.0.1" 1325 | } 1326 | }, 1327 | "camelcase-css": { 1328 | "version": "2.0.1", 1329 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1330 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==" 1331 | }, 1332 | "cheerio": { 1333 | "version": "1.0.0-rc.10", 1334 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", 1335 | "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", 1336 | "requires": { 1337 | "cheerio-select": "^1.5.0", 1338 | "dom-serializer": "^1.3.2", 1339 | "domhandler": "^4.2.0", 1340 | "htmlparser2": "^6.1.0", 1341 | "parse5": "^6.0.1", 1342 | "parse5-htmlparser2-tree-adapter": "^6.0.1", 1343 | "tslib": "^2.2.0" 1344 | } 1345 | }, 1346 | "cheerio-select": { 1347 | "version": "1.6.0", 1348 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.6.0.tgz", 1349 | "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", 1350 | "requires": { 1351 | "css-select": "^4.3.0", 1352 | "css-what": "^6.0.1", 1353 | "domelementtype": "^2.2.0", 1354 | "domhandler": "^4.3.1", 1355 | "domutils": "^2.8.0" 1356 | } 1357 | }, 1358 | "chokidar": { 1359 | "version": "3.5.3", 1360 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1361 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1362 | "requires": { 1363 | "anymatch": "~3.1.2", 1364 | "braces": "~3.0.2", 1365 | "fsevents": "~2.3.2", 1366 | "glob-parent": "~5.1.2", 1367 | "is-binary-path": "~2.1.0", 1368 | "is-glob": "~4.0.1", 1369 | "normalize-path": "~3.0.0", 1370 | "readdirp": "~3.6.0" 1371 | }, 1372 | "dependencies": { 1373 | "glob-parent": { 1374 | "version": "5.1.2", 1375 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1376 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1377 | "requires": { 1378 | "is-glob": "^4.0.1" 1379 | } 1380 | } 1381 | } 1382 | }, 1383 | "cliui": { 1384 | "version": "8.0.1", 1385 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 1386 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 1387 | "requires": { 1388 | "string-width": "^4.2.0", 1389 | "strip-ansi": "^6.0.1", 1390 | "wrap-ansi": "^7.0.0" 1391 | } 1392 | }, 1393 | "color-convert": { 1394 | "version": "2.0.1", 1395 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1396 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1397 | "requires": { 1398 | "color-name": "~1.1.4" 1399 | } 1400 | }, 1401 | "color-name": { 1402 | "version": "1.1.4", 1403 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1404 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1405 | }, 1406 | "commander": { 1407 | "version": "6.2.1", 1408 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 1409 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==" 1410 | }, 1411 | "css-select": { 1412 | "version": "4.3.0", 1413 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", 1414 | "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", 1415 | "requires": { 1416 | "boolbase": "^1.0.0", 1417 | "css-what": "^6.0.1", 1418 | "domhandler": "^4.3.1", 1419 | "domutils": "^2.8.0", 1420 | "nth-check": "^2.0.1" 1421 | } 1422 | }, 1423 | "css-what": { 1424 | "version": "6.1.0", 1425 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", 1426 | "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==" 1427 | }, 1428 | "cssesc": { 1429 | "version": "3.0.0", 1430 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1431 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" 1432 | }, 1433 | "defined": { 1434 | "version": "1.0.1", 1435 | "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.1.tgz", 1436 | "integrity": "sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q==" 1437 | }, 1438 | "detective": { 1439 | "version": "5.2.1", 1440 | "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", 1441 | "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", 1442 | "requires": { 1443 | "acorn-node": "^1.8.2", 1444 | "defined": "^1.0.0", 1445 | "minimist": "^1.2.6" 1446 | } 1447 | }, 1448 | "didyoumean": { 1449 | "version": "1.2.2", 1450 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1451 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" 1452 | }, 1453 | "dlv": { 1454 | "version": "1.1.3", 1455 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1456 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" 1457 | }, 1458 | "dom-serializer": { 1459 | "version": "1.4.1", 1460 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", 1461 | "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", 1462 | "requires": { 1463 | "domelementtype": "^2.0.1", 1464 | "domhandler": "^4.2.0", 1465 | "entities": "^2.0.0" 1466 | } 1467 | }, 1468 | "domelementtype": { 1469 | "version": "2.3.0", 1470 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", 1471 | "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" 1472 | }, 1473 | "domhandler": { 1474 | "version": "4.3.1", 1475 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", 1476 | "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", 1477 | "requires": { 1478 | "domelementtype": "^2.2.0" 1479 | } 1480 | }, 1481 | "domutils": { 1482 | "version": "2.8.0", 1483 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 1484 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 1485 | "requires": { 1486 | "dom-serializer": "^1.0.1", 1487 | "domelementtype": "^2.2.0", 1488 | "domhandler": "^4.2.0" 1489 | } 1490 | }, 1491 | "emoji-regex": { 1492 | "version": "8.0.0", 1493 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1494 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1495 | }, 1496 | "entities": { 1497 | "version": "2.2.0", 1498 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 1499 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" 1500 | }, 1501 | "escalade": { 1502 | "version": "3.1.1", 1503 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1504 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" 1505 | }, 1506 | "escape-goat": { 1507 | "version": "3.0.0", 1508 | "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-3.0.0.tgz", 1509 | "integrity": "sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==" 1510 | }, 1511 | "fast-glob": { 1512 | "version": "3.2.12", 1513 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", 1514 | "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", 1515 | "requires": { 1516 | "@nodelib/fs.stat": "^2.0.2", 1517 | "@nodelib/fs.walk": "^1.2.3", 1518 | "glob-parent": "^5.1.2", 1519 | "merge2": "^1.3.0", 1520 | "micromatch": "^4.0.4" 1521 | }, 1522 | "dependencies": { 1523 | "glob-parent": { 1524 | "version": "5.1.2", 1525 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1526 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1527 | "requires": { 1528 | "is-glob": "^4.0.1" 1529 | } 1530 | } 1531 | } 1532 | }, 1533 | "fastq": { 1534 | "version": "1.13.0", 1535 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1536 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1537 | "requires": { 1538 | "reusify": "^1.0.4" 1539 | } 1540 | }, 1541 | "fill-range": { 1542 | "version": "7.0.1", 1543 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1544 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1545 | "requires": { 1546 | "to-regex-range": "^5.0.1" 1547 | } 1548 | }, 1549 | "fsevents": { 1550 | "version": "2.3.2", 1551 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1552 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1553 | "optional": true 1554 | }, 1555 | "function-bind": { 1556 | "version": "1.1.1", 1557 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1558 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 1559 | }, 1560 | "get-caller-file": { 1561 | "version": "2.0.5", 1562 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 1563 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" 1564 | }, 1565 | "glob-parent": { 1566 | "version": "6.0.2", 1567 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1568 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1569 | "requires": { 1570 | "is-glob": "^4.0.3" 1571 | } 1572 | }, 1573 | "has": { 1574 | "version": "1.0.3", 1575 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1576 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1577 | "requires": { 1578 | "function-bind": "^1.1.1" 1579 | } 1580 | }, 1581 | "htmlparser2": { 1582 | "version": "6.1.0", 1583 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 1584 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 1585 | "requires": { 1586 | "domelementtype": "^2.0.1", 1587 | "domhandler": "^4.0.0", 1588 | "domutils": "^2.5.2", 1589 | "entities": "^2.0.0" 1590 | } 1591 | }, 1592 | "is-binary-path": { 1593 | "version": "2.1.0", 1594 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1595 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1596 | "requires": { 1597 | "binary-extensions": "^2.0.0" 1598 | } 1599 | }, 1600 | "is-core-module": { 1601 | "version": "2.11.0", 1602 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1603 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1604 | "requires": { 1605 | "has": "^1.0.3" 1606 | } 1607 | }, 1608 | "is-extglob": { 1609 | "version": "2.1.1", 1610 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1611 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" 1612 | }, 1613 | "is-fullwidth-code-point": { 1614 | "version": "3.0.0", 1615 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1616 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 1617 | }, 1618 | "is-glob": { 1619 | "version": "4.0.3", 1620 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1621 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1622 | "requires": { 1623 | "is-extglob": "^2.1.1" 1624 | } 1625 | }, 1626 | "is-number": { 1627 | "version": "7.0.0", 1628 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1629 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" 1630 | }, 1631 | "juice": { 1632 | "version": "8.1.0", 1633 | "resolved": "https://registry.npmjs.org/juice/-/juice-8.1.0.tgz", 1634 | "integrity": "sha512-FLzurJrx5Iv1e7CfBSZH68dC04EEvXvvVvPYB7Vx1WAuhCp1ZPIMtqxc+WTWxVkpTIC2Ach/GAv0rQbtGf6YMA==", 1635 | "requires": { 1636 | "cheerio": "1.0.0-rc.10", 1637 | "commander": "^6.1.0", 1638 | "mensch": "^0.3.4", 1639 | "slick": "^1.12.2", 1640 | "web-resource-inliner": "^6.0.1" 1641 | } 1642 | }, 1643 | "lilconfig": { 1644 | "version": "2.0.6", 1645 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", 1646 | "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" 1647 | }, 1648 | "mensch": { 1649 | "version": "0.3.4", 1650 | "resolved": "https://registry.npmjs.org/mensch/-/mensch-0.3.4.tgz", 1651 | "integrity": "sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==" 1652 | }, 1653 | "merge2": { 1654 | "version": "1.4.1", 1655 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1656 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" 1657 | }, 1658 | "micromatch": { 1659 | "version": "4.0.5", 1660 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 1661 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 1662 | "requires": { 1663 | "braces": "^3.0.2", 1664 | "picomatch": "^2.3.1" 1665 | } 1666 | }, 1667 | "mime": { 1668 | "version": "2.6.0", 1669 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", 1670 | "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==" 1671 | }, 1672 | "minimist": { 1673 | "version": "1.2.7", 1674 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 1675 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==" 1676 | }, 1677 | "nanoid": { 1678 | "version": "3.3.4", 1679 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", 1680 | "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==" 1681 | }, 1682 | "node-fetch": { 1683 | "version": "2.6.7", 1684 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 1685 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 1686 | "requires": { 1687 | "whatwg-url": "^5.0.0" 1688 | } 1689 | }, 1690 | "normalize-path": { 1691 | "version": "3.0.0", 1692 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1693 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" 1694 | }, 1695 | "nth-check": { 1696 | "version": "2.1.1", 1697 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", 1698 | "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", 1699 | "requires": { 1700 | "boolbase": "^1.0.0" 1701 | } 1702 | }, 1703 | "object-hash": { 1704 | "version": "3.0.0", 1705 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 1706 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==" 1707 | }, 1708 | "parse5": { 1709 | "version": "6.0.1", 1710 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 1711 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" 1712 | }, 1713 | "parse5-htmlparser2-tree-adapter": { 1714 | "version": "6.0.1", 1715 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", 1716 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", 1717 | "requires": { 1718 | "parse5": "^6.0.1" 1719 | } 1720 | }, 1721 | "path-parse": { 1722 | "version": "1.0.7", 1723 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1724 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1725 | }, 1726 | "picocolors": { 1727 | "version": "1.0.0", 1728 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 1729 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 1730 | }, 1731 | "picomatch": { 1732 | "version": "2.3.1", 1733 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1734 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" 1735 | }, 1736 | "pify": { 1737 | "version": "2.3.0", 1738 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1739 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" 1740 | }, 1741 | "postcss": { 1742 | "version": "8.4.18", 1743 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.18.tgz", 1744 | "integrity": "sha512-Wi8mWhncLJm11GATDaQKobXSNEYGUHeQLiQqDFG1qQ5UTDPTEvKw0Xt5NsTpktGTwLps3ByrWsBrG0rB8YQ9oA==", 1745 | "requires": { 1746 | "nanoid": "^3.3.4", 1747 | "picocolors": "^1.0.0", 1748 | "source-map-js": "^1.0.2" 1749 | } 1750 | }, 1751 | "postcss-import": { 1752 | "version": "14.1.0", 1753 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", 1754 | "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", 1755 | "requires": { 1756 | "postcss-value-parser": "^4.0.0", 1757 | "read-cache": "^1.0.0", 1758 | "resolve": "^1.1.7" 1759 | } 1760 | }, 1761 | "postcss-js": { 1762 | "version": "4.0.0", 1763 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", 1764 | "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", 1765 | "requires": { 1766 | "camelcase-css": "^2.0.1" 1767 | } 1768 | }, 1769 | "postcss-load-config": { 1770 | "version": "3.1.4", 1771 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", 1772 | "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", 1773 | "requires": { 1774 | "lilconfig": "^2.0.5", 1775 | "yaml": "^1.10.2" 1776 | } 1777 | }, 1778 | "postcss-nested": { 1779 | "version": "6.0.0", 1780 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", 1781 | "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", 1782 | "requires": { 1783 | "postcss-selector-parser": "^6.0.10" 1784 | } 1785 | }, 1786 | "postcss-selector-parser": { 1787 | "version": "6.0.10", 1788 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", 1789 | "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", 1790 | "requires": { 1791 | "cssesc": "^3.0.0", 1792 | "util-deprecate": "^1.0.2" 1793 | } 1794 | }, 1795 | "postcss-value-parser": { 1796 | "version": "4.2.0", 1797 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 1798 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" 1799 | }, 1800 | "queue-microtask": { 1801 | "version": "1.2.3", 1802 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1803 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" 1804 | }, 1805 | "quick-lru": { 1806 | "version": "5.1.1", 1807 | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", 1808 | "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" 1809 | }, 1810 | "read-cache": { 1811 | "version": "1.0.0", 1812 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 1813 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 1814 | "requires": { 1815 | "pify": "^2.3.0" 1816 | } 1817 | }, 1818 | "readdirp": { 1819 | "version": "3.6.0", 1820 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1821 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1822 | "requires": { 1823 | "picomatch": "^2.2.1" 1824 | } 1825 | }, 1826 | "require-directory": { 1827 | "version": "2.1.1", 1828 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1829 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" 1830 | }, 1831 | "resolve": { 1832 | "version": "1.22.1", 1833 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1834 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1835 | "requires": { 1836 | "is-core-module": "^2.9.0", 1837 | "path-parse": "^1.0.7", 1838 | "supports-preserve-symlinks-flag": "^1.0.0" 1839 | } 1840 | }, 1841 | "reusify": { 1842 | "version": "1.0.4", 1843 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1844 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" 1845 | }, 1846 | "run-parallel": { 1847 | "version": "1.2.0", 1848 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1849 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1850 | "requires": { 1851 | "queue-microtask": "^1.2.2" 1852 | } 1853 | }, 1854 | "slick": { 1855 | "version": "1.12.2", 1856 | "resolved": "https://registry.npmjs.org/slick/-/slick-1.12.2.tgz", 1857 | "integrity": "sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==" 1858 | }, 1859 | "source-map-js": { 1860 | "version": "1.0.2", 1861 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 1862 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==" 1863 | }, 1864 | "string-width": { 1865 | "version": "4.2.3", 1866 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1867 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1868 | "requires": { 1869 | "emoji-regex": "^8.0.0", 1870 | "is-fullwidth-code-point": "^3.0.0", 1871 | "strip-ansi": "^6.0.1" 1872 | } 1873 | }, 1874 | "strip-ansi": { 1875 | "version": "6.0.1", 1876 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1877 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1878 | "requires": { 1879 | "ansi-regex": "^5.0.1" 1880 | } 1881 | }, 1882 | "supports-preserve-symlinks-flag": { 1883 | "version": "1.0.0", 1884 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1885 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" 1886 | }, 1887 | "tailwindcss": { 1888 | "version": "3.2.2", 1889 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.2.2.tgz", 1890 | "integrity": "sha512-c2GtSdqg+harR4QeoTmex0Ngfg8IIHNeLQH5yr2B9uZbZR1Xt1rYbjWOWTcj3YLTZhrmZnPowoQDbSRFyZHQ5Q==", 1891 | "requires": { 1892 | "arg": "^5.0.2", 1893 | "chokidar": "^3.5.3", 1894 | "color-name": "^1.1.4", 1895 | "detective": "^5.2.1", 1896 | "didyoumean": "^1.2.2", 1897 | "dlv": "^1.1.3", 1898 | "fast-glob": "^3.2.12", 1899 | "glob-parent": "^6.0.2", 1900 | "is-glob": "^4.0.3", 1901 | "lilconfig": "^2.0.6", 1902 | "micromatch": "^4.0.5", 1903 | "normalize-path": "^3.0.0", 1904 | "object-hash": "^3.0.0", 1905 | "picocolors": "^1.0.0", 1906 | "postcss": "^8.4.18", 1907 | "postcss-import": "^14.1.0", 1908 | "postcss-js": "^4.0.0", 1909 | "postcss-load-config": "^3.1.4", 1910 | "postcss-nested": "6.0.0", 1911 | "postcss-selector-parser": "^6.0.10", 1912 | "postcss-value-parser": "^4.2.0", 1913 | "quick-lru": "^5.1.1", 1914 | "resolve": "^1.22.1" 1915 | } 1916 | }, 1917 | "to-regex-range": { 1918 | "version": "5.0.1", 1919 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1920 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1921 | "requires": { 1922 | "is-number": "^7.0.0" 1923 | } 1924 | }, 1925 | "tr46": { 1926 | "version": "0.0.3", 1927 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 1928 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 1929 | }, 1930 | "tslib": { 1931 | "version": "2.4.1", 1932 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 1933 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" 1934 | }, 1935 | "util-deprecate": { 1936 | "version": "1.0.2", 1937 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1938 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1939 | }, 1940 | "valid-data-url": { 1941 | "version": "3.0.1", 1942 | "resolved": "https://registry.npmjs.org/valid-data-url/-/valid-data-url-3.0.1.tgz", 1943 | "integrity": "sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==" 1944 | }, 1945 | "web-resource-inliner": { 1946 | "version": "6.0.1", 1947 | "resolved": "https://registry.npmjs.org/web-resource-inliner/-/web-resource-inliner-6.0.1.tgz", 1948 | "integrity": "sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==", 1949 | "requires": { 1950 | "ansi-colors": "^4.1.1", 1951 | "escape-goat": "^3.0.0", 1952 | "htmlparser2": "^5.0.0", 1953 | "mime": "^2.4.6", 1954 | "node-fetch": "^2.6.0", 1955 | "valid-data-url": "^3.0.0" 1956 | }, 1957 | "dependencies": { 1958 | "domhandler": { 1959 | "version": "3.3.0", 1960 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", 1961 | "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", 1962 | "requires": { 1963 | "domelementtype": "^2.0.1" 1964 | } 1965 | }, 1966 | "htmlparser2": { 1967 | "version": "5.0.1", 1968 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", 1969 | "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", 1970 | "requires": { 1971 | "domelementtype": "^2.0.1", 1972 | "domhandler": "^3.3.0", 1973 | "domutils": "^2.4.2", 1974 | "entities": "^2.0.0" 1975 | } 1976 | } 1977 | } 1978 | }, 1979 | "webidl-conversions": { 1980 | "version": "3.0.1", 1981 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 1982 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 1983 | }, 1984 | "whatwg-url": { 1985 | "version": "5.0.0", 1986 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 1987 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 1988 | "requires": { 1989 | "tr46": "~0.0.3", 1990 | "webidl-conversions": "^3.0.0" 1991 | } 1992 | }, 1993 | "wrap-ansi": { 1994 | "version": "7.0.0", 1995 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1996 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1997 | "requires": { 1998 | "ansi-styles": "^4.0.0", 1999 | "string-width": "^4.1.0", 2000 | "strip-ansi": "^6.0.0" 2001 | } 2002 | }, 2003 | "xtend": { 2004 | "version": "4.0.2", 2005 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2006 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" 2007 | }, 2008 | "y18n": { 2009 | "version": "5.0.8", 2010 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 2011 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" 2012 | }, 2013 | "yaml": { 2014 | "version": "1.10.2", 2015 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2016 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" 2017 | }, 2018 | "yargs": { 2019 | "version": "17.6.2", 2020 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", 2021 | "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", 2022 | "requires": { 2023 | "cliui": "^8.0.1", 2024 | "escalade": "^3.1.1", 2025 | "get-caller-file": "^2.0.5", 2026 | "require-directory": "^2.1.1", 2027 | "string-width": "^4.2.3", 2028 | "y18n": "^5.0.5", 2029 | "yargs-parser": "^21.1.1" 2030 | } 2031 | }, 2032 | "yargs-parser": { 2033 | "version": "21.1.1", 2034 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 2035 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" 2036 | } 2037 | } 2038 | } 2039 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "mailwind", 3 | "version": "2.2.0", 4 | "description": "Use Tailwind CSS to design HTML emails.", 5 | "license": "MIT", 6 | "homepage": "https://github.com/soheilpro/mailwind", 7 | "bin": { 8 | "mailwind": "./src/index.js" 9 | }, 10 | "author": "Soheil Rashidi", 11 | "dependencies": { 12 | "juice": "8.1.0", 13 | "yargs": "17.6.2" 14 | }, 15 | "peerDependencies": { 16 | "tailwindcss": "3.x" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | const path = require('path'); 4 | const fs = require('fs'); 5 | const os = require('os'); 6 | const { spawn } = require('child_process'); 7 | const yargs = require('yargs/yargs'); 8 | const juice = require('juice'); 9 | 10 | const argv = yargs(process.argv) 11 | .string('input-css') 12 | .string('input-html') 13 | .string('output-css') 14 | .string('output-html') 15 | .string('tailwind-config') 16 | .describe('input-css', 'The path to your custom CSS file') 17 | .describe('input-html', 'The path to your input HTML file') 18 | .describe('output-css', 'The path to the CSS file that will be generated') 19 | .describe('output-html', 'The path to the inlined HTML file that will be generated') 20 | .describe('tailwind-config', 'The path to your custom Tailwind config file') 21 | .example('$0 --input-html email.html --output-css style.css') 22 | .example('$0 --input-html email.html --output-html email-inlined.html') 23 | .argv; 24 | 25 | function exec(name, args) { 26 | return new Promise((resolve, reject) => { 27 | const child = spawn(name, args); 28 | let stdout = Buffer.alloc(0); 29 | let stderr = Buffer.alloc(0); 30 | 31 | child.stdout.on('data', data => { 32 | stdout = Buffer.concat([ stdout, data ]); 33 | }); 34 | 35 | child.stderr.on('data', data => { 36 | stderr = Buffer.concat([ stderr, data ]); 37 | }); 38 | 39 | child.on('error', error => { 40 | reject({ 41 | error: error, 42 | stdout: stdout.toString(), 43 | stderr: stderr.toString(), 44 | }); 45 | }); 46 | 47 | child.on('close', code => { 48 | resolve({ 49 | exit_code: code, 50 | stdout: stdout.toString(), 51 | stderr: stderr.toString(), 52 | }); 53 | }); 54 | }); 55 | } 56 | 57 | function inlineCSS(html, css) { 58 | return juice.inlineContent(html, css); 59 | }; 60 | 61 | async function main() { 62 | if (!argv['input-html']) { 63 | console.log('The --input-html option is required.'); 64 | process.exit(1); 65 | return; 66 | } 67 | 68 | if (!argv['output-css'] && !argv['output-html']) { 69 | console.log('Either --output-css or --output-html options must be specified.'); 70 | process.exit(1); 71 | return; 72 | } 73 | 74 | if (argv['input-css'] && argv['output-css'] && path.resolve(argv['input-css']) === path.resolve(argv['output-css'])) { 75 | console.log('The --input-css and --output-css options cannot refer to the same file.'); 76 | process.exit(1); 77 | return; 78 | } 79 | 80 | if (argv['input-html'] && argv['output-html'] && path.resolve(argv['input-html']) === path.resolve(argv['output-html'])) { 81 | console.log('The --input-html and --output-html options cannot refer to the same file.'); 82 | process.exit(1); 83 | return; 84 | } 85 | 86 | const tailwindcss_path = require.resolve('tailwindcss/lib/cli.js'); 87 | const tailwind_config_path = argv['tailwind-config'] || path.resolve(__dirname, './tailwind.config.js'); 88 | const input_css_path = argv['input-css'] || path.resolve(__dirname, './style.css'); 89 | const output_css_path = argv['output-css'] || path.resolve(os.tmpdir(), 'mailwind.css'); 90 | const input_html_path = argv['input-html']; 91 | const output_html_path = argv['output-html']; 92 | 93 | const result = await exec(process.argv0, [ 94 | tailwindcss_path, 95 | '--config', tailwind_config_path, 96 | '--input', input_css_path, 97 | '--output', output_css_path, 98 | '--content', input_html_path, 99 | ]); 100 | 101 | if (result.exit_code !== 0) { 102 | console.error('Failed to run Tailwind.'); 103 | console.error(result.stderr); 104 | process.exit(1); 105 | return; 106 | } 107 | 108 | if (output_html_path) { 109 | const input_html = fs.readFileSync(input_html_path).toString(); 110 | const output_css = fs.readFileSync(output_css_path).toString(); 111 | 112 | const inlined_html = inlineCSS(input_html, output_css); 113 | 114 | fs.writeFileSync(output_html_path, inlined_html); 115 | } 116 | } 117 | 118 | main().catch(error => { 119 | console.error(error); 120 | process.exit(1); 121 | }); 122 | -------------------------------------------------------------------------------- /src/style.css: -------------------------------------------------------------------------------- 1 | @tailwind utilities; 2 | -------------------------------------------------------------------------------- /src/tailwind.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | theme: { 3 | fontSize: { 4 | xs: '12px', 5 | sm: '14px', 6 | base: '16px', 7 | lg: '18px', 8 | xl: '20px', 9 | '2xl': '24px', 10 | '3xl': '30px', 11 | '4xl': '36px', 12 | '5xl': '48px', 13 | '6xl': '60px', 14 | '7xl': '72px', 15 | }, 16 | spacing: { 17 | px: '1px', 18 | 0: '0', 19 | 0.5: '2px', 20 | 1: '4px', 21 | 1.5: '6px', 22 | 2: '8px', 23 | 2.5: '10px', 24 | 3: '12px', 25 | 3.5: '14px', 26 | 4: '16px', 27 | 5: '20px', 28 | 6: '24px', 29 | 7: '28px', 30 | 8: '32px', 31 | 9: '36px', 32 | 10: '40px', 33 | 11: '44px', 34 | 12: '48px', 35 | 14: '56px', 36 | 16: '64px', 37 | 20: '80px', 38 | 24: '96px', 39 | 28: '112px', 40 | 32: '128px', 41 | 36: '144px', 42 | 40: '160px', 43 | 44: '176px', 44 | 48: '192px', 45 | 52: '208px', 46 | 56: '224px', 47 | 60: '240px', 48 | 64: '256px', 49 | 72: '288px', 50 | 80: '320px', 51 | 96: '384px', 52 | }, 53 | extend: { 54 | lineHeight: { 55 | 3: '12px', 56 | 4: '16px', 57 | 5: '20px', 58 | 6: '24px', 59 | 7: '28px', 60 | 8: '32px', 61 | 9: '36px', 62 | 10: '40px', 63 | }, 64 | }, 65 | }, 66 | corePlugins: { 67 | backdropOpacity: false, 68 | backgroundOpacity: false, 69 | borderOpacity: false, 70 | divideOpacity: false, 71 | placeholderOpacity: false, 72 | ringOpacity: false, 73 | textOpacity: false, 74 | }, 75 | } --------------------------------------------------------------------------------