├── .gitattributes ├── .gitignore ├── .vscode └── settings.json ├── README.md ├── manifest.json ├── package-lock.json ├── package.json ├── proto-write-landscape.gif ├── src ├── main.ts ├── styles.css ├── ui.tsx └── utilities.ts └── tsconfig.json /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.log 3 | *.css.d.ts 4 | build/ 5 | node_modules/ 6 | .vscode/ -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "json.schemas": [ 3 | { 4 | "fileMatch": [ 5 | "package.json" 6 | ], 7 | "url": "https://yuanqing.github.io/create-figma-plugin/figma-plugin.json" 8 | } 9 | ] 10 | } 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 🍜 figma-plugin-example-prototype-write 2 | 3 | ![Prototype Writes](proto-write-landscape.gif) 4 | 5 | The ability to write protoype interactions in the Figma plugin API has landed! This update allows plugins to create new prototype interactions in the editor. 6 | 7 | This plugin example is built using [Create Figma Plugin](https://yuanqing.github.io/create-figma-plugin/) by [ 8 | Yuan Qing Lim](https://github.com/yuanqing). It's an excellent boilerplate for new Figma plugins and includes a ton of useful utilities. 9 | 10 | Check out the [Figma plugin API docs](https://www.figma.com/plugin-docs/intro/) to learn more about writing plugins. 11 | 12 | ### Understanding reactions 13 | Under the hood, interactions are stored in the `reactions` array. A node can have multiple reaction objects in this array, and each is comprised of an `action` and a `trigger`. The `action` defines "what happens?" and the `trigger` defines "how will it happen?" 14 | 15 | Here's an example `reactions` array with a single reaction: 16 | ```js 17 | [ 18 | { // reaction 19 | "action": { 20 | "type": "NODE", 21 | "destinationId": "2:1", 22 | "navigation": "NAVIGATE", 23 | "transition": null, 24 | "preserveScrollPosition": false 25 | }, 26 | "trigger": { 27 | "type": "ON_CLICK" 28 | } 29 | } 30 | // additional reactions... 31 | ] 32 | ``` 33 | 34 | ### Setting reactions 35 | Like [many of the complex properties](https://www.figma.com/plugin-docs/editing-properties/), the `action` and `trigger` objects are `readonly` meaning you can't directly edit those properties. Instead, you'll want to make a copy of the reaction object or the entire `reactions` array. If your cloning individual reaction objects inside the array, **Create Figma Plugin** has [some useful utilities](https://yuanqing.github.io/create-figma-plugin/#object). 36 | 37 | ### Building valid reactions 38 | There's a range of different reactions in Figma and not all are compatible with eachother or have different reaction properties. While some of these will be caught during development (thanks to typings), you'll want to ensure your plugin properly checks for valid reactions. 39 | 40 | ## Development guide 41 | 42 | **Note:** This plugin uses esbuild for JavaScript bundling (built by Figma cofounder [Evan Wallace](https://github.com/evanw)!). While fairly stable, the project is still in active development. 43 | 44 | ### Pre-requisites 45 | 46 | - [Node.js](https://nodejs.org) – v14 47 | - [Figma desktop app](https://figma.com/downloads/) 48 | 49 | ### Build the plugin 50 | 51 | To build the example plugin: 52 | 53 | ``` 54 | $ npm run build 55 | ``` 56 | 57 | This will generate a [`manifest.json`](https://figma.com/plugin-docs/manifest/) file and a `build/` directory containing a JavaScript bundle for the plugin. 58 | 59 | To watch for code changes and rebuild the plugin automatically: 60 | 61 | ``` 62 | $ npm run watch 63 | ``` 64 | 65 | ### Install the plugin 66 | 67 | In the Figma desktop app: 68 | 69 | 1. Open a Figma document. 70 | 2. Go to `Plugins` → `Development` → `New Plugin…`. 71 | 3. Click the `Click to choose a manifest.json file` box, and select the `manifest.json` file that was generated. 72 | 73 | ### Debugging 74 | 75 | Use `console.log` statements to inspect values in your code. 76 | 77 | To open the developer console in the Figma desktop app, go to `Plugins` → `Development` → `Open Console`. 78 | 79 | ## See also 80 | 81 | - [Create Figma Plugin docs](https://yuanqing.github.io/create-figma-plugin/) 82 | - [Storybook](https://yuanqing.github.io/create-figma-plugin/ui/) 83 | - [Figma plugin API docs](https://figma.com/plugin-docs/api/) 84 | - [`figma/plugin-samples`](https://github.com/figma/plugin-samples) 85 | - [`yuanqing/figma-plugins`](https://github.com/yuanqing/figma-plugins) 86 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Plugin Example Prototype Write", 3 | "id": "figma-plugin-example-prototype-write", 4 | "api": "1.0.0", 5 | "main": "build/main.js", 6 | "ui": "build/ui.js" 7 | } 8 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "requires": true, 3 | "lockfileVersion": 1, 4 | "dependencies": { 5 | "@create-figma-plugin/build": { 6 | "version": "1.2.2", 7 | "resolved": "https://registry.npmjs.org/@create-figma-plugin/build/-/build-1.2.2.tgz", 8 | "integrity": "sha512-l4NvhdOh3R90dwKdvR0NchO53YXGYZnY4aGqrzo1e0uhhPjkcjb5bamnYUSFusWaz2DOeOLv/hAC9U5CtSr77A==", 9 | "dev": true, 10 | "requires": { 11 | "@create-figma-plugin/common": "^1.2.2", 12 | "chokidar": "^3.5.2", 13 | "cssnano": "^5.0.6", 14 | "esbuild": "^0.12.9", 15 | "find-up": "^5.0.0", 16 | "fs-extra": "^10.0.0", 17 | "globby": "^11.0.4", 18 | "indent-string": "^5.0.0", 19 | "kleur": "^4.1.4", 20 | "postcss": "^8.3.5", 21 | "postcss-modules": "^4.1.3", 22 | "rev-hash": "^3.0.0", 23 | "sade": "^1.7.4", 24 | "temp-write": "^5.0.0", 25 | "tempy": "^1.0.1", 26 | "typed-css-modules": "^0.7.0" 27 | } 28 | }, 29 | "@create-figma-plugin/common": { 30 | "version": "1.2.2", 31 | "resolved": "https://registry.npmjs.org/@create-figma-plugin/common/-/common-1.2.2.tgz", 32 | "integrity": "sha512-eWK7pI+y9f78Yi/B4LWF3DjwsvNE+IXg86FQogSPe+mIWBz+sdcWy/f0vTR1Bd4s/5t2aaq5BLzKU1khLtBSQA==", 33 | "dev": true, 34 | "requires": { 35 | "@sindresorhus/slugify": "2.1.0", 36 | "fs-extra": "^10.0.0", 37 | "kleur": "^4.1.4" 38 | } 39 | }, 40 | "@create-figma-plugin/tsconfig": { 41 | "version": "1.2.2", 42 | "resolved": "https://registry.npmjs.org/@create-figma-plugin/tsconfig/-/tsconfig-1.2.2.tgz", 43 | "integrity": "sha512-WrT5Rnc0DnonuoB1xxeOTuXJESoyxH7QCLQ3sWcvv9NI50X+wcrDtbvYFBMD8yN9vOnTPEfqupQT9w7vfkTVRQ==", 44 | "dev": true 45 | }, 46 | "@create-figma-plugin/ui": { 47 | "version": "1.2.2", 48 | "resolved": "https://registry.npmjs.org/@create-figma-plugin/ui/-/ui-1.2.2.tgz", 49 | "integrity": "sha512-Ar0P1XXemjELPsMXhyJcpcsb/SRKTAsDb5SkzajiZaHvU27JiTfkvDUtXt01pQelk2b/HwtOn/UiLYrnUqzqsg==", 50 | "requires": { 51 | "@create-figma-plugin/utilities": "^1.2.2" 52 | } 53 | }, 54 | "@create-figma-plugin/utilities": { 55 | "version": "1.2.2", 56 | "resolved": "https://registry.npmjs.org/@create-figma-plugin/utilities/-/utilities-1.2.2.tgz", 57 | "integrity": "sha512-GDrOweVtc9klGmkBImqSonNKVhmv0ExvXI5mCqeBteKPzrVw+iF1XDp8NAX1XUeTi02aYmGD8rBoJ164zqPoww==", 58 | "requires": { 59 | "hex-rgb": "^5.0.0", 60 | "natural-compare-lite": "1.4.0", 61 | "rgb-hex": "^4.0.0" 62 | } 63 | }, 64 | "@figma/plugin-typings": { 65 | "version": "1.28.0", 66 | "resolved": "https://registry.npmjs.org/@figma/plugin-typings/-/plugin-typings-1.28.0.tgz", 67 | "integrity": "sha512-Xypk+7LwbjkHVISRpN02jQbV0OvDMoIsuue/OKn5Hk7Bw3Dyxd3OjXfyzmV90p0CgpLtvEla2BsFqEfy6Xb3OA==", 68 | "dev": true 69 | }, 70 | "@nodelib/fs.scandir": { 71 | "version": "2.1.5", 72 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 73 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 74 | "dev": true, 75 | "requires": { 76 | "@nodelib/fs.stat": "2.0.5", 77 | "run-parallel": "^1.1.9" 78 | } 79 | }, 80 | "@nodelib/fs.stat": { 81 | "version": "2.0.5", 82 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 83 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 84 | "dev": true 85 | }, 86 | "@nodelib/fs.walk": { 87 | "version": "1.2.8", 88 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 89 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 90 | "dev": true, 91 | "requires": { 92 | "@nodelib/fs.scandir": "2.1.5", 93 | "fastq": "^1.6.0" 94 | } 95 | }, 96 | "@sindresorhus/slugify": { 97 | "version": "2.1.0", 98 | "resolved": "https://registry.npmjs.org/@sindresorhus/slugify/-/slugify-2.1.0.tgz", 99 | "integrity": "sha512-gU3Gdm/V167BmUwIn8APHZ3SeeRVRUSOdXxnt7Q/JkUHLXaaTA/prYmoRumwsSitJZWUDYMzDWdWgrOdvE8IRQ==", 100 | "dev": true, 101 | "requires": { 102 | "@sindresorhus/transliterate": "^1.0.0", 103 | "escape-string-regexp": "^5.0.0" 104 | } 105 | }, 106 | "@sindresorhus/transliterate": { 107 | "version": "1.3.0", 108 | "resolved": "https://registry.npmjs.org/@sindresorhus/transliterate/-/transliterate-1.3.0.tgz", 109 | "integrity": "sha512-/2t5zPKvJdBQUJ3xelUQcJo70ChMYngeGpaqApWHNR1bZGPgahgNx+mHJWIC7IP6F2ik1vkY2HVZqiNXxqPeBg==", 110 | "dev": true, 111 | "requires": { 112 | "escape-string-regexp": "^5.0.0", 113 | "lodash.deburr": "^4.1.0" 114 | } 115 | }, 116 | "@trysound/sax": { 117 | "version": "0.1.1", 118 | "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.1.1.tgz", 119 | "integrity": "sha512-Z6DoceYb/1xSg5+e+ZlPZ9v0N16ZvZ+wYMraFue4HYrE4ttONKtsvruIRf6t9TBR0YvSOfi1hUU0fJfBLCDYow==", 120 | "dev": true 121 | }, 122 | "@types/css-modules-loader-core": { 123 | "version": "1.1.0", 124 | "resolved": "https://registry.npmjs.org/@types/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", 125 | "integrity": "sha512-LMbyf7THPqLCPHIXAj79v9Pa193MeOHgp1fBFRR6s6VvEVHUFIcM5bc/WttslOf+lao4TURNN1X1zfW5wr2CHQ==", 126 | "dev": true, 127 | "requires": { 128 | "postcss": "7.x.x" 129 | }, 130 | "dependencies": { 131 | "ansi-styles": { 132 | "version": "3.2.1", 133 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 134 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 135 | "dev": true, 136 | "requires": { 137 | "color-convert": "^1.9.0" 138 | } 139 | }, 140 | "chalk": { 141 | "version": "2.4.2", 142 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 143 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 144 | "dev": true, 145 | "requires": { 146 | "ansi-styles": "^3.2.1", 147 | "escape-string-regexp": "^1.0.5", 148 | "supports-color": "^5.3.0" 149 | }, 150 | "dependencies": { 151 | "supports-color": { 152 | "version": "5.5.0", 153 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 154 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 155 | "dev": true, 156 | "requires": { 157 | "has-flag": "^3.0.0" 158 | } 159 | } 160 | } 161 | }, 162 | "color-convert": { 163 | "version": "1.9.3", 164 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 165 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 166 | "dev": true, 167 | "requires": { 168 | "color-name": "1.1.3" 169 | } 170 | }, 171 | "color-name": { 172 | "version": "1.1.3", 173 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 174 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 175 | "dev": true 176 | }, 177 | "escape-string-regexp": { 178 | "version": "1.0.5", 179 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 180 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 181 | "dev": true 182 | }, 183 | "has-flag": { 184 | "version": "3.0.0", 185 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 186 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 187 | "dev": true 188 | }, 189 | "postcss": { 190 | "version": "7.0.36", 191 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", 192 | "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", 193 | "dev": true, 194 | "requires": { 195 | "chalk": "^2.4.2", 196 | "source-map": "^0.6.1", 197 | "supports-color": "^6.1.0" 198 | } 199 | }, 200 | "supports-color": { 201 | "version": "6.1.0", 202 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 203 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 204 | "dev": true, 205 | "requires": { 206 | "has-flag": "^3.0.0" 207 | } 208 | } 209 | } 210 | }, 211 | "aggregate-error": { 212 | "version": "3.1.0", 213 | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", 214 | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", 215 | "dev": true, 216 | "requires": { 217 | "clean-stack": "^2.0.0", 218 | "indent-string": "^4.0.0" 219 | }, 220 | "dependencies": { 221 | "indent-string": { 222 | "version": "4.0.0", 223 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", 224 | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", 225 | "dev": true 226 | } 227 | } 228 | }, 229 | "alphanum-sort": { 230 | "version": "1.0.2", 231 | "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", 232 | "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", 233 | "dev": true 234 | }, 235 | "ansi-regex": { 236 | "version": "2.1.1", 237 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 238 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 239 | "dev": true 240 | }, 241 | "ansi-styles": { 242 | "version": "4.3.0", 243 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 244 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 245 | "dev": true, 246 | "requires": { 247 | "color-convert": "^2.0.1" 248 | } 249 | }, 250 | "anymatch": { 251 | "version": "3.1.2", 252 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 253 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 254 | "dev": true, 255 | "requires": { 256 | "normalize-path": "^3.0.0", 257 | "picomatch": "^2.0.4" 258 | } 259 | }, 260 | "array-union": { 261 | "version": "2.1.0", 262 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 263 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 264 | "dev": true 265 | }, 266 | "balanced-match": { 267 | "version": "1.0.2", 268 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 269 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 270 | "dev": true 271 | }, 272 | "big.js": { 273 | "version": "5.2.2", 274 | "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", 275 | "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", 276 | "dev": true 277 | }, 278 | "binary-extensions": { 279 | "version": "2.2.0", 280 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 281 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 282 | "dev": true 283 | }, 284 | "boolbase": { 285 | "version": "1.0.0", 286 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 287 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", 288 | "dev": true 289 | }, 290 | "brace-expansion": { 291 | "version": "1.1.11", 292 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 293 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 294 | "dev": true, 295 | "requires": { 296 | "balanced-match": "^1.0.0", 297 | "concat-map": "0.0.1" 298 | } 299 | }, 300 | "braces": { 301 | "version": "3.0.2", 302 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 303 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 304 | "dev": true, 305 | "requires": { 306 | "fill-range": "^7.0.1" 307 | } 308 | }, 309 | "browserslist": { 310 | "version": "4.16.6", 311 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", 312 | "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", 313 | "dev": true, 314 | "requires": { 315 | "caniuse-lite": "^1.0.30001219", 316 | "colorette": "^1.2.2", 317 | "electron-to-chromium": "^1.3.723", 318 | "escalade": "^3.1.1", 319 | "node-releases": "^1.1.71" 320 | } 321 | }, 322 | "camelcase": { 323 | "version": "5.3.1", 324 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", 325 | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", 326 | "dev": true 327 | }, 328 | "caniuse-api": { 329 | "version": "3.0.0", 330 | "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", 331 | "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", 332 | "dev": true, 333 | "requires": { 334 | "browserslist": "^4.0.0", 335 | "caniuse-lite": "^1.0.0", 336 | "lodash.memoize": "^4.1.2", 337 | "lodash.uniq": "^4.5.0" 338 | } 339 | }, 340 | "caniuse-lite": { 341 | "version": "1.0.30001247", 342 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001247.tgz", 343 | "integrity": "sha512-4rS7co+7+AoOSPRPOPUt5/GdaqZc0EsUpWk66ofE3HJTAajUK2Ss2VwoNzVN69ghg8lYYlh0an0Iy4LIHHo9UQ==", 344 | "dev": true 345 | }, 346 | "chalk": { 347 | "version": "4.1.1", 348 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", 349 | "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", 350 | "dev": true, 351 | "requires": { 352 | "ansi-styles": "^4.1.0", 353 | "supports-color": "^7.1.0" 354 | } 355 | }, 356 | "chokidar": { 357 | "version": "3.5.2", 358 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", 359 | "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", 360 | "dev": true, 361 | "requires": { 362 | "anymatch": "~3.1.2", 363 | "braces": "~3.0.2", 364 | "fsevents": "~2.3.2", 365 | "glob-parent": "~5.1.2", 366 | "is-binary-path": "~2.1.0", 367 | "is-glob": "~4.0.1", 368 | "normalize-path": "~3.0.0", 369 | "readdirp": "~3.6.0" 370 | } 371 | }, 372 | "clean-stack": { 373 | "version": "2.2.0", 374 | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", 375 | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", 376 | "dev": true 377 | }, 378 | "cliui": { 379 | "version": "6.0.0", 380 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", 381 | "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", 382 | "dev": true, 383 | "requires": { 384 | "string-width": "^4.2.0", 385 | "strip-ansi": "^6.0.0", 386 | "wrap-ansi": "^6.2.0" 387 | }, 388 | "dependencies": { 389 | "ansi-regex": { 390 | "version": "5.0.0", 391 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 392 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 393 | "dev": true 394 | }, 395 | "strip-ansi": { 396 | "version": "6.0.0", 397 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 398 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 399 | "dev": true, 400 | "requires": { 401 | "ansi-regex": "^5.0.0" 402 | } 403 | } 404 | } 405 | }, 406 | "color-convert": { 407 | "version": "2.0.1", 408 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 409 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 410 | "dev": true, 411 | "requires": { 412 | "color-name": "~1.1.4" 413 | } 414 | }, 415 | "color-name": { 416 | "version": "1.1.4", 417 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 418 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 419 | "dev": true 420 | }, 421 | "colord": { 422 | "version": "2.4.0", 423 | "resolved": "https://registry.npmjs.org/colord/-/colord-2.4.0.tgz", 424 | "integrity": "sha512-2306/NeTDOykDwvFQK0ctnP+9I5KQdqVm+IJAM6MsAr4vvy1llAdJyax4YmZoqTxdJ/lvRBwR8MqyJi/tupBAw==", 425 | "dev": true 426 | }, 427 | "colorette": { 428 | "version": "1.2.2", 429 | "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", 430 | "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", 431 | "dev": true 432 | }, 433 | "commander": { 434 | "version": "7.2.0", 435 | "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", 436 | "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", 437 | "dev": true 438 | }, 439 | "concat-map": { 440 | "version": "0.0.1", 441 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 442 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 443 | "dev": true 444 | }, 445 | "crypto-random-string": { 446 | "version": "2.0.0", 447 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", 448 | "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", 449 | "dev": true 450 | }, 451 | "css-color-names": { 452 | "version": "1.0.1", 453 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-1.0.1.tgz", 454 | "integrity": "sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==", 455 | "dev": true 456 | }, 457 | "css-declaration-sorter": { 458 | "version": "6.1.1", 459 | "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.1.1.tgz", 460 | "integrity": "sha512-BZ1aOuif2Sb7tQYY1GeCjG7F++8ggnwUkH5Ictw0mrdpqpEd+zWmcPdstnH2TItlb74FqR0DrVEieon221T/1Q==", 461 | "dev": true, 462 | "requires": { 463 | "timsort": "^0.3.0" 464 | } 465 | }, 466 | "css-modules-loader-core": { 467 | "version": "1.1.0", 468 | "resolved": "https://registry.npmjs.org/css-modules-loader-core/-/css-modules-loader-core-1.1.0.tgz", 469 | "integrity": "sha1-WQhmgpShvs0mGuCkziGwtVHyHRY=", 470 | "dev": true, 471 | "requires": { 472 | "icss-replace-symbols": "1.1.0", 473 | "postcss": "6.0.1", 474 | "postcss-modules-extract-imports": "1.1.0", 475 | "postcss-modules-local-by-default": "1.2.0", 476 | "postcss-modules-scope": "1.1.0", 477 | "postcss-modules-values": "1.3.0" 478 | }, 479 | "dependencies": { 480 | "ansi-styles": { 481 | "version": "2.2.1", 482 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 483 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 484 | "dev": true 485 | }, 486 | "chalk": { 487 | "version": "1.1.3", 488 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 489 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 490 | "dev": true, 491 | "requires": { 492 | "ansi-styles": "^2.2.1", 493 | "escape-string-regexp": "^1.0.2", 494 | "has-ansi": "^2.0.0", 495 | "strip-ansi": "^3.0.0", 496 | "supports-color": "^2.0.0" 497 | }, 498 | "dependencies": { 499 | "supports-color": { 500 | "version": "2.0.0", 501 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 502 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 503 | "dev": true 504 | } 505 | } 506 | }, 507 | "escape-string-regexp": { 508 | "version": "1.0.5", 509 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 510 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 511 | "dev": true 512 | }, 513 | "has-flag": { 514 | "version": "1.0.0", 515 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 516 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 517 | "dev": true 518 | }, 519 | "postcss": { 520 | "version": "6.0.1", 521 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.1.tgz", 522 | "integrity": "sha1-AA29H47vIXqjaLmiEsX8QLKo8/I=", 523 | "dev": true, 524 | "requires": { 525 | "chalk": "^1.1.3", 526 | "source-map": "^0.5.6", 527 | "supports-color": "^3.2.3" 528 | } 529 | }, 530 | "postcss-modules-extract-imports": { 531 | "version": "1.1.0", 532 | "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.1.0.tgz", 533 | "integrity": "sha1-thTJcgvmgW6u41+zpfqh26agXds=", 534 | "dev": true, 535 | "requires": { 536 | "postcss": "^6.0.1" 537 | } 538 | }, 539 | "postcss-modules-local-by-default": { 540 | "version": "1.2.0", 541 | "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", 542 | "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", 543 | "dev": true, 544 | "requires": { 545 | "css-selector-tokenizer": "^0.7.0", 546 | "postcss": "^6.0.1" 547 | } 548 | }, 549 | "postcss-modules-scope": { 550 | "version": "1.1.0", 551 | "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", 552 | "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", 553 | "dev": true, 554 | "requires": { 555 | "css-selector-tokenizer": "^0.7.0", 556 | "postcss": "^6.0.1" 557 | } 558 | }, 559 | "postcss-modules-values": { 560 | "version": "1.3.0", 561 | "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", 562 | "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", 563 | "dev": true, 564 | "requires": { 565 | "icss-replace-symbols": "^1.1.0", 566 | "postcss": "^6.0.1" 567 | } 568 | }, 569 | "source-map": { 570 | "version": "0.5.7", 571 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 572 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", 573 | "dev": true 574 | }, 575 | "supports-color": { 576 | "version": "3.2.3", 577 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", 578 | "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", 579 | "dev": true, 580 | "requires": { 581 | "has-flag": "^1.0.0" 582 | } 583 | } 584 | } 585 | }, 586 | "css-select": { 587 | "version": "4.1.3", 588 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", 589 | "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", 590 | "dev": true, 591 | "requires": { 592 | "boolbase": "^1.0.0", 593 | "css-what": "^5.0.0", 594 | "domhandler": "^4.2.0", 595 | "domutils": "^2.6.0", 596 | "nth-check": "^2.0.0" 597 | } 598 | }, 599 | "css-selector-tokenizer": { 600 | "version": "0.7.3", 601 | "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", 602 | "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", 603 | "dev": true, 604 | "requires": { 605 | "cssesc": "^3.0.0", 606 | "fastparse": "^1.1.2" 607 | } 608 | }, 609 | "css-tree": { 610 | "version": "1.1.3", 611 | "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", 612 | "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", 613 | "dev": true, 614 | "requires": { 615 | "mdn-data": "2.0.14", 616 | "source-map": "^0.6.1" 617 | } 618 | }, 619 | "css-what": { 620 | "version": "5.0.1", 621 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", 622 | "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==", 623 | "dev": true 624 | }, 625 | "cssesc": { 626 | "version": "3.0.0", 627 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 628 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 629 | "dev": true 630 | }, 631 | "cssnano": { 632 | "version": "5.0.7", 633 | "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.0.7.tgz", 634 | "integrity": "sha512-7C0tbb298hef3rq+TtBbMuezBQ9VrFtrQEsPNuBKNVgWny/67vdRsnq8EoNu7TRjAHURgYvWlRIpCUmcMZkRzw==", 635 | "dev": true, 636 | "requires": { 637 | "cssnano-preset-default": "^5.1.3", 638 | "is-resolvable": "^1.1.0", 639 | "lilconfig": "^2.0.3", 640 | "yaml": "^1.10.2" 641 | } 642 | }, 643 | "cssnano-preset-default": { 644 | "version": "5.1.3", 645 | "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-5.1.3.tgz", 646 | "integrity": "sha512-qo9tX+t4yAAZ/yagVV3b+QBKeLklQbmgR3wI7mccrDcR+bEk9iHgZN1E7doX68y9ThznLya3RDmR+nc7l6/2WQ==", 647 | "dev": true, 648 | "requires": { 649 | "css-declaration-sorter": "^6.0.3", 650 | "cssnano-utils": "^2.0.1", 651 | "postcss-calc": "^8.0.0", 652 | "postcss-colormin": "^5.2.0", 653 | "postcss-convert-values": "^5.0.1", 654 | "postcss-discard-comments": "^5.0.1", 655 | "postcss-discard-duplicates": "^5.0.1", 656 | "postcss-discard-empty": "^5.0.1", 657 | "postcss-discard-overridden": "^5.0.1", 658 | "postcss-merge-longhand": "^5.0.2", 659 | "postcss-merge-rules": "^5.0.2", 660 | "postcss-minify-font-values": "^5.0.1", 661 | "postcss-minify-gradients": "^5.0.1", 662 | "postcss-minify-params": "^5.0.1", 663 | "postcss-minify-selectors": "^5.1.0", 664 | "postcss-normalize-charset": "^5.0.1", 665 | "postcss-normalize-display-values": "^5.0.1", 666 | "postcss-normalize-positions": "^5.0.1", 667 | "postcss-normalize-repeat-style": "^5.0.1", 668 | "postcss-normalize-string": "^5.0.1", 669 | "postcss-normalize-timing-functions": "^5.0.1", 670 | "postcss-normalize-unicode": "^5.0.1", 671 | "postcss-normalize-url": "^5.0.2", 672 | "postcss-normalize-whitespace": "^5.0.1", 673 | "postcss-ordered-values": "^5.0.2", 674 | "postcss-reduce-initial": "^5.0.1", 675 | "postcss-reduce-transforms": "^5.0.1", 676 | "postcss-svgo": "^5.0.2", 677 | "postcss-unique-selectors": "^5.0.1" 678 | } 679 | }, 680 | "cssnano-utils": { 681 | "version": "2.0.1", 682 | "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-2.0.1.tgz", 683 | "integrity": "sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==", 684 | "dev": true 685 | }, 686 | "csso": { 687 | "version": "4.2.0", 688 | "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", 689 | "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", 690 | "dev": true, 691 | "requires": { 692 | "css-tree": "^1.1.2" 693 | } 694 | }, 695 | "decamelize": { 696 | "version": "1.2.0", 697 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 698 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", 699 | "dev": true 700 | }, 701 | "del": { 702 | "version": "6.0.0", 703 | "resolved": "https://registry.npmjs.org/del/-/del-6.0.0.tgz", 704 | "integrity": "sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==", 705 | "dev": true, 706 | "requires": { 707 | "globby": "^11.0.1", 708 | "graceful-fs": "^4.2.4", 709 | "is-glob": "^4.0.1", 710 | "is-path-cwd": "^2.2.0", 711 | "is-path-inside": "^3.0.2", 712 | "p-map": "^4.0.0", 713 | "rimraf": "^3.0.2", 714 | "slash": "^3.0.0" 715 | } 716 | }, 717 | "dir-glob": { 718 | "version": "3.0.1", 719 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 720 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 721 | "dev": true, 722 | "requires": { 723 | "path-type": "^4.0.0" 724 | } 725 | }, 726 | "dom-serializer": { 727 | "version": "1.3.2", 728 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 729 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", 730 | "dev": true, 731 | "requires": { 732 | "domelementtype": "^2.0.1", 733 | "domhandler": "^4.2.0", 734 | "entities": "^2.0.0" 735 | } 736 | }, 737 | "domelementtype": { 738 | "version": "2.2.0", 739 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 740 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 741 | "dev": true 742 | }, 743 | "domhandler": { 744 | "version": "4.2.0", 745 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", 746 | "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", 747 | "dev": true, 748 | "requires": { 749 | "domelementtype": "^2.2.0" 750 | } 751 | }, 752 | "domutils": { 753 | "version": "2.7.0", 754 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", 755 | "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", 756 | "dev": true, 757 | "requires": { 758 | "dom-serializer": "^1.0.1", 759 | "domelementtype": "^2.2.0", 760 | "domhandler": "^4.2.0" 761 | } 762 | }, 763 | "electron-to-chromium": { 764 | "version": "1.3.787", 765 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.787.tgz", 766 | "integrity": "sha512-zeM5AFwvTlSYvGpBaFZKVo7GQEWSk6hS3rQ7mdrr3qB7CiqVl84K6nIPznyKSu0b8ABiEeMEIqyBuzqMkxnjjg==", 767 | "dev": true 768 | }, 769 | "emoji-regex": { 770 | "version": "8.0.0", 771 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 772 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 773 | "dev": true 774 | }, 775 | "emojis-list": { 776 | "version": "3.0.0", 777 | "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", 778 | "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", 779 | "dev": true 780 | }, 781 | "entities": { 782 | "version": "2.2.0", 783 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 784 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 785 | "dev": true 786 | }, 787 | "esbuild": { 788 | "version": "0.12.16", 789 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.12.16.tgz", 790 | "integrity": "sha512-XqI9cXP2bmQ6MREIqrYBb13KfYFSERsV1+e5jSVWps8dNlLZK+hln7d0mznzDIpfISsg/AgQW0DW3kSInXWhrg==", 791 | "dev": true 792 | }, 793 | "escalade": { 794 | "version": "3.1.1", 795 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 796 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 797 | "dev": true 798 | }, 799 | "escape-string-regexp": { 800 | "version": "5.0.0", 801 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", 802 | "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", 803 | "dev": true 804 | }, 805 | "fast-glob": { 806 | "version": "3.2.7", 807 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", 808 | "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", 809 | "dev": true, 810 | "requires": { 811 | "@nodelib/fs.stat": "^2.0.2", 812 | "@nodelib/fs.walk": "^1.2.3", 813 | "glob-parent": "^5.1.2", 814 | "merge2": "^1.3.0", 815 | "micromatch": "^4.0.4" 816 | } 817 | }, 818 | "fastparse": { 819 | "version": "1.1.2", 820 | "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", 821 | "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", 822 | "dev": true 823 | }, 824 | "fastq": { 825 | "version": "1.11.1", 826 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", 827 | "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", 828 | "dev": true, 829 | "requires": { 830 | "reusify": "^1.0.4" 831 | } 832 | }, 833 | "fill-range": { 834 | "version": "7.0.1", 835 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 836 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 837 | "dev": true, 838 | "requires": { 839 | "to-regex-range": "^5.0.1" 840 | } 841 | }, 842 | "find-up": { 843 | "version": "5.0.0", 844 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 845 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 846 | "dev": true, 847 | "requires": { 848 | "locate-path": "^6.0.0", 849 | "path-exists": "^4.0.0" 850 | } 851 | }, 852 | "fs-extra": { 853 | "version": "10.0.0", 854 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", 855 | "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", 856 | "dev": true, 857 | "requires": { 858 | "graceful-fs": "^4.2.0", 859 | "jsonfile": "^6.0.1", 860 | "universalify": "^2.0.0" 861 | } 862 | }, 863 | "fs.realpath": { 864 | "version": "1.0.0", 865 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 866 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 867 | "dev": true 868 | }, 869 | "fsevents": { 870 | "version": "2.3.2", 871 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 872 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 873 | "dev": true, 874 | "optional": true 875 | }, 876 | "generic-names": { 877 | "version": "2.0.1", 878 | "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-2.0.1.tgz", 879 | "integrity": "sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==", 880 | "dev": true, 881 | "requires": { 882 | "loader-utils": "^1.1.0" 883 | } 884 | }, 885 | "get-caller-file": { 886 | "version": "2.0.5", 887 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 888 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 889 | "dev": true 890 | }, 891 | "glob": { 892 | "version": "7.1.7", 893 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", 894 | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", 895 | "dev": true, 896 | "requires": { 897 | "fs.realpath": "^1.0.0", 898 | "inflight": "^1.0.4", 899 | "inherits": "2", 900 | "minimatch": "^3.0.4", 901 | "once": "^1.3.0", 902 | "path-is-absolute": "^1.0.0" 903 | } 904 | }, 905 | "glob-parent": { 906 | "version": "5.1.2", 907 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 908 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 909 | "dev": true, 910 | "requires": { 911 | "is-glob": "^4.0.1" 912 | } 913 | }, 914 | "globby": { 915 | "version": "11.0.4", 916 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", 917 | "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", 918 | "dev": true, 919 | "requires": { 920 | "array-union": "^2.1.0", 921 | "dir-glob": "^3.0.1", 922 | "fast-glob": "^3.1.1", 923 | "ignore": "^5.1.4", 924 | "merge2": "^1.3.0", 925 | "slash": "^3.0.0" 926 | } 927 | }, 928 | "graceful-fs": { 929 | "version": "4.2.6", 930 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", 931 | "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", 932 | "dev": true 933 | }, 934 | "has-ansi": { 935 | "version": "2.0.0", 936 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 937 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 938 | "dev": true, 939 | "requires": { 940 | "ansi-regex": "^2.0.0" 941 | } 942 | }, 943 | "has-flag": { 944 | "version": "4.0.0", 945 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 946 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 947 | "dev": true 948 | }, 949 | "hex-color-regex": { 950 | "version": "1.1.0", 951 | "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", 952 | "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", 953 | "dev": true 954 | }, 955 | "hex-rgb": { 956 | "version": "5.0.0", 957 | "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-5.0.0.tgz", 958 | "integrity": "sha512-NQO+lgVUCtHxZ792FodgW0zflK+ozS9X9dwGp9XvvmPlH7pyxd588cn24TD3rmPm/N0AIRXF10Otah8yKqGw4w==" 959 | }, 960 | "hsl-regex": { 961 | "version": "1.0.0", 962 | "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", 963 | "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", 964 | "dev": true 965 | }, 966 | "hsla-regex": { 967 | "version": "1.0.0", 968 | "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", 969 | "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", 970 | "dev": true 971 | }, 972 | "icss-replace-symbols": { 973 | "version": "1.1.0", 974 | "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", 975 | "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", 976 | "dev": true 977 | }, 978 | "icss-utils": { 979 | "version": "5.1.0", 980 | "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", 981 | "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", 982 | "dev": true 983 | }, 984 | "ignore": { 985 | "version": "5.1.8", 986 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", 987 | "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", 988 | "dev": true 989 | }, 990 | "indent-string": { 991 | "version": "5.0.0", 992 | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", 993 | "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", 994 | "dev": true 995 | }, 996 | "inflight": { 997 | "version": "1.0.6", 998 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 999 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1000 | "dev": true, 1001 | "requires": { 1002 | "once": "^1.3.0", 1003 | "wrappy": "1" 1004 | } 1005 | }, 1006 | "inherits": { 1007 | "version": "2.0.4", 1008 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1009 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1010 | "dev": true 1011 | }, 1012 | "is-absolute-url": { 1013 | "version": "3.0.3", 1014 | "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", 1015 | "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", 1016 | "dev": true 1017 | }, 1018 | "is-binary-path": { 1019 | "version": "2.1.0", 1020 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1021 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1022 | "dev": true, 1023 | "requires": { 1024 | "binary-extensions": "^2.0.0" 1025 | } 1026 | }, 1027 | "is-color-stop": { 1028 | "version": "1.1.0", 1029 | "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", 1030 | "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", 1031 | "dev": true, 1032 | "requires": { 1033 | "css-color-names": "^0.0.4", 1034 | "hex-color-regex": "^1.1.0", 1035 | "hsl-regex": "^1.0.0", 1036 | "hsla-regex": "^1.0.0", 1037 | "rgb-regex": "^1.0.1", 1038 | "rgba-regex": "^1.0.0" 1039 | }, 1040 | "dependencies": { 1041 | "css-color-names": { 1042 | "version": "0.0.4", 1043 | "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", 1044 | "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", 1045 | "dev": true 1046 | } 1047 | } 1048 | }, 1049 | "is-extglob": { 1050 | "version": "2.1.1", 1051 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1052 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1053 | "dev": true 1054 | }, 1055 | "is-fullwidth-code-point": { 1056 | "version": "3.0.0", 1057 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1058 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1059 | "dev": true 1060 | }, 1061 | "is-glob": { 1062 | "version": "4.0.1", 1063 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1064 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1065 | "dev": true, 1066 | "requires": { 1067 | "is-extglob": "^2.1.1" 1068 | } 1069 | }, 1070 | "is-number": { 1071 | "version": "7.0.0", 1072 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1073 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1074 | "dev": true 1075 | }, 1076 | "is-path-cwd": { 1077 | "version": "2.2.0", 1078 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", 1079 | "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", 1080 | "dev": true 1081 | }, 1082 | "is-path-inside": { 1083 | "version": "3.0.3", 1084 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1085 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1086 | "dev": true 1087 | }, 1088 | "is-resolvable": { 1089 | "version": "1.1.0", 1090 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", 1091 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", 1092 | "dev": true 1093 | }, 1094 | "is-stream": { 1095 | "version": "2.0.1", 1096 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1097 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1098 | "dev": true 1099 | }, 1100 | "is-there": { 1101 | "version": "4.5.1", 1102 | "resolved": "https://registry.npmjs.org/is-there/-/is-there-4.5.1.tgz", 1103 | "integrity": "sha512-vIZ7HTXAoRoIwYSsTnxb0sg9L6rth+JOulNcavsbskQkCIWoSM2cjFOWZs4wGziGZER+Xgs/HXiCQZgiL8ppxQ==", 1104 | "dev": true 1105 | }, 1106 | "json5": { 1107 | "version": "1.0.1", 1108 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", 1109 | "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", 1110 | "dev": true, 1111 | "requires": { 1112 | "minimist": "^1.2.0" 1113 | } 1114 | }, 1115 | "jsonfile": { 1116 | "version": "6.1.0", 1117 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 1118 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 1119 | "dev": true, 1120 | "requires": { 1121 | "graceful-fs": "^4.1.6", 1122 | "universalify": "^2.0.0" 1123 | } 1124 | }, 1125 | "kleur": { 1126 | "version": "4.1.4", 1127 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.4.tgz", 1128 | "integrity": "sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==", 1129 | "dev": true 1130 | }, 1131 | "lilconfig": { 1132 | "version": "2.0.3", 1133 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", 1134 | "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", 1135 | "dev": true 1136 | }, 1137 | "loader-utils": { 1138 | "version": "1.4.0", 1139 | "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", 1140 | "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", 1141 | "dev": true, 1142 | "requires": { 1143 | "big.js": "^5.2.2", 1144 | "emojis-list": "^3.0.0", 1145 | "json5": "^1.0.1" 1146 | } 1147 | }, 1148 | "locate-path": { 1149 | "version": "6.0.0", 1150 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1151 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1152 | "dev": true, 1153 | "requires": { 1154 | "p-locate": "^5.0.0" 1155 | } 1156 | }, 1157 | "lodash.camelcase": { 1158 | "version": "4.3.0", 1159 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 1160 | "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", 1161 | "dev": true 1162 | }, 1163 | "lodash.deburr": { 1164 | "version": "4.1.0", 1165 | "resolved": "https://registry.npmjs.org/lodash.deburr/-/lodash.deburr-4.1.0.tgz", 1166 | "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", 1167 | "dev": true 1168 | }, 1169 | "lodash.memoize": { 1170 | "version": "4.1.2", 1171 | "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", 1172 | "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", 1173 | "dev": true 1174 | }, 1175 | "lodash.uniq": { 1176 | "version": "4.5.0", 1177 | "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", 1178 | "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", 1179 | "dev": true 1180 | }, 1181 | "mdn-data": { 1182 | "version": "2.0.14", 1183 | "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", 1184 | "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", 1185 | "dev": true 1186 | }, 1187 | "merge2": { 1188 | "version": "1.4.1", 1189 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 1190 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 1191 | "dev": true 1192 | }, 1193 | "micromatch": { 1194 | "version": "4.0.4", 1195 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", 1196 | "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", 1197 | "dev": true, 1198 | "requires": { 1199 | "braces": "^3.0.1", 1200 | "picomatch": "^2.2.3" 1201 | } 1202 | }, 1203 | "minimatch": { 1204 | "version": "3.0.4", 1205 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1206 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1207 | "dev": true, 1208 | "requires": { 1209 | "brace-expansion": "^1.1.7" 1210 | } 1211 | }, 1212 | "minimist": { 1213 | "version": "1.2.5", 1214 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 1215 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 1216 | "dev": true 1217 | }, 1218 | "mkdirp": { 1219 | "version": "1.0.4", 1220 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1221 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1222 | "dev": true 1223 | }, 1224 | "mri": { 1225 | "version": "1.1.6", 1226 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 1227 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 1228 | "dev": true 1229 | }, 1230 | "nanoid": { 1231 | "version": "3.1.23", 1232 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", 1233 | "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", 1234 | "dev": true 1235 | }, 1236 | "natural-compare-lite": { 1237 | "version": "1.4.0", 1238 | "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", 1239 | "integrity": "sha1-F7CVgZiJef3a/gIB6TG6kzyWy7Q=" 1240 | }, 1241 | "node-releases": { 1242 | "version": "1.1.73", 1243 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", 1244 | "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", 1245 | "dev": true 1246 | }, 1247 | "normalize-path": { 1248 | "version": "3.0.0", 1249 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1250 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1251 | "dev": true 1252 | }, 1253 | "normalize-url": { 1254 | "version": "6.1.0", 1255 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", 1256 | "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", 1257 | "dev": true 1258 | }, 1259 | "nth-check": { 1260 | "version": "2.0.0", 1261 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", 1262 | "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", 1263 | "dev": true, 1264 | "requires": { 1265 | "boolbase": "^1.0.0" 1266 | } 1267 | }, 1268 | "once": { 1269 | "version": "1.4.0", 1270 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1271 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1272 | "dev": true, 1273 | "requires": { 1274 | "wrappy": "1" 1275 | } 1276 | }, 1277 | "p-limit": { 1278 | "version": "3.1.0", 1279 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1280 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1281 | "dev": true, 1282 | "requires": { 1283 | "yocto-queue": "^0.1.0" 1284 | } 1285 | }, 1286 | "p-locate": { 1287 | "version": "5.0.0", 1288 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1289 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1290 | "dev": true, 1291 | "requires": { 1292 | "p-limit": "^3.0.2" 1293 | } 1294 | }, 1295 | "p-map": { 1296 | "version": "4.0.0", 1297 | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", 1298 | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", 1299 | "dev": true, 1300 | "requires": { 1301 | "aggregate-error": "^3.0.0" 1302 | } 1303 | }, 1304 | "p-try": { 1305 | "version": "2.2.0", 1306 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 1307 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 1308 | "dev": true 1309 | }, 1310 | "path-exists": { 1311 | "version": "4.0.0", 1312 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1313 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1314 | "dev": true 1315 | }, 1316 | "path-is-absolute": { 1317 | "version": "1.0.1", 1318 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1319 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1320 | "dev": true 1321 | }, 1322 | "path-type": { 1323 | "version": "4.0.0", 1324 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 1325 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 1326 | "dev": true 1327 | }, 1328 | "picomatch": { 1329 | "version": "2.3.0", 1330 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", 1331 | "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", 1332 | "dev": true 1333 | }, 1334 | "postcss": { 1335 | "version": "8.3.6", 1336 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", 1337 | "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", 1338 | "dev": true, 1339 | "requires": { 1340 | "colorette": "^1.2.2", 1341 | "nanoid": "^3.1.23", 1342 | "source-map-js": "^0.6.2" 1343 | } 1344 | }, 1345 | "postcss-calc": { 1346 | "version": "8.0.0", 1347 | "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-8.0.0.tgz", 1348 | "integrity": "sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==", 1349 | "dev": true, 1350 | "requires": { 1351 | "postcss-selector-parser": "^6.0.2", 1352 | "postcss-value-parser": "^4.0.2" 1353 | } 1354 | }, 1355 | "postcss-colormin": { 1356 | "version": "5.2.0", 1357 | "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-5.2.0.tgz", 1358 | "integrity": "sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==", 1359 | "dev": true, 1360 | "requires": { 1361 | "browserslist": "^4.16.6", 1362 | "caniuse-api": "^3.0.0", 1363 | "colord": "^2.0.1", 1364 | "postcss-value-parser": "^4.1.0" 1365 | } 1366 | }, 1367 | "postcss-convert-values": { 1368 | "version": "5.0.1", 1369 | "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-5.0.1.tgz", 1370 | "integrity": "sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==", 1371 | "dev": true, 1372 | "requires": { 1373 | "postcss-value-parser": "^4.1.0" 1374 | } 1375 | }, 1376 | "postcss-discard-comments": { 1377 | "version": "5.0.1", 1378 | "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-5.0.1.tgz", 1379 | "integrity": "sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==", 1380 | "dev": true 1381 | }, 1382 | "postcss-discard-duplicates": { 1383 | "version": "5.0.1", 1384 | "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-5.0.1.tgz", 1385 | "integrity": "sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==", 1386 | "dev": true 1387 | }, 1388 | "postcss-discard-empty": { 1389 | "version": "5.0.1", 1390 | "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-5.0.1.tgz", 1391 | "integrity": "sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==", 1392 | "dev": true 1393 | }, 1394 | "postcss-discard-overridden": { 1395 | "version": "5.0.1", 1396 | "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-5.0.1.tgz", 1397 | "integrity": "sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==", 1398 | "dev": true 1399 | }, 1400 | "postcss-merge-longhand": { 1401 | "version": "5.0.2", 1402 | "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-5.0.2.tgz", 1403 | "integrity": "sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==", 1404 | "dev": true, 1405 | "requires": { 1406 | "css-color-names": "^1.0.1", 1407 | "postcss-value-parser": "^4.1.0", 1408 | "stylehacks": "^5.0.1" 1409 | } 1410 | }, 1411 | "postcss-merge-rules": { 1412 | "version": "5.0.2", 1413 | "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-5.0.2.tgz", 1414 | "integrity": "sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==", 1415 | "dev": true, 1416 | "requires": { 1417 | "browserslist": "^4.16.6", 1418 | "caniuse-api": "^3.0.0", 1419 | "cssnano-utils": "^2.0.1", 1420 | "postcss-selector-parser": "^6.0.5", 1421 | "vendors": "^1.0.3" 1422 | } 1423 | }, 1424 | "postcss-minify-font-values": { 1425 | "version": "5.0.1", 1426 | "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-5.0.1.tgz", 1427 | "integrity": "sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==", 1428 | "dev": true, 1429 | "requires": { 1430 | "postcss-value-parser": "^4.1.0" 1431 | } 1432 | }, 1433 | "postcss-minify-gradients": { 1434 | "version": "5.0.1", 1435 | "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-5.0.1.tgz", 1436 | "integrity": "sha512-odOwBFAIn2wIv+XYRpoN2hUV3pPQlgbJ10XeXPq8UY2N+9ZG42xu45lTn/g9zZ+d70NKSQD6EOi6UiCMu3FN7g==", 1437 | "dev": true, 1438 | "requires": { 1439 | "cssnano-utils": "^2.0.1", 1440 | "is-color-stop": "^1.1.0", 1441 | "postcss-value-parser": "^4.1.0" 1442 | } 1443 | }, 1444 | "postcss-minify-params": { 1445 | "version": "5.0.1", 1446 | "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-5.0.1.tgz", 1447 | "integrity": "sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==", 1448 | "dev": true, 1449 | "requires": { 1450 | "alphanum-sort": "^1.0.2", 1451 | "browserslist": "^4.16.0", 1452 | "cssnano-utils": "^2.0.1", 1453 | "postcss-value-parser": "^4.1.0", 1454 | "uniqs": "^2.0.0" 1455 | } 1456 | }, 1457 | "postcss-minify-selectors": { 1458 | "version": "5.1.0", 1459 | "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-5.1.0.tgz", 1460 | "integrity": "sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==", 1461 | "dev": true, 1462 | "requires": { 1463 | "alphanum-sort": "^1.0.2", 1464 | "postcss-selector-parser": "^6.0.5" 1465 | } 1466 | }, 1467 | "postcss-modules": { 1468 | "version": "4.2.2", 1469 | "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.2.2.tgz", 1470 | "integrity": "sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==", 1471 | "dev": true, 1472 | "requires": { 1473 | "generic-names": "^2.0.1", 1474 | "icss-replace-symbols": "^1.1.0", 1475 | "lodash.camelcase": "^4.3.0", 1476 | "postcss-modules-extract-imports": "^3.0.0", 1477 | "postcss-modules-local-by-default": "^4.0.0", 1478 | "postcss-modules-scope": "^3.0.0", 1479 | "postcss-modules-values": "^4.0.0", 1480 | "string-hash": "^1.1.1" 1481 | } 1482 | }, 1483 | "postcss-modules-extract-imports": { 1484 | "version": "3.0.0", 1485 | "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", 1486 | "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", 1487 | "dev": true 1488 | }, 1489 | "postcss-modules-local-by-default": { 1490 | "version": "4.0.0", 1491 | "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", 1492 | "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", 1493 | "dev": true, 1494 | "requires": { 1495 | "icss-utils": "^5.0.0", 1496 | "postcss-selector-parser": "^6.0.2", 1497 | "postcss-value-parser": "^4.1.0" 1498 | } 1499 | }, 1500 | "postcss-modules-scope": { 1501 | "version": "3.0.0", 1502 | "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", 1503 | "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", 1504 | "dev": true, 1505 | "requires": { 1506 | "postcss-selector-parser": "^6.0.4" 1507 | } 1508 | }, 1509 | "postcss-modules-values": { 1510 | "version": "4.0.0", 1511 | "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", 1512 | "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", 1513 | "dev": true, 1514 | "requires": { 1515 | "icss-utils": "^5.0.0" 1516 | } 1517 | }, 1518 | "postcss-normalize-charset": { 1519 | "version": "5.0.1", 1520 | "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-5.0.1.tgz", 1521 | "integrity": "sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==", 1522 | "dev": true 1523 | }, 1524 | "postcss-normalize-display-values": { 1525 | "version": "5.0.1", 1526 | "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-5.0.1.tgz", 1527 | "integrity": "sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==", 1528 | "dev": true, 1529 | "requires": { 1530 | "cssnano-utils": "^2.0.1", 1531 | "postcss-value-parser": "^4.1.0" 1532 | } 1533 | }, 1534 | "postcss-normalize-positions": { 1535 | "version": "5.0.1", 1536 | "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-5.0.1.tgz", 1537 | "integrity": "sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==", 1538 | "dev": true, 1539 | "requires": { 1540 | "postcss-value-parser": "^4.1.0" 1541 | } 1542 | }, 1543 | "postcss-normalize-repeat-style": { 1544 | "version": "5.0.1", 1545 | "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.0.1.tgz", 1546 | "integrity": "sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==", 1547 | "dev": true, 1548 | "requires": { 1549 | "cssnano-utils": "^2.0.1", 1550 | "postcss-value-parser": "^4.1.0" 1551 | } 1552 | }, 1553 | "postcss-normalize-string": { 1554 | "version": "5.0.1", 1555 | "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-5.0.1.tgz", 1556 | "integrity": "sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==", 1557 | "dev": true, 1558 | "requires": { 1559 | "postcss-value-parser": "^4.1.0" 1560 | } 1561 | }, 1562 | "postcss-normalize-timing-functions": { 1563 | "version": "5.0.1", 1564 | "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.0.1.tgz", 1565 | "integrity": "sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==", 1566 | "dev": true, 1567 | "requires": { 1568 | "cssnano-utils": "^2.0.1", 1569 | "postcss-value-parser": "^4.1.0" 1570 | } 1571 | }, 1572 | "postcss-normalize-unicode": { 1573 | "version": "5.0.1", 1574 | "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-5.0.1.tgz", 1575 | "integrity": "sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==", 1576 | "dev": true, 1577 | "requires": { 1578 | "browserslist": "^4.16.0", 1579 | "postcss-value-parser": "^4.1.0" 1580 | } 1581 | }, 1582 | "postcss-normalize-url": { 1583 | "version": "5.0.2", 1584 | "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-5.0.2.tgz", 1585 | "integrity": "sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==", 1586 | "dev": true, 1587 | "requires": { 1588 | "is-absolute-url": "^3.0.3", 1589 | "normalize-url": "^6.0.1", 1590 | "postcss-value-parser": "^4.1.0" 1591 | } 1592 | }, 1593 | "postcss-normalize-whitespace": { 1594 | "version": "5.0.1", 1595 | "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.0.1.tgz", 1596 | "integrity": "sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==", 1597 | "dev": true, 1598 | "requires": { 1599 | "postcss-value-parser": "^4.1.0" 1600 | } 1601 | }, 1602 | "postcss-ordered-values": { 1603 | "version": "5.0.2", 1604 | "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-5.0.2.tgz", 1605 | "integrity": "sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==", 1606 | "dev": true, 1607 | "requires": { 1608 | "cssnano-utils": "^2.0.1", 1609 | "postcss-value-parser": "^4.1.0" 1610 | } 1611 | }, 1612 | "postcss-reduce-initial": { 1613 | "version": "5.0.1", 1614 | "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-5.0.1.tgz", 1615 | "integrity": "sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==", 1616 | "dev": true, 1617 | "requires": { 1618 | "browserslist": "^4.16.0", 1619 | "caniuse-api": "^3.0.0" 1620 | } 1621 | }, 1622 | "postcss-reduce-transforms": { 1623 | "version": "5.0.1", 1624 | "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-5.0.1.tgz", 1625 | "integrity": "sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==", 1626 | "dev": true, 1627 | "requires": { 1628 | "cssnano-utils": "^2.0.1", 1629 | "postcss-value-parser": "^4.1.0" 1630 | } 1631 | }, 1632 | "postcss-selector-parser": { 1633 | "version": "6.0.6", 1634 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", 1635 | "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", 1636 | "dev": true, 1637 | "requires": { 1638 | "cssesc": "^3.0.0", 1639 | "util-deprecate": "^1.0.2" 1640 | } 1641 | }, 1642 | "postcss-svgo": { 1643 | "version": "5.0.2", 1644 | "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-5.0.2.tgz", 1645 | "integrity": "sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==", 1646 | "dev": true, 1647 | "requires": { 1648 | "postcss-value-parser": "^4.1.0", 1649 | "svgo": "^2.3.0" 1650 | } 1651 | }, 1652 | "postcss-unique-selectors": { 1653 | "version": "5.0.1", 1654 | "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-5.0.1.tgz", 1655 | "integrity": "sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==", 1656 | "dev": true, 1657 | "requires": { 1658 | "alphanum-sort": "^1.0.2", 1659 | "postcss-selector-parser": "^6.0.5", 1660 | "uniqs": "^2.0.0" 1661 | } 1662 | }, 1663 | "postcss-value-parser": { 1664 | "version": "4.1.0", 1665 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", 1666 | "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", 1667 | "dev": true 1668 | }, 1669 | "preact": { 1670 | "version": "10.5.14", 1671 | "resolved": "https://registry.npmjs.org/preact/-/preact-10.5.14.tgz", 1672 | "integrity": "sha512-KojoltCrshZ099ksUZ2OQKfbH66uquFoxHSbnwKbTJHeQNvx42EmC7wQVWNuDt6vC5s3nudRHFtKbpY4ijKlaQ==" 1673 | }, 1674 | "queue-microtask": { 1675 | "version": "1.2.3", 1676 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1677 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1678 | "dev": true 1679 | }, 1680 | "readdirp": { 1681 | "version": "3.6.0", 1682 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1683 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1684 | "dev": true, 1685 | "requires": { 1686 | "picomatch": "^2.2.1" 1687 | } 1688 | }, 1689 | "require-directory": { 1690 | "version": "2.1.1", 1691 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1692 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", 1693 | "dev": true 1694 | }, 1695 | "require-main-filename": { 1696 | "version": "2.0.0", 1697 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", 1698 | "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", 1699 | "dev": true 1700 | }, 1701 | "reusify": { 1702 | "version": "1.0.4", 1703 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1704 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1705 | "dev": true 1706 | }, 1707 | "rev-hash": { 1708 | "version": "3.0.0", 1709 | "resolved": "https://registry.npmjs.org/rev-hash/-/rev-hash-3.0.0.tgz", 1710 | "integrity": "sha512-s+87HfEKAu95TaTxnbCobn0/BkbzR23LHSwVdYvr8mn5+PPjzy+hTWyh92b5oaLgig9TKPe5d6ZcubsVBtUrZg==", 1711 | "dev": true 1712 | }, 1713 | "rgb-hex": { 1714 | "version": "4.0.0", 1715 | "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-4.0.0.tgz", 1716 | "integrity": "sha512-Eg2ev5CiMBnQ9Gpflmqbwbso0CCdISqtVIow7OpYSLN1ULUv2jTB9YieS1DSSn/17AD7KkPWDPzSFzI4GSuu/Q==" 1717 | }, 1718 | "rgb-regex": { 1719 | "version": "1.0.1", 1720 | "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", 1721 | "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", 1722 | "dev": true 1723 | }, 1724 | "rgba-regex": { 1725 | "version": "1.0.0", 1726 | "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", 1727 | "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", 1728 | "dev": true 1729 | }, 1730 | "rimraf": { 1731 | "version": "3.0.2", 1732 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1733 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1734 | "dev": true, 1735 | "requires": { 1736 | "glob": "^7.1.3" 1737 | } 1738 | }, 1739 | "run-parallel": { 1740 | "version": "1.2.0", 1741 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1742 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1743 | "dev": true, 1744 | "requires": { 1745 | "queue-microtask": "^1.2.2" 1746 | } 1747 | }, 1748 | "sade": { 1749 | "version": "1.7.4", 1750 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 1751 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 1752 | "dev": true, 1753 | "requires": { 1754 | "mri": "^1.1.0" 1755 | } 1756 | }, 1757 | "set-blocking": { 1758 | "version": "2.0.0", 1759 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1760 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1761 | "dev": true 1762 | }, 1763 | "slash": { 1764 | "version": "3.0.0", 1765 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 1766 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 1767 | "dev": true 1768 | }, 1769 | "source-map": { 1770 | "version": "0.6.1", 1771 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1772 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1773 | "dev": true 1774 | }, 1775 | "source-map-js": { 1776 | "version": "0.6.2", 1777 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", 1778 | "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", 1779 | "dev": true 1780 | }, 1781 | "stable": { 1782 | "version": "0.1.8", 1783 | "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", 1784 | "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", 1785 | "dev": true 1786 | }, 1787 | "string-hash": { 1788 | "version": "1.1.3", 1789 | "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", 1790 | "integrity": "sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=", 1791 | "dev": true 1792 | }, 1793 | "string-width": { 1794 | "version": "4.2.2", 1795 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", 1796 | "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", 1797 | "dev": true, 1798 | "requires": { 1799 | "emoji-regex": "^8.0.0", 1800 | "is-fullwidth-code-point": "^3.0.0", 1801 | "strip-ansi": "^6.0.0" 1802 | }, 1803 | "dependencies": { 1804 | "ansi-regex": { 1805 | "version": "5.0.0", 1806 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 1807 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 1808 | "dev": true 1809 | }, 1810 | "strip-ansi": { 1811 | "version": "6.0.0", 1812 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 1813 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 1814 | "dev": true, 1815 | "requires": { 1816 | "ansi-regex": "^5.0.0" 1817 | } 1818 | } 1819 | } 1820 | }, 1821 | "strip-ansi": { 1822 | "version": "3.0.1", 1823 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1824 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1825 | "dev": true, 1826 | "requires": { 1827 | "ansi-regex": "^2.0.0" 1828 | } 1829 | }, 1830 | "stylehacks": { 1831 | "version": "5.0.1", 1832 | "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.0.1.tgz", 1833 | "integrity": "sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==", 1834 | "dev": true, 1835 | "requires": { 1836 | "browserslist": "^4.16.0", 1837 | "postcss-selector-parser": "^6.0.4" 1838 | } 1839 | }, 1840 | "supports-color": { 1841 | "version": "7.2.0", 1842 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1843 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1844 | "dev": true, 1845 | "requires": { 1846 | "has-flag": "^4.0.0" 1847 | } 1848 | }, 1849 | "svgo": { 1850 | "version": "2.3.1", 1851 | "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.3.1.tgz", 1852 | "integrity": "sha512-riDDIQgXpEnn0BEl9Gvhh1LNLIyiusSpt64IR8upJu7MwxnzetmF/Y57pXQD2NMX2lVyMRzXt5f2M5rO4wG7Dw==", 1853 | "dev": true, 1854 | "requires": { 1855 | "@trysound/sax": "0.1.1", 1856 | "chalk": "^4.1.0", 1857 | "commander": "^7.1.0", 1858 | "css-select": "^4.1.3", 1859 | "css-tree": "^1.1.2", 1860 | "csso": "^4.2.0", 1861 | "stable": "^0.1.8" 1862 | } 1863 | }, 1864 | "temp-dir": { 1865 | "version": "2.0.0", 1866 | "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", 1867 | "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", 1868 | "dev": true 1869 | }, 1870 | "temp-write": { 1871 | "version": "5.0.0", 1872 | "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-5.0.0.tgz", 1873 | "integrity": "sha512-cJhnzBW7DjNox7VcZDXeNlQSkIh3mX/h+M0n0Fh+zgT7YAHwI9c+OngKx4MCiQCVx9iXxV104xYlJgDBCCtawA==", 1874 | "dev": true, 1875 | "requires": { 1876 | "graceful-fs": "^4.2.6", 1877 | "is-stream": "^2.0.0", 1878 | "temp-dir": "^2.0.0", 1879 | "uuid": "^8.3.2" 1880 | } 1881 | }, 1882 | "tempy": { 1883 | "version": "1.0.1", 1884 | "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", 1885 | "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", 1886 | "dev": true, 1887 | "requires": { 1888 | "del": "^6.0.0", 1889 | "is-stream": "^2.0.0", 1890 | "temp-dir": "^2.0.0", 1891 | "type-fest": "^0.16.0", 1892 | "unique-string": "^2.0.0" 1893 | } 1894 | }, 1895 | "timsort": { 1896 | "version": "0.3.0", 1897 | "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", 1898 | "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", 1899 | "dev": true 1900 | }, 1901 | "to-regex-range": { 1902 | "version": "5.0.1", 1903 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1904 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1905 | "dev": true, 1906 | "requires": { 1907 | "is-number": "^7.0.0" 1908 | } 1909 | }, 1910 | "type-fest": { 1911 | "version": "0.16.0", 1912 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", 1913 | "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", 1914 | "dev": true 1915 | }, 1916 | "typed-css-modules": { 1917 | "version": "0.7.0", 1918 | "resolved": "https://registry.npmjs.org/typed-css-modules/-/typed-css-modules-0.7.0.tgz", 1919 | "integrity": "sha512-eNaAHKiao0ON0tkLE8ITma9Fx9MUDQjJwL+P9iCinGAIHSt2XKFVSx0A6GWLrbX/yNQjzzUmuJFikobSymZXng==", 1920 | "dev": true, 1921 | "requires": { 1922 | "@types/css-modules-loader-core": "^1.1.0", 1923 | "camelcase": "^5.3.1", 1924 | "chalk": "^2.1.0", 1925 | "chokidar": "^3.4.0", 1926 | "css-modules-loader-core": "^1.1.0", 1927 | "glob": "^7.1.2", 1928 | "is-there": "^4.4.2", 1929 | "mkdirp": "^1.0.0", 1930 | "yargs": "^15.4.1" 1931 | }, 1932 | "dependencies": { 1933 | "ansi-styles": { 1934 | "version": "3.2.1", 1935 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1936 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1937 | "dev": true, 1938 | "requires": { 1939 | "color-convert": "^1.9.0" 1940 | } 1941 | }, 1942 | "chalk": { 1943 | "version": "2.4.2", 1944 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1945 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1946 | "dev": true, 1947 | "requires": { 1948 | "ansi-styles": "^3.2.1", 1949 | "escape-string-regexp": "^1.0.5", 1950 | "supports-color": "^5.3.0" 1951 | } 1952 | }, 1953 | "color-convert": { 1954 | "version": "1.9.3", 1955 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1956 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1957 | "dev": true, 1958 | "requires": { 1959 | "color-name": "1.1.3" 1960 | } 1961 | }, 1962 | "color-name": { 1963 | "version": "1.1.3", 1964 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1965 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1966 | "dev": true 1967 | }, 1968 | "escape-string-regexp": { 1969 | "version": "1.0.5", 1970 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1971 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1972 | "dev": true 1973 | }, 1974 | "has-flag": { 1975 | "version": "3.0.0", 1976 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1977 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1978 | "dev": true 1979 | }, 1980 | "supports-color": { 1981 | "version": "5.5.0", 1982 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1983 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1984 | "dev": true, 1985 | "requires": { 1986 | "has-flag": "^3.0.0" 1987 | } 1988 | } 1989 | } 1990 | }, 1991 | "typescript": { 1992 | "version": "4.3.5", 1993 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", 1994 | "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", 1995 | "dev": true 1996 | }, 1997 | "uniqs": { 1998 | "version": "2.0.0", 1999 | "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", 2000 | "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", 2001 | "dev": true 2002 | }, 2003 | "unique-string": { 2004 | "version": "2.0.0", 2005 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", 2006 | "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", 2007 | "dev": true, 2008 | "requires": { 2009 | "crypto-random-string": "^2.0.0" 2010 | } 2011 | }, 2012 | "universalify": { 2013 | "version": "2.0.0", 2014 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 2015 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 2016 | "dev": true 2017 | }, 2018 | "util-deprecate": { 2019 | "version": "1.0.2", 2020 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2021 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2022 | "dev": true 2023 | }, 2024 | "uuid": { 2025 | "version": "8.3.2", 2026 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", 2027 | "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", 2028 | "dev": true 2029 | }, 2030 | "vendors": { 2031 | "version": "1.0.4", 2032 | "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", 2033 | "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", 2034 | "dev": true 2035 | }, 2036 | "which-module": { 2037 | "version": "2.0.0", 2038 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2039 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", 2040 | "dev": true 2041 | }, 2042 | "wrap-ansi": { 2043 | "version": "6.2.0", 2044 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", 2045 | "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", 2046 | "dev": true, 2047 | "requires": { 2048 | "ansi-styles": "^4.0.0", 2049 | "string-width": "^4.1.0", 2050 | "strip-ansi": "^6.0.0" 2051 | }, 2052 | "dependencies": { 2053 | "ansi-regex": { 2054 | "version": "5.0.0", 2055 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 2056 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 2057 | "dev": true 2058 | }, 2059 | "strip-ansi": { 2060 | "version": "6.0.0", 2061 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 2062 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 2063 | "dev": true, 2064 | "requires": { 2065 | "ansi-regex": "^5.0.0" 2066 | } 2067 | } 2068 | } 2069 | }, 2070 | "wrappy": { 2071 | "version": "1.0.2", 2072 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2073 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 2074 | "dev": true 2075 | }, 2076 | "y18n": { 2077 | "version": "4.0.3", 2078 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", 2079 | "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", 2080 | "dev": true 2081 | }, 2082 | "yaml": { 2083 | "version": "1.10.2", 2084 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", 2085 | "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", 2086 | "dev": true 2087 | }, 2088 | "yargs": { 2089 | "version": "15.4.1", 2090 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", 2091 | "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", 2092 | "dev": true, 2093 | "requires": { 2094 | "cliui": "^6.0.0", 2095 | "decamelize": "^1.2.0", 2096 | "find-up": "^4.1.0", 2097 | "get-caller-file": "^2.0.1", 2098 | "require-directory": "^2.1.1", 2099 | "require-main-filename": "^2.0.0", 2100 | "set-blocking": "^2.0.0", 2101 | "string-width": "^4.2.0", 2102 | "which-module": "^2.0.0", 2103 | "y18n": "^4.0.0", 2104 | "yargs-parser": "^18.1.2" 2105 | }, 2106 | "dependencies": { 2107 | "find-up": { 2108 | "version": "4.1.0", 2109 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 2110 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 2111 | "dev": true, 2112 | "requires": { 2113 | "locate-path": "^5.0.0", 2114 | "path-exists": "^4.0.0" 2115 | } 2116 | }, 2117 | "locate-path": { 2118 | "version": "5.0.0", 2119 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 2120 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 2121 | "dev": true, 2122 | "requires": { 2123 | "p-locate": "^4.1.0" 2124 | } 2125 | }, 2126 | "p-limit": { 2127 | "version": "2.3.0", 2128 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 2129 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 2130 | "dev": true, 2131 | "requires": { 2132 | "p-try": "^2.0.0" 2133 | } 2134 | }, 2135 | "p-locate": { 2136 | "version": "4.1.0", 2137 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 2138 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 2139 | "dev": true, 2140 | "requires": { 2141 | "p-limit": "^2.2.0" 2142 | } 2143 | } 2144 | } 2145 | }, 2146 | "yargs-parser": { 2147 | "version": "18.1.3", 2148 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", 2149 | "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", 2150 | "dev": true, 2151 | "requires": { 2152 | "camelcase": "^5.0.0", 2153 | "decamelize": "^1.2.0" 2154 | } 2155 | }, 2156 | "yocto-queue": { 2157 | "version": "0.1.0", 2158 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2159 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2160 | "dev": true 2161 | } 2162 | } 2163 | } 2164 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "@create-figma-plugin/ui": "^1.2.2", 4 | "@create-figma-plugin/utilities": "^1.2.2", 5 | "preact": "^10.5.14" 6 | }, 7 | "devDependencies": { 8 | "@create-figma-plugin/build": "^1.2.2", 9 | "@create-figma-plugin/tsconfig": "^1.2.2", 10 | "@figma/plugin-typings": "^1", 11 | "typescript": "^4" 12 | }, 13 | "scripts": { 14 | "build": "build-figma-plugin --typecheck --minify", 15 | "watch": "build-figma-plugin --typecheck --watch" 16 | }, 17 | "figma-plugin": { 18 | "id": "figma-plugin-example-prototype-write", 19 | "name": "Plugin Example Prototype Write", 20 | "main": "src/main.ts", 21 | "ui": "src/ui.tsx" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /proto-write-landscape.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adispezio/figma-plugin-example-prototype-write/6c56097b95ac7081cd934541e17f9bd746332fb2/proto-write-landscape.gif -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | // Create Figma Plugin utilities 2 | import { showUI, once, emit, getSelectedNodesOrAllNodes, formatWarningMessage } from '@create-figma-plugin/utilities' 3 | 4 | export default function () { 5 | // Nodes that will get new reactions 6 | let origins: any; 7 | 8 | // Destination nodes for each new reaction 9 | let destinations: SceneNode[]; 10 | 11 | // Grab the required data from each node in the current selection 12 | // Used for both selecting the origins and the destinations 13 | // TODO: Add a validation function here for better error handling UX 14 | function handleSelectionUpdate() { 15 | let selectionData = []; 16 | for (let node of figma.currentPage.selection) { 17 | let selectionNode = { 18 | 'id': node.id, 19 | 'name': node.name, 20 | 'type': node.type 21 | }; 22 | selectionData.push(selectionNode) 23 | } 24 | 25 | // Send the selection data to the UI 26 | emit('UPDATE_SELECTION', selectionData); 27 | } 28 | 29 | 30 | // Once the user confirms the origins ("layers") 31 | // TODO: Possibly move the "state" data into main 32 | function handleConfirmOrigins() { 33 | 34 | // Store the origins 35 | origins = getSelectedNodesOrAllNodes(); 36 | 37 | // Clear the selection 38 | figma.currentPage.selection = []; 39 | } 40 | 41 | // Once destinations are confirmed, 42 | function handleConfirmDestinations() { 43 | 44 | // Store the destinations 45 | destinations = getSelectedNodesOrAllNodes(); 46 | const reactions: {}[] = []; 47 | 48 | // Loop over the destinations to build the reactions array 49 | for (let destination of destinations) { 50 | 51 | // For click actions, destinations must be frames 52 | // TODO: Support OVERLAY, BACK, and NAVIGATE_TO 53 | if (destination.type === 'FRAME') { 54 | 55 | // Build the basic click action and set the correct des 56 | let newReaction = { 57 | "action": { 58 | "type": "NODE", 59 | "destinationId": destination.id, 60 | "navigation": "NAVIGATE", 61 | "transition": null, 62 | "preserveScrollPosition": false 63 | }, 64 | "trigger": { 65 | "type": "ON_CLICK" 66 | } 67 | } 68 | reactions.push(newReaction) 69 | 70 | } else { 71 | // A VERY basic catch all for invalid reactions 72 | // TODO: Make better :D 73 | figma.notify(formatWarningMessage("One or more destinations were not a frame!")) 74 | } 75 | } 76 | 77 | // Loop over each origin node and add the reaction 78 | for (let node of origins) { 79 | 80 | // Validate that the origin can have reactions 81 | // TODO: Move this to handleSelectionUpdate() 82 | // TODO: Test for NOT Document or Page, and for a frame ancestor 83 | if (node.type === 84 | "BOOLEAN_OPERATION" || 85 | "COMPONENT" || 86 | "COMPONENT_SET" || 87 | "ELLIPSE" || 88 | "FRAME" || 89 | "GROUP" || 90 | "INSTANCE" || 91 | "LINE" || 92 | "POLYGON" || 93 | "RECTANGLE" || 94 | "SLICE" || 95 | "STAR" || 96 | "TEXT" || 97 | "VECTOR" 98 | ) { 99 | node.reactions = reactions; 100 | } else { 101 | // A VERY basic catch all for invalid origins 102 | // TODO: Make better :D 103 | figma.notify(formatWarningMessage("One or more interactions was not a valid layer!")) 104 | } 105 | } 106 | 107 | // Clear the selection 108 | figma.currentPage.selection = []; 109 | 110 | // We're done here! 111 | figma.closePlugin() 112 | } 113 | 114 | // When the selection changes, pass it to the UI 115 | figma.on("selectionchange", handleSelectionUpdate); 116 | 117 | // Listen for the next steps in the UI 118 | once('CONFIRM_ORIGINS', handleConfirmOrigins) 119 | once('CONFIRM_DESTINATIONS', handleConfirmDestinations) 120 | 121 | // Show the UI 122 | const options = { width: 240, height: 200 } 123 | const data = { text: null } 124 | showUI(options, data) 125 | 126 | // Do an initial check of the current selection when the plugin loads 127 | handleSelectionUpdate(); 128 | } -------------------------------------------------------------------------------- /src/styles.css: -------------------------------------------------------------------------------- 1 | .makeSelection { 2 | background-color: var(--color-selection-b); 3 | height: 96px; 4 | display: flex; 5 | align-items: center; 6 | justify-content: center; 7 | } 8 | 9 | .layerlist { 10 | height: 96px; 11 | overflow-y: scroll; 12 | margin: 0; 13 | padding: 0; 14 | list-style-type: none; 15 | position: relative; 16 | } 17 | 18 | .layerlist::after { 19 | content: ""; 20 | display: block; 21 | height: 20px; 22 | position: absolute; 23 | left: 0; 24 | right: 0; 25 | bottom: 0; 26 | background: linear-gradient(rgba(0,0,0,0),rgba(255,255,255)) 27 | } 28 | 29 | .layerlistitem { 30 | display: flex; 31 | align-items: center; 32 | height: 20px; 33 | padding: 0 var(--space-small); 34 | } -------------------------------------------------------------------------------- /src/ui.tsx: -------------------------------------------------------------------------------- 1 | // Create Figma Plugin utilities 2 | import { emit, once } from '@create-figma-plugin/utilities'; 3 | 4 | // Preact 5 | import { h, Fragment } from 'preact' 6 | import { useState } from 'preact/hooks' 7 | // Create Figma Plugin preact components 8 | import { render, Container, Text, Button, VerticalSpace } from '@create-figma-plugin/ui' 9 | 10 | // Custom css (for stuff not in the preact components) 11 | import styles from './styles.css' 12 | 13 | // Define the state object shape 14 | interface uiState { 15 | wizardStep: string, 16 | selection: { 17 | name: string 18 | }[], 19 | origins: { 20 | name: string 21 | }[], 22 | validOrigins: boolean, 23 | } 24 | 25 | // Main plugin code 26 | function Plugin() { 27 | 28 | // Setup the state 29 | const [state, setState] = useState({ 30 | wizardStep: 'SELECT_ORIGINS', 31 | selection: [], 32 | origins: [], 33 | validOrigins: false, 34 | }); 35 | 36 | // Update the selection state 37 | // Used for both selecting origins and destinations 38 | const handleUpdateSelection = function (data: any) { 39 | setState(prevState => { 40 | return { 41 | ...prevState, 42 | selection: data 43 | } 44 | }); 45 | 46 | validateSelection(data); 47 | } 48 | 49 | // Validate the selection 50 | // Right now this is only checking that there IS a selection 51 | // TODO: This could live in main.ts - see TODOs there 52 | const validateSelection = function (data: any) { 53 | if (data.length > 0) { 54 | setState(prevState => { 55 | return { 56 | ...prevState, 57 | validOrigins: true 58 | } 59 | }); 60 | } else { 61 | setState(prevState => { 62 | return { 63 | ...prevState, 64 | validOrigins: false 65 | } 66 | }); 67 | } 68 | } 69 | 70 | // Store the origins and set the plugin state to show next UI 71 | const handleConfirmOrigins = function () { 72 | setState(prevState => { 73 | return { 74 | ...prevState, 75 | origins: prevState.selection, 76 | wizardStep: 'SELECT_DESTINATIONS' 77 | } 78 | }); 79 | 80 | emit('CONFIRM_ORIGINS') 81 | } 82 | 83 | // Notify main.ts so the current selection is used as destinations 84 | const handleConfirmDestinations = function () { 85 | emit('CONFIRM_DESTINATIONS') 86 | } 87 | 88 | 89 | const RenderUI = () => { 90 | 91 | // Show each of the UI steps based on the current plugin state 92 | if (state.wizardStep === 'SELECT_ORIGINS') { 93 | return ( 94 | 95 | Step 1: Select layers ({state.selection.length}) 96 | 97 | {state.selection.length > 0 ? 98 |
    99 | {state.selection.map(node => ( 100 |
  • 101 | {node.name} 102 |
  • 103 | ))} 104 |
: 105 |
Select layers to add interactions
106 | } 107 | 108 | 109 |
110 | ) 111 | } else if (state.wizardStep === 'SELECT_DESTINATIONS') { 112 | return ( 113 | 114 | Step 2: Select destination frames ({state.selection.length}) 115 | 116 | {state.selection.length > 0 ? 117 |
    118 | {state.selection.map(node => ( 119 | // 120 |
  • 121 | {node.name} 122 |
  • 123 | ))} 124 |
: 125 |
Select frame(s)
126 | } 127 | 128 | 129 |
130 | ) 131 | } else { 132 | return null 133 | } 134 | } 135 | 136 | // Listen for selection updates from main.ts 137 | once('UPDATE_SELECTION', handleUpdateSelection) 138 | 139 | return ( 140 | 141 | 142 | 143 | 144 | 145 | ) 146 | } 147 | 148 | export default render(Plugin) -------------------------------------------------------------------------------- /src/utilities.ts: -------------------------------------------------------------------------------- 1 | // Utilities to help with creating and formatting reactions 2 | export function formatAction(str: string) { 3 | if (str == null) { 4 | return 'None' 5 | } 6 | switch (str) { 7 | case 'NONE': 8 | return 'None' 9 | case 'NAVIGATE_TO': 10 | return 'Navigate to' 11 | case 'OPEN_OVERLAY': 12 | return 'Open overlay' 13 | case 'SCROLL_TO': 14 | return 'Scroll to' 15 | case 'SWAP_WITH': 16 | return 'Swap overlay' 17 | case 'SWAP_STATE_TO': 18 | return 'Change to' 19 | case 'GO_BACK': 20 | return 'Back' 21 | case 'CLOSE_OVERLAY': 22 | return 'Close overlay' 23 | case 'OPEN_URL': 24 | return 'Open link' 25 | default: 26 | return '' 27 | } 28 | } 29 | 30 | export function formatTriggerType(str: string) { 31 | if (str == null) { 32 | return 'None' 33 | } 34 | switch (str) { 35 | case 'NONE': 36 | return 'None' 37 | case 'ON_CLICK': 38 | return 'On click' 39 | case 'ON_HOVER': 40 | return 'While hovering' 41 | case 'ON_PRESS': 42 | return 'While pressing' 43 | case 'DRAG': 44 | return 'On drag' 45 | case 'MOUSE_IN': 46 | return 'Mouse enter' 47 | case 'MOUSE_OUT': 48 | return 'Mouse leave' 49 | case 'MOUSE_DOWN': 50 | return 'Mouse down' 51 | case 'MOUSE_UP': 52 | return 'Mouse up' 53 | case 'AFTER_TIMEOUT': 54 | return 'After delay' 55 | case 'ON_KEY_DOWN': 56 | return 'Key/gamepad' 57 | default: 58 | return str 59 | } 60 | } 61 | 62 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@create-figma-plugin/tsconfig", 3 | "compilerOptions": { 4 | "typeRoots": ["node_modules/@figma", "node_modules/@types"] 5 | }, 6 | "include": ["src/**/*.ts", "src/**/*.tsx"] 7 | } 8 | --------------------------------------------------------------------------------