├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── favicon.png ├── global.css └── index.html ├── rollup.config.js ├── scripts └── setupTypeScript.js └── src ├── App.svelte ├── Table.svelte ├── main.js └── utils.js /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Demo

2 | [REPL](https://svelte.dev/repl/7d3cfaadb28c4f1e9324762c614ff440?version=3.55.1) 3 | 4 |

Svelte Standalone Table/Spreadsheet front end

5 | 6 |

This is a spreadsheet front end written using [Svelte](https://svelte.dev). You need to implement any calculations yourself. You also need to supply a 2D array of cell values & formats along with a config for rows & columns info. The REPL has an example of all that.

7 | 8 |

Try dbl clicking (or hit Enter/F2) on a cell to edit. Or select some with mouse or keyboard.

9 |

The buttons show how easy it is to format a cell or display something other than the raw cell value eg a currency.

10 | 11 |

Features

12 | 50 |

Usage

51 |

Needs only 3 params - config, data (2D array) and a uid.

52 |

Two optional params - title (useful when displaying multiple Tables) and allowedActions (see above) - default is all allowed

53 |

defaultGridConfig is the default config. It contains row & column initial configs sizings. It's self explanatory - see utils.js

54 |

data[ ][ ] is a 2D array of cell object. Each cell object looks like 55 |

56 |  let cell = {
57 |     value:'', // raw string. Often what is entered by the user.
58 |     display:'', // what is displayed often isn't the same as the value. E.G. formulas, 12=>$12.00, -12=>($12.00). It is the parents responsibility to populate this
59 |     result:'', // the result of a formula or just the value as a string/number
60 |     format:JSON.parse(JSON.stringify(defaultCellFormat)),
61 |  };	
62 | 	
63 | Each cell has its' own format. The format object looks like - 64 |
65 |  const defaultCellFormat = {
66 |   "italics":  0,
67 |   "bold":     0,
68 |   "underline":0,
69 |   "fontsize": 13,
70 |   "align":    "left",
71 |   "colour":   "#888",
72 |   "background": "#fff",
73 |   "border":   [false,false,false,false],  //	TLBR
74 |   "readonly": false,
75 | }
76 | 
77 | Again, it's self explanatory, and straightforward to extend. 78 | 79 |

Notes

80 |

In production uncomment the .focus() in onMount() of Table.svelte. It's highly irritating to keep having the focus ripped away when testing in the REPL.

81 | 82 |

Licence

83 | MIT -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "svelte-app", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "sirv-cli": "^2.0.0" 12 | }, 13 | "devDependencies": { 14 | "@rollup/plugin-commonjs": "^17.0.0", 15 | "@rollup/plugin-node-resolve": "^11.0.0", 16 | "rollup": "^2.3.4", 17 | "rollup-plugin-css-only": "^3.1.0", 18 | "rollup-plugin-livereload": "^2.0.0", 19 | "rollup-plugin-svelte": "^7.0.0", 20 | "rollup-plugin-terser": "^7.0.0", 21 | "svelte": "^3.0.0" 22 | } 23 | }, 24 | "node_modules/@babel/code-frame": { 25 | "version": "7.18.6", 26 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 27 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 28 | "dev": true, 29 | "dependencies": { 30 | "@babel/highlight": "^7.18.6" 31 | }, 32 | "engines": { 33 | "node": ">=6.9.0" 34 | } 35 | }, 36 | "node_modules/@babel/helper-validator-identifier": { 37 | "version": "7.19.1", 38 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 39 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 40 | "dev": true, 41 | "engines": { 42 | "node": ">=6.9.0" 43 | } 44 | }, 45 | "node_modules/@babel/highlight": { 46 | "version": "7.18.6", 47 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 48 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 49 | "dev": true, 50 | "dependencies": { 51 | "@babel/helper-validator-identifier": "^7.18.6", 52 | "chalk": "^2.0.0", 53 | "js-tokens": "^4.0.0" 54 | }, 55 | "engines": { 56 | "node": ">=6.9.0" 57 | } 58 | }, 59 | "node_modules/@jridgewell/gen-mapping": { 60 | "version": "0.3.2", 61 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 62 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 63 | "dev": true, 64 | "dependencies": { 65 | "@jridgewell/set-array": "^1.0.1", 66 | "@jridgewell/sourcemap-codec": "^1.4.10", 67 | "@jridgewell/trace-mapping": "^0.3.9" 68 | }, 69 | "engines": { 70 | "node": ">=6.0.0" 71 | } 72 | }, 73 | "node_modules/@jridgewell/resolve-uri": { 74 | "version": "3.1.0", 75 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 76 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 77 | "dev": true, 78 | "engines": { 79 | "node": ">=6.0.0" 80 | } 81 | }, 82 | "node_modules/@jridgewell/set-array": { 83 | "version": "1.1.2", 84 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 85 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 86 | "dev": true, 87 | "engines": { 88 | "node": ">=6.0.0" 89 | } 90 | }, 91 | "node_modules/@jridgewell/source-map": { 92 | "version": "0.3.2", 93 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 94 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 95 | "dev": true, 96 | "dependencies": { 97 | "@jridgewell/gen-mapping": "^0.3.0", 98 | "@jridgewell/trace-mapping": "^0.3.9" 99 | } 100 | }, 101 | "node_modules/@jridgewell/sourcemap-codec": { 102 | "version": "1.4.14", 103 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 104 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 105 | "dev": true 106 | }, 107 | "node_modules/@jridgewell/trace-mapping": { 108 | "version": "0.3.17", 109 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 110 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 111 | "dev": true, 112 | "dependencies": { 113 | "@jridgewell/resolve-uri": "3.1.0", 114 | "@jridgewell/sourcemap-codec": "1.4.14" 115 | } 116 | }, 117 | "node_modules/@polka/url": { 118 | "version": "1.0.0-next.21", 119 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", 120 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" 121 | }, 122 | "node_modules/@rollup/plugin-commonjs": { 123 | "version": "17.1.0", 124 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", 125 | "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", 126 | "dev": true, 127 | "dependencies": { 128 | "@rollup/pluginutils": "^3.1.0", 129 | "commondir": "^1.0.1", 130 | "estree-walker": "^2.0.1", 131 | "glob": "^7.1.6", 132 | "is-reference": "^1.2.1", 133 | "magic-string": "^0.25.7", 134 | "resolve": "^1.17.0" 135 | }, 136 | "engines": { 137 | "node": ">= 8.0.0" 138 | }, 139 | "peerDependencies": { 140 | "rollup": "^2.30.0" 141 | } 142 | }, 143 | "node_modules/@rollup/plugin-node-resolve": { 144 | "version": "11.2.1", 145 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", 146 | "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", 147 | "dev": true, 148 | "dependencies": { 149 | "@rollup/pluginutils": "^3.1.0", 150 | "@types/resolve": "1.17.1", 151 | "builtin-modules": "^3.1.0", 152 | "deepmerge": "^4.2.2", 153 | "is-module": "^1.0.0", 154 | "resolve": "^1.19.0" 155 | }, 156 | "engines": { 157 | "node": ">= 10.0.0" 158 | }, 159 | "peerDependencies": { 160 | "rollup": "^1.20.0||^2.0.0" 161 | } 162 | }, 163 | "node_modules/@rollup/pluginutils": { 164 | "version": "3.1.0", 165 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 166 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 167 | "dev": true, 168 | "dependencies": { 169 | "@types/estree": "0.0.39", 170 | "estree-walker": "^1.0.1", 171 | "picomatch": "^2.2.2" 172 | }, 173 | "engines": { 174 | "node": ">= 8.0.0" 175 | }, 176 | "peerDependencies": { 177 | "rollup": "^1.20.0||^2.0.0" 178 | } 179 | }, 180 | "node_modules/@rollup/pluginutils/node_modules/estree-walker": { 181 | "version": "1.0.1", 182 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 183 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 184 | "dev": true 185 | }, 186 | "node_modules/@types/estree": { 187 | "version": "0.0.39", 188 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 189 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 190 | "dev": true 191 | }, 192 | "node_modules/@types/node": { 193 | "version": "18.11.18", 194 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 195 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", 196 | "dev": true 197 | }, 198 | "node_modules/@types/resolve": { 199 | "version": "1.17.1", 200 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 201 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 202 | "dev": true, 203 | "dependencies": { 204 | "@types/node": "*" 205 | } 206 | }, 207 | "node_modules/acorn": { 208 | "version": "8.8.1", 209 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", 210 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", 211 | "dev": true, 212 | "bin": { 213 | "acorn": "bin/acorn" 214 | }, 215 | "engines": { 216 | "node": ">=0.4.0" 217 | } 218 | }, 219 | "node_modules/ansi-styles": { 220 | "version": "3.2.1", 221 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 222 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 223 | "dev": true, 224 | "dependencies": { 225 | "color-convert": "^1.9.0" 226 | }, 227 | "engines": { 228 | "node": ">=4" 229 | } 230 | }, 231 | "node_modules/anymatch": { 232 | "version": "3.1.3", 233 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 234 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 235 | "dev": true, 236 | "dependencies": { 237 | "normalize-path": "^3.0.0", 238 | "picomatch": "^2.0.4" 239 | }, 240 | "engines": { 241 | "node": ">= 8" 242 | } 243 | }, 244 | "node_modules/balanced-match": { 245 | "version": "1.0.2", 246 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 247 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 248 | "dev": true 249 | }, 250 | "node_modules/binary-extensions": { 251 | "version": "2.2.0", 252 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 253 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 254 | "dev": true, 255 | "engines": { 256 | "node": ">=8" 257 | } 258 | }, 259 | "node_modules/brace-expansion": { 260 | "version": "1.1.11", 261 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 262 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 263 | "dev": true, 264 | "dependencies": { 265 | "balanced-match": "^1.0.0", 266 | "concat-map": "0.0.1" 267 | } 268 | }, 269 | "node_modules/braces": { 270 | "version": "3.0.2", 271 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 272 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 273 | "dev": true, 274 | "dependencies": { 275 | "fill-range": "^7.0.1" 276 | }, 277 | "engines": { 278 | "node": ">=8" 279 | } 280 | }, 281 | "node_modules/buffer-from": { 282 | "version": "1.1.2", 283 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 284 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 285 | "dev": true 286 | }, 287 | "node_modules/builtin-modules": { 288 | "version": "3.3.0", 289 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 290 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 291 | "dev": true, 292 | "engines": { 293 | "node": ">=6" 294 | }, 295 | "funding": { 296 | "url": "https://github.com/sponsors/sindresorhus" 297 | } 298 | }, 299 | "node_modules/chalk": { 300 | "version": "2.4.2", 301 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 302 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 303 | "dev": true, 304 | "dependencies": { 305 | "ansi-styles": "^3.2.1", 306 | "escape-string-regexp": "^1.0.5", 307 | "supports-color": "^5.3.0" 308 | }, 309 | "engines": { 310 | "node": ">=4" 311 | } 312 | }, 313 | "node_modules/chokidar": { 314 | "version": "3.5.3", 315 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 316 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 317 | "dev": true, 318 | "funding": [ 319 | { 320 | "type": "individual", 321 | "url": "https://paulmillr.com/funding/" 322 | } 323 | ], 324 | "dependencies": { 325 | "anymatch": "~3.1.2", 326 | "braces": "~3.0.2", 327 | "glob-parent": "~5.1.2", 328 | "is-binary-path": "~2.1.0", 329 | "is-glob": "~4.0.1", 330 | "normalize-path": "~3.0.0", 331 | "readdirp": "~3.6.0" 332 | }, 333 | "engines": { 334 | "node": ">= 8.10.0" 335 | }, 336 | "optionalDependencies": { 337 | "fsevents": "~2.3.2" 338 | } 339 | }, 340 | "node_modules/color-convert": { 341 | "version": "1.9.3", 342 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 343 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 344 | "dev": true, 345 | "dependencies": { 346 | "color-name": "1.1.3" 347 | } 348 | }, 349 | "node_modules/color-name": { 350 | "version": "1.1.3", 351 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 352 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 353 | "dev": true 354 | }, 355 | "node_modules/commander": { 356 | "version": "2.20.3", 357 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 358 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 359 | "dev": true 360 | }, 361 | "node_modules/commondir": { 362 | "version": "1.0.1", 363 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 364 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 365 | "dev": true 366 | }, 367 | "node_modules/concat-map": { 368 | "version": "0.0.1", 369 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 370 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 371 | "dev": true 372 | }, 373 | "node_modules/console-clear": { 374 | "version": "1.1.1", 375 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 376 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==", 377 | "engines": { 378 | "node": ">=4" 379 | } 380 | }, 381 | "node_modules/deepmerge": { 382 | "version": "4.2.2", 383 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 384 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 385 | "dev": true, 386 | "engines": { 387 | "node": ">=0.10.0" 388 | } 389 | }, 390 | "node_modules/escape-string-regexp": { 391 | "version": "1.0.5", 392 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 393 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 394 | "dev": true, 395 | "engines": { 396 | "node": ">=0.8.0" 397 | } 398 | }, 399 | "node_modules/estree-walker": { 400 | "version": "2.0.2", 401 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 402 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 403 | "dev": true 404 | }, 405 | "node_modules/fill-range": { 406 | "version": "7.0.1", 407 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 408 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 409 | "dev": true, 410 | "dependencies": { 411 | "to-regex-range": "^5.0.1" 412 | }, 413 | "engines": { 414 | "node": ">=8" 415 | } 416 | }, 417 | "node_modules/fs.realpath": { 418 | "version": "1.0.0", 419 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 420 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 421 | "dev": true 422 | }, 423 | "node_modules/fsevents": { 424 | "version": "2.3.2", 425 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 426 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 427 | "dev": true, 428 | "hasInstallScript": true, 429 | "optional": true, 430 | "os": [ 431 | "darwin" 432 | ], 433 | "engines": { 434 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 435 | } 436 | }, 437 | "node_modules/function-bind": { 438 | "version": "1.1.1", 439 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 440 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 441 | "dev": true 442 | }, 443 | "node_modules/get-port": { 444 | "version": "3.2.0", 445 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 446 | "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", 447 | "engines": { 448 | "node": ">=4" 449 | } 450 | }, 451 | "node_modules/glob": { 452 | "version": "7.2.3", 453 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 454 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 455 | "dev": true, 456 | "dependencies": { 457 | "fs.realpath": "^1.0.0", 458 | "inflight": "^1.0.4", 459 | "inherits": "2", 460 | "minimatch": "^3.1.1", 461 | "once": "^1.3.0", 462 | "path-is-absolute": "^1.0.0" 463 | }, 464 | "engines": { 465 | "node": "*" 466 | }, 467 | "funding": { 468 | "url": "https://github.com/sponsors/isaacs" 469 | } 470 | }, 471 | "node_modules/glob-parent": { 472 | "version": "5.1.2", 473 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 474 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 475 | "dev": true, 476 | "dependencies": { 477 | "is-glob": "^4.0.1" 478 | }, 479 | "engines": { 480 | "node": ">= 6" 481 | } 482 | }, 483 | "node_modules/has": { 484 | "version": "1.0.3", 485 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 486 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 487 | "dev": true, 488 | "dependencies": { 489 | "function-bind": "^1.1.1" 490 | }, 491 | "engines": { 492 | "node": ">= 0.4.0" 493 | } 494 | }, 495 | "node_modules/has-flag": { 496 | "version": "3.0.0", 497 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 498 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 499 | "dev": true, 500 | "engines": { 501 | "node": ">=4" 502 | } 503 | }, 504 | "node_modules/inflight": { 505 | "version": "1.0.6", 506 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 507 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 508 | "dev": true, 509 | "dependencies": { 510 | "once": "^1.3.0", 511 | "wrappy": "1" 512 | } 513 | }, 514 | "node_modules/inherits": { 515 | "version": "2.0.4", 516 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 517 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 518 | "dev": true 519 | }, 520 | "node_modules/is-binary-path": { 521 | "version": "2.1.0", 522 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 523 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 524 | "dev": true, 525 | "dependencies": { 526 | "binary-extensions": "^2.0.0" 527 | }, 528 | "engines": { 529 | "node": ">=8" 530 | } 531 | }, 532 | "node_modules/is-core-module": { 533 | "version": "2.11.0", 534 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 535 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 536 | "dev": true, 537 | "dependencies": { 538 | "has": "^1.0.3" 539 | }, 540 | "funding": { 541 | "url": "https://github.com/sponsors/ljharb" 542 | } 543 | }, 544 | "node_modules/is-extglob": { 545 | "version": "2.1.1", 546 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 547 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 548 | "dev": true, 549 | "engines": { 550 | "node": ">=0.10.0" 551 | } 552 | }, 553 | "node_modules/is-glob": { 554 | "version": "4.0.3", 555 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 556 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 557 | "dev": true, 558 | "dependencies": { 559 | "is-extglob": "^2.1.1" 560 | }, 561 | "engines": { 562 | "node": ">=0.10.0" 563 | } 564 | }, 565 | "node_modules/is-module": { 566 | "version": "1.0.0", 567 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 568 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 569 | "dev": true 570 | }, 571 | "node_modules/is-number": { 572 | "version": "7.0.0", 573 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 574 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 575 | "dev": true, 576 | "engines": { 577 | "node": ">=0.12.0" 578 | } 579 | }, 580 | "node_modules/is-reference": { 581 | "version": "1.2.1", 582 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 583 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 584 | "dev": true, 585 | "dependencies": { 586 | "@types/estree": "*" 587 | } 588 | }, 589 | "node_modules/jest-worker": { 590 | "version": "26.6.2", 591 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 592 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 593 | "dev": true, 594 | "dependencies": { 595 | "@types/node": "*", 596 | "merge-stream": "^2.0.0", 597 | "supports-color": "^7.0.0" 598 | }, 599 | "engines": { 600 | "node": ">= 10.13.0" 601 | } 602 | }, 603 | "node_modules/jest-worker/node_modules/has-flag": { 604 | "version": "4.0.0", 605 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 606 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 607 | "dev": true, 608 | "engines": { 609 | "node": ">=8" 610 | } 611 | }, 612 | "node_modules/jest-worker/node_modules/supports-color": { 613 | "version": "7.2.0", 614 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 615 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 616 | "dev": true, 617 | "dependencies": { 618 | "has-flag": "^4.0.0" 619 | }, 620 | "engines": { 621 | "node": ">=8" 622 | } 623 | }, 624 | "node_modules/js-tokens": { 625 | "version": "4.0.0", 626 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 627 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 628 | "dev": true 629 | }, 630 | "node_modules/kleur": { 631 | "version": "4.1.5", 632 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 633 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", 634 | "engines": { 635 | "node": ">=6" 636 | } 637 | }, 638 | "node_modules/livereload": { 639 | "version": "0.9.3", 640 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", 641 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", 642 | "dev": true, 643 | "dependencies": { 644 | "chokidar": "^3.5.0", 645 | "livereload-js": "^3.3.1", 646 | "opts": ">= 1.2.0", 647 | "ws": "^7.4.3" 648 | }, 649 | "bin": { 650 | "livereload": "bin/livereload.js" 651 | }, 652 | "engines": { 653 | "node": ">=8.0.0" 654 | } 655 | }, 656 | "node_modules/livereload-js": { 657 | "version": "3.4.1", 658 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", 659 | "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", 660 | "dev": true 661 | }, 662 | "node_modules/local-access": { 663 | "version": "1.1.0", 664 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", 665 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==", 666 | "engines": { 667 | "node": ">=6" 668 | } 669 | }, 670 | "node_modules/magic-string": { 671 | "version": "0.25.9", 672 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 673 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 674 | "dev": true, 675 | "dependencies": { 676 | "sourcemap-codec": "^1.4.8" 677 | } 678 | }, 679 | "node_modules/merge-stream": { 680 | "version": "2.0.0", 681 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 682 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 683 | "dev": true 684 | }, 685 | "node_modules/minimatch": { 686 | "version": "3.1.2", 687 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 688 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 689 | "dev": true, 690 | "dependencies": { 691 | "brace-expansion": "^1.1.7" 692 | }, 693 | "engines": { 694 | "node": "*" 695 | } 696 | }, 697 | "node_modules/mri": { 698 | "version": "1.2.0", 699 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 700 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 701 | "engines": { 702 | "node": ">=4" 703 | } 704 | }, 705 | "node_modules/mrmime": { 706 | "version": "1.0.1", 707 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 708 | "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", 709 | "engines": { 710 | "node": ">=10" 711 | } 712 | }, 713 | "node_modules/normalize-path": { 714 | "version": "3.0.0", 715 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 716 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 717 | "dev": true, 718 | "engines": { 719 | "node": ">=0.10.0" 720 | } 721 | }, 722 | "node_modules/once": { 723 | "version": "1.4.0", 724 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 725 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 726 | "dev": true, 727 | "dependencies": { 728 | "wrappy": "1" 729 | } 730 | }, 731 | "node_modules/opts": { 732 | "version": "2.0.2", 733 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", 734 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", 735 | "dev": true 736 | }, 737 | "node_modules/path-is-absolute": { 738 | "version": "1.0.1", 739 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 740 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 741 | "dev": true, 742 | "engines": { 743 | "node": ">=0.10.0" 744 | } 745 | }, 746 | "node_modules/path-parse": { 747 | "version": "1.0.7", 748 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 749 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 750 | "dev": true 751 | }, 752 | "node_modules/picomatch": { 753 | "version": "2.3.1", 754 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 755 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 756 | "dev": true, 757 | "engines": { 758 | "node": ">=8.6" 759 | }, 760 | "funding": { 761 | "url": "https://github.com/sponsors/jonschlinkert" 762 | } 763 | }, 764 | "node_modules/randombytes": { 765 | "version": "2.1.0", 766 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 767 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 768 | "dev": true, 769 | "dependencies": { 770 | "safe-buffer": "^5.1.0" 771 | } 772 | }, 773 | "node_modules/readdirp": { 774 | "version": "3.6.0", 775 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 776 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 777 | "dev": true, 778 | "dependencies": { 779 | "picomatch": "^2.2.1" 780 | }, 781 | "engines": { 782 | "node": ">=8.10.0" 783 | } 784 | }, 785 | "node_modules/require-relative": { 786 | "version": "0.8.7", 787 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 788 | "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", 789 | "dev": true 790 | }, 791 | "node_modules/resolve": { 792 | "version": "1.22.1", 793 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 794 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 795 | "dev": true, 796 | "dependencies": { 797 | "is-core-module": "^2.9.0", 798 | "path-parse": "^1.0.7", 799 | "supports-preserve-symlinks-flag": "^1.0.0" 800 | }, 801 | "bin": { 802 | "resolve": "bin/resolve" 803 | }, 804 | "funding": { 805 | "url": "https://github.com/sponsors/ljharb" 806 | } 807 | }, 808 | "node_modules/rollup": { 809 | "version": "2.79.1", 810 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", 811 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", 812 | "dev": true, 813 | "bin": { 814 | "rollup": "dist/bin/rollup" 815 | }, 816 | "engines": { 817 | "node": ">=10.0.0" 818 | }, 819 | "optionalDependencies": { 820 | "fsevents": "~2.3.2" 821 | } 822 | }, 823 | "node_modules/rollup-plugin-css-only": { 824 | "version": "3.1.0", 825 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz", 826 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==", 827 | "dev": true, 828 | "dependencies": { 829 | "@rollup/pluginutils": "4" 830 | }, 831 | "engines": { 832 | "node": ">=10.12.0" 833 | }, 834 | "peerDependencies": { 835 | "rollup": "1 || 2" 836 | } 837 | }, 838 | "node_modules/rollup-plugin-css-only/node_modules/@rollup/pluginutils": { 839 | "version": "4.2.1", 840 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 841 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 842 | "dev": true, 843 | "dependencies": { 844 | "estree-walker": "^2.0.1", 845 | "picomatch": "^2.2.2" 846 | }, 847 | "engines": { 848 | "node": ">= 8.0.0" 849 | } 850 | }, 851 | "node_modules/rollup-plugin-livereload": { 852 | "version": "2.0.5", 853 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz", 854 | "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==", 855 | "dev": true, 856 | "dependencies": { 857 | "livereload": "^0.9.1" 858 | }, 859 | "engines": { 860 | "node": ">=8.3" 861 | } 862 | }, 863 | "node_modules/rollup-plugin-svelte": { 864 | "version": "7.1.0", 865 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", 866 | "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", 867 | "dev": true, 868 | "dependencies": { 869 | "require-relative": "^0.8.7", 870 | "rollup-pluginutils": "^2.8.2" 871 | }, 872 | "engines": { 873 | "node": ">=10" 874 | }, 875 | "peerDependencies": { 876 | "rollup": ">=2.0.0", 877 | "svelte": ">=3.5.0" 878 | } 879 | }, 880 | "node_modules/rollup-plugin-terser": { 881 | "version": "7.0.2", 882 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 883 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 884 | "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-terser", 885 | "dev": true, 886 | "dependencies": { 887 | "@babel/code-frame": "^7.10.4", 888 | "jest-worker": "^26.2.1", 889 | "serialize-javascript": "^4.0.0", 890 | "terser": "^5.0.0" 891 | }, 892 | "peerDependencies": { 893 | "rollup": "^2.0.0" 894 | } 895 | }, 896 | "node_modules/rollup-pluginutils": { 897 | "version": "2.8.2", 898 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 899 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 900 | "dev": true, 901 | "dependencies": { 902 | "estree-walker": "^0.6.1" 903 | } 904 | }, 905 | "node_modules/rollup-pluginutils/node_modules/estree-walker": { 906 | "version": "0.6.1", 907 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 908 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 909 | "dev": true 910 | }, 911 | "node_modules/sade": { 912 | "version": "1.8.1", 913 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 914 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 915 | "dependencies": { 916 | "mri": "^1.1.0" 917 | }, 918 | "engines": { 919 | "node": ">=6" 920 | } 921 | }, 922 | "node_modules/safe-buffer": { 923 | "version": "5.2.1", 924 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 925 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 926 | "dev": true, 927 | "funding": [ 928 | { 929 | "type": "github", 930 | "url": "https://github.com/sponsors/feross" 931 | }, 932 | { 933 | "type": "patreon", 934 | "url": "https://www.patreon.com/feross" 935 | }, 936 | { 937 | "type": "consulting", 938 | "url": "https://feross.org/support" 939 | } 940 | ] 941 | }, 942 | "node_modules/semiver": { 943 | "version": "1.1.0", 944 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", 945 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", 946 | "engines": { 947 | "node": ">=6" 948 | } 949 | }, 950 | "node_modules/serialize-javascript": { 951 | "version": "4.0.0", 952 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 953 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 954 | "dev": true, 955 | "dependencies": { 956 | "randombytes": "^2.1.0" 957 | } 958 | }, 959 | "node_modules/sirv": { 960 | "version": "2.0.2", 961 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", 962 | "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", 963 | "dependencies": { 964 | "@polka/url": "^1.0.0-next.20", 965 | "mrmime": "^1.0.0", 966 | "totalist": "^3.0.0" 967 | }, 968 | "engines": { 969 | "node": ">= 10" 970 | } 971 | }, 972 | "node_modules/sirv-cli": { 973 | "version": "2.0.2", 974 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-2.0.2.tgz", 975 | "integrity": "sha512-OtSJDwxsF1NWHc7ps3Sa0s+dPtP15iQNJzfKVz+MxkEo3z72mCD+yu30ct79rPr0CaV1HXSOBp+MIY5uIhHZ1A==", 976 | "dependencies": { 977 | "console-clear": "^1.1.0", 978 | "get-port": "^3.2.0", 979 | "kleur": "^4.1.4", 980 | "local-access": "^1.0.1", 981 | "sade": "^1.6.0", 982 | "semiver": "^1.0.0", 983 | "sirv": "^2.0.0", 984 | "tinydate": "^1.0.0" 985 | }, 986 | "bin": { 987 | "sirv": "bin.js" 988 | }, 989 | "engines": { 990 | "node": ">= 10" 991 | } 992 | }, 993 | "node_modules/source-map": { 994 | "version": "0.6.1", 995 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 996 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 997 | "dev": true, 998 | "engines": { 999 | "node": ">=0.10.0" 1000 | } 1001 | }, 1002 | "node_modules/source-map-support": { 1003 | "version": "0.5.21", 1004 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1005 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1006 | "dev": true, 1007 | "dependencies": { 1008 | "buffer-from": "^1.0.0", 1009 | "source-map": "^0.6.0" 1010 | } 1011 | }, 1012 | "node_modules/sourcemap-codec": { 1013 | "version": "1.4.8", 1014 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1015 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1016 | "deprecated": "Please use @jridgewell/sourcemap-codec instead", 1017 | "dev": true 1018 | }, 1019 | "node_modules/supports-color": { 1020 | "version": "5.5.0", 1021 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1022 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1023 | "dev": true, 1024 | "dependencies": { 1025 | "has-flag": "^3.0.0" 1026 | }, 1027 | "engines": { 1028 | "node": ">=4" 1029 | } 1030 | }, 1031 | "node_modules/supports-preserve-symlinks-flag": { 1032 | "version": "1.0.0", 1033 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1034 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1035 | "dev": true, 1036 | "engines": { 1037 | "node": ">= 0.4" 1038 | }, 1039 | "funding": { 1040 | "url": "https://github.com/sponsors/ljharb" 1041 | } 1042 | }, 1043 | "node_modules/svelte": { 1044 | "version": "3.55.1", 1045 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", 1046 | "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", 1047 | "dev": true, 1048 | "engines": { 1049 | "node": ">= 8" 1050 | } 1051 | }, 1052 | "node_modules/terser": { 1053 | "version": "5.16.1", 1054 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", 1055 | "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", 1056 | "dev": true, 1057 | "dependencies": { 1058 | "@jridgewell/source-map": "^0.3.2", 1059 | "acorn": "^8.5.0", 1060 | "commander": "^2.20.0", 1061 | "source-map-support": "~0.5.20" 1062 | }, 1063 | "bin": { 1064 | "terser": "bin/terser" 1065 | }, 1066 | "engines": { 1067 | "node": ">=10" 1068 | } 1069 | }, 1070 | "node_modules/tinydate": { 1071 | "version": "1.3.0", 1072 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", 1073 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", 1074 | "engines": { 1075 | "node": ">=4" 1076 | } 1077 | }, 1078 | "node_modules/to-regex-range": { 1079 | "version": "5.0.1", 1080 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1081 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1082 | "dev": true, 1083 | "dependencies": { 1084 | "is-number": "^7.0.0" 1085 | }, 1086 | "engines": { 1087 | "node": ">=8.0" 1088 | } 1089 | }, 1090 | "node_modules/totalist": { 1091 | "version": "3.0.0", 1092 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", 1093 | "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==", 1094 | "engines": { 1095 | "node": ">=6" 1096 | } 1097 | }, 1098 | "node_modules/wrappy": { 1099 | "version": "1.0.2", 1100 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1101 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1102 | "dev": true 1103 | }, 1104 | "node_modules/ws": { 1105 | "version": "7.5.9", 1106 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 1107 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 1108 | "dev": true, 1109 | "engines": { 1110 | "node": ">=8.3.0" 1111 | }, 1112 | "peerDependencies": { 1113 | "bufferutil": "^4.0.1", 1114 | "utf-8-validate": "^5.0.2" 1115 | }, 1116 | "peerDependenciesMeta": { 1117 | "bufferutil": { 1118 | "optional": true 1119 | }, 1120 | "utf-8-validate": { 1121 | "optional": true 1122 | } 1123 | } 1124 | } 1125 | }, 1126 | "dependencies": { 1127 | "@babel/code-frame": { 1128 | "version": "7.18.6", 1129 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 1130 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 1131 | "dev": true, 1132 | "requires": { 1133 | "@babel/highlight": "^7.18.6" 1134 | } 1135 | }, 1136 | "@babel/helper-validator-identifier": { 1137 | "version": "7.19.1", 1138 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 1139 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 1140 | "dev": true 1141 | }, 1142 | "@babel/highlight": { 1143 | "version": "7.18.6", 1144 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 1145 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 1146 | "dev": true, 1147 | "requires": { 1148 | "@babel/helper-validator-identifier": "^7.18.6", 1149 | "chalk": "^2.0.0", 1150 | "js-tokens": "^4.0.0" 1151 | } 1152 | }, 1153 | "@jridgewell/gen-mapping": { 1154 | "version": "0.3.2", 1155 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", 1156 | "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", 1157 | "dev": true, 1158 | "requires": { 1159 | "@jridgewell/set-array": "^1.0.1", 1160 | "@jridgewell/sourcemap-codec": "^1.4.10", 1161 | "@jridgewell/trace-mapping": "^0.3.9" 1162 | } 1163 | }, 1164 | "@jridgewell/resolve-uri": { 1165 | "version": "3.1.0", 1166 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 1167 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 1168 | "dev": true 1169 | }, 1170 | "@jridgewell/set-array": { 1171 | "version": "1.1.2", 1172 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 1173 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 1174 | "dev": true 1175 | }, 1176 | "@jridgewell/source-map": { 1177 | "version": "0.3.2", 1178 | "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", 1179 | "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", 1180 | "dev": true, 1181 | "requires": { 1182 | "@jridgewell/gen-mapping": "^0.3.0", 1183 | "@jridgewell/trace-mapping": "^0.3.9" 1184 | } 1185 | }, 1186 | "@jridgewell/sourcemap-codec": { 1187 | "version": "1.4.14", 1188 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 1189 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 1190 | "dev": true 1191 | }, 1192 | "@jridgewell/trace-mapping": { 1193 | "version": "0.3.17", 1194 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", 1195 | "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", 1196 | "dev": true, 1197 | "requires": { 1198 | "@jridgewell/resolve-uri": "3.1.0", 1199 | "@jridgewell/sourcemap-codec": "1.4.14" 1200 | } 1201 | }, 1202 | "@polka/url": { 1203 | "version": "1.0.0-next.21", 1204 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", 1205 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" 1206 | }, 1207 | "@rollup/plugin-commonjs": { 1208 | "version": "17.1.0", 1209 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", 1210 | "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", 1211 | "dev": true, 1212 | "requires": { 1213 | "@rollup/pluginutils": "^3.1.0", 1214 | "commondir": "^1.0.1", 1215 | "estree-walker": "^2.0.1", 1216 | "glob": "^7.1.6", 1217 | "is-reference": "^1.2.1", 1218 | "magic-string": "^0.25.7", 1219 | "resolve": "^1.17.0" 1220 | } 1221 | }, 1222 | "@rollup/plugin-node-resolve": { 1223 | "version": "11.2.1", 1224 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", 1225 | "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", 1226 | "dev": true, 1227 | "requires": { 1228 | "@rollup/pluginutils": "^3.1.0", 1229 | "@types/resolve": "1.17.1", 1230 | "builtin-modules": "^3.1.0", 1231 | "deepmerge": "^4.2.2", 1232 | "is-module": "^1.0.0", 1233 | "resolve": "^1.19.0" 1234 | } 1235 | }, 1236 | "@rollup/pluginutils": { 1237 | "version": "3.1.0", 1238 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 1239 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 1240 | "dev": true, 1241 | "requires": { 1242 | "@types/estree": "0.0.39", 1243 | "estree-walker": "^1.0.1", 1244 | "picomatch": "^2.2.2" 1245 | }, 1246 | "dependencies": { 1247 | "estree-walker": { 1248 | "version": "1.0.1", 1249 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 1250 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 1251 | "dev": true 1252 | } 1253 | } 1254 | }, 1255 | "@types/estree": { 1256 | "version": "0.0.39", 1257 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1258 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1259 | "dev": true 1260 | }, 1261 | "@types/node": { 1262 | "version": "18.11.18", 1263 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", 1264 | "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", 1265 | "dev": true 1266 | }, 1267 | "@types/resolve": { 1268 | "version": "1.17.1", 1269 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 1270 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 1271 | "dev": true, 1272 | "requires": { 1273 | "@types/node": "*" 1274 | } 1275 | }, 1276 | "acorn": { 1277 | "version": "8.8.1", 1278 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.1.tgz", 1279 | "integrity": "sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==", 1280 | "dev": true 1281 | }, 1282 | "ansi-styles": { 1283 | "version": "3.2.1", 1284 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1285 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1286 | "dev": true, 1287 | "requires": { 1288 | "color-convert": "^1.9.0" 1289 | } 1290 | }, 1291 | "anymatch": { 1292 | "version": "3.1.3", 1293 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1294 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1295 | "dev": true, 1296 | "requires": { 1297 | "normalize-path": "^3.0.0", 1298 | "picomatch": "^2.0.4" 1299 | } 1300 | }, 1301 | "balanced-match": { 1302 | "version": "1.0.2", 1303 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1304 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1305 | "dev": true 1306 | }, 1307 | "binary-extensions": { 1308 | "version": "2.2.0", 1309 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1310 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1311 | "dev": true 1312 | }, 1313 | "brace-expansion": { 1314 | "version": "1.1.11", 1315 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1316 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1317 | "dev": true, 1318 | "requires": { 1319 | "balanced-match": "^1.0.0", 1320 | "concat-map": "0.0.1" 1321 | } 1322 | }, 1323 | "braces": { 1324 | "version": "3.0.2", 1325 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1326 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1327 | "dev": true, 1328 | "requires": { 1329 | "fill-range": "^7.0.1" 1330 | } 1331 | }, 1332 | "buffer-from": { 1333 | "version": "1.1.2", 1334 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1335 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1336 | "dev": true 1337 | }, 1338 | "builtin-modules": { 1339 | "version": "3.3.0", 1340 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 1341 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 1342 | "dev": true 1343 | }, 1344 | "chalk": { 1345 | "version": "2.4.2", 1346 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1347 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1348 | "dev": true, 1349 | "requires": { 1350 | "ansi-styles": "^3.2.1", 1351 | "escape-string-regexp": "^1.0.5", 1352 | "supports-color": "^5.3.0" 1353 | } 1354 | }, 1355 | "chokidar": { 1356 | "version": "3.5.3", 1357 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1358 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1359 | "dev": true, 1360 | "requires": { 1361 | "anymatch": "~3.1.2", 1362 | "braces": "~3.0.2", 1363 | "fsevents": "~2.3.2", 1364 | "glob-parent": "~5.1.2", 1365 | "is-binary-path": "~2.1.0", 1366 | "is-glob": "~4.0.1", 1367 | "normalize-path": "~3.0.0", 1368 | "readdirp": "~3.6.0" 1369 | } 1370 | }, 1371 | "color-convert": { 1372 | "version": "1.9.3", 1373 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1374 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1375 | "dev": true, 1376 | "requires": { 1377 | "color-name": "1.1.3" 1378 | } 1379 | }, 1380 | "color-name": { 1381 | "version": "1.1.3", 1382 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1383 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 1384 | "dev": true 1385 | }, 1386 | "commander": { 1387 | "version": "2.20.3", 1388 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1389 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1390 | "dev": true 1391 | }, 1392 | "commondir": { 1393 | "version": "1.0.1", 1394 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1395 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 1396 | "dev": true 1397 | }, 1398 | "concat-map": { 1399 | "version": "0.0.1", 1400 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1401 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1402 | "dev": true 1403 | }, 1404 | "console-clear": { 1405 | "version": "1.1.1", 1406 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 1407 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==" 1408 | }, 1409 | "deepmerge": { 1410 | "version": "4.2.2", 1411 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1412 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1413 | "dev": true 1414 | }, 1415 | "escape-string-regexp": { 1416 | "version": "1.0.5", 1417 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1418 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1419 | "dev": true 1420 | }, 1421 | "estree-walker": { 1422 | "version": "2.0.2", 1423 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1424 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1425 | "dev": true 1426 | }, 1427 | "fill-range": { 1428 | "version": "7.0.1", 1429 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1430 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1431 | "dev": true, 1432 | "requires": { 1433 | "to-regex-range": "^5.0.1" 1434 | } 1435 | }, 1436 | "fs.realpath": { 1437 | "version": "1.0.0", 1438 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1439 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1440 | "dev": true 1441 | }, 1442 | "fsevents": { 1443 | "version": "2.3.2", 1444 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1445 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1446 | "dev": true, 1447 | "optional": true 1448 | }, 1449 | "function-bind": { 1450 | "version": "1.1.1", 1451 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1452 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1453 | "dev": true 1454 | }, 1455 | "get-port": { 1456 | "version": "3.2.0", 1457 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 1458 | "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" 1459 | }, 1460 | "glob": { 1461 | "version": "7.2.3", 1462 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1463 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1464 | "dev": true, 1465 | "requires": { 1466 | "fs.realpath": "^1.0.0", 1467 | "inflight": "^1.0.4", 1468 | "inherits": "2", 1469 | "minimatch": "^3.1.1", 1470 | "once": "^1.3.0", 1471 | "path-is-absolute": "^1.0.0" 1472 | } 1473 | }, 1474 | "glob-parent": { 1475 | "version": "5.1.2", 1476 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1477 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1478 | "dev": true, 1479 | "requires": { 1480 | "is-glob": "^4.0.1" 1481 | } 1482 | }, 1483 | "has": { 1484 | "version": "1.0.3", 1485 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1486 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1487 | "dev": true, 1488 | "requires": { 1489 | "function-bind": "^1.1.1" 1490 | } 1491 | }, 1492 | "has-flag": { 1493 | "version": "3.0.0", 1494 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1495 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1496 | "dev": true 1497 | }, 1498 | "inflight": { 1499 | "version": "1.0.6", 1500 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1501 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1502 | "dev": true, 1503 | "requires": { 1504 | "once": "^1.3.0", 1505 | "wrappy": "1" 1506 | } 1507 | }, 1508 | "inherits": { 1509 | "version": "2.0.4", 1510 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1511 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1512 | "dev": true 1513 | }, 1514 | "is-binary-path": { 1515 | "version": "2.1.0", 1516 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1517 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1518 | "dev": true, 1519 | "requires": { 1520 | "binary-extensions": "^2.0.0" 1521 | } 1522 | }, 1523 | "is-core-module": { 1524 | "version": "2.11.0", 1525 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 1526 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 1527 | "dev": true, 1528 | "requires": { 1529 | "has": "^1.0.3" 1530 | } 1531 | }, 1532 | "is-extglob": { 1533 | "version": "2.1.1", 1534 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1535 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1536 | "dev": true 1537 | }, 1538 | "is-glob": { 1539 | "version": "4.0.3", 1540 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1541 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1542 | "dev": true, 1543 | "requires": { 1544 | "is-extglob": "^2.1.1" 1545 | } 1546 | }, 1547 | "is-module": { 1548 | "version": "1.0.0", 1549 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1550 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 1551 | "dev": true 1552 | }, 1553 | "is-number": { 1554 | "version": "7.0.0", 1555 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1556 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1557 | "dev": true 1558 | }, 1559 | "is-reference": { 1560 | "version": "1.2.1", 1561 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 1562 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 1563 | "dev": true, 1564 | "requires": { 1565 | "@types/estree": "*" 1566 | } 1567 | }, 1568 | "jest-worker": { 1569 | "version": "26.6.2", 1570 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 1571 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 1572 | "dev": true, 1573 | "requires": { 1574 | "@types/node": "*", 1575 | "merge-stream": "^2.0.0", 1576 | "supports-color": "^7.0.0" 1577 | }, 1578 | "dependencies": { 1579 | "has-flag": { 1580 | "version": "4.0.0", 1581 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1582 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1583 | "dev": true 1584 | }, 1585 | "supports-color": { 1586 | "version": "7.2.0", 1587 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1588 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1589 | "dev": true, 1590 | "requires": { 1591 | "has-flag": "^4.0.0" 1592 | } 1593 | } 1594 | } 1595 | }, 1596 | "js-tokens": { 1597 | "version": "4.0.0", 1598 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1599 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1600 | "dev": true 1601 | }, 1602 | "kleur": { 1603 | "version": "4.1.5", 1604 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", 1605 | "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==" 1606 | }, 1607 | "livereload": { 1608 | "version": "0.9.3", 1609 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", 1610 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", 1611 | "dev": true, 1612 | "requires": { 1613 | "chokidar": "^3.5.0", 1614 | "livereload-js": "^3.3.1", 1615 | "opts": ">= 1.2.0", 1616 | "ws": "^7.4.3" 1617 | } 1618 | }, 1619 | "livereload-js": { 1620 | "version": "3.4.1", 1621 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", 1622 | "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", 1623 | "dev": true 1624 | }, 1625 | "local-access": { 1626 | "version": "1.1.0", 1627 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", 1628 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==" 1629 | }, 1630 | "magic-string": { 1631 | "version": "0.25.9", 1632 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 1633 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 1634 | "dev": true, 1635 | "requires": { 1636 | "sourcemap-codec": "^1.4.8" 1637 | } 1638 | }, 1639 | "merge-stream": { 1640 | "version": "2.0.0", 1641 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1642 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1643 | "dev": true 1644 | }, 1645 | "minimatch": { 1646 | "version": "3.1.2", 1647 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1648 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1649 | "dev": true, 1650 | "requires": { 1651 | "brace-expansion": "^1.1.7" 1652 | } 1653 | }, 1654 | "mri": { 1655 | "version": "1.2.0", 1656 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 1657 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" 1658 | }, 1659 | "mrmime": { 1660 | "version": "1.0.1", 1661 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 1662 | "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" 1663 | }, 1664 | "normalize-path": { 1665 | "version": "3.0.0", 1666 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1667 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1668 | "dev": true 1669 | }, 1670 | "once": { 1671 | "version": "1.4.0", 1672 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1673 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1674 | "dev": true, 1675 | "requires": { 1676 | "wrappy": "1" 1677 | } 1678 | }, 1679 | "opts": { 1680 | "version": "2.0.2", 1681 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", 1682 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", 1683 | "dev": true 1684 | }, 1685 | "path-is-absolute": { 1686 | "version": "1.0.1", 1687 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1688 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1689 | "dev": true 1690 | }, 1691 | "path-parse": { 1692 | "version": "1.0.7", 1693 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1694 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1695 | "dev": true 1696 | }, 1697 | "picomatch": { 1698 | "version": "2.3.1", 1699 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1700 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1701 | "dev": true 1702 | }, 1703 | "randombytes": { 1704 | "version": "2.1.0", 1705 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1706 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1707 | "dev": true, 1708 | "requires": { 1709 | "safe-buffer": "^5.1.0" 1710 | } 1711 | }, 1712 | "readdirp": { 1713 | "version": "3.6.0", 1714 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1715 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1716 | "dev": true, 1717 | "requires": { 1718 | "picomatch": "^2.2.1" 1719 | } 1720 | }, 1721 | "require-relative": { 1722 | "version": "0.8.7", 1723 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 1724 | "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", 1725 | "dev": true 1726 | }, 1727 | "resolve": { 1728 | "version": "1.22.1", 1729 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1730 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1731 | "dev": true, 1732 | "requires": { 1733 | "is-core-module": "^2.9.0", 1734 | "path-parse": "^1.0.7", 1735 | "supports-preserve-symlinks-flag": "^1.0.0" 1736 | } 1737 | }, 1738 | "rollup": { 1739 | "version": "2.79.1", 1740 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", 1741 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", 1742 | "dev": true, 1743 | "requires": { 1744 | "fsevents": "~2.3.2" 1745 | } 1746 | }, 1747 | "rollup-plugin-css-only": { 1748 | "version": "3.1.0", 1749 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz", 1750 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==", 1751 | "dev": true, 1752 | "requires": { 1753 | "@rollup/pluginutils": "4" 1754 | }, 1755 | "dependencies": { 1756 | "@rollup/pluginutils": { 1757 | "version": "4.2.1", 1758 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 1759 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 1760 | "dev": true, 1761 | "requires": { 1762 | "estree-walker": "^2.0.1", 1763 | "picomatch": "^2.2.2" 1764 | } 1765 | } 1766 | } 1767 | }, 1768 | "rollup-plugin-livereload": { 1769 | "version": "2.0.5", 1770 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.5.tgz", 1771 | "integrity": "sha512-vqQZ/UQowTW7VoiKEM5ouNW90wE5/GZLfdWuR0ELxyKOJUIaj+uismPZZaICU4DnWPVjnpCDDxEqwU7pcKY/PA==", 1772 | "dev": true, 1773 | "requires": { 1774 | "livereload": "^0.9.1" 1775 | } 1776 | }, 1777 | "rollup-plugin-svelte": { 1778 | "version": "7.1.0", 1779 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.1.0.tgz", 1780 | "integrity": "sha512-vopCUq3G+25sKjwF5VilIbiY6KCuMNHP1PFvx2Vr3REBNMDllKHFZN2B9jwwC+MqNc3UPKkjXnceLPEjTjXGXg==", 1781 | "dev": true, 1782 | "requires": { 1783 | "require-relative": "^0.8.7", 1784 | "rollup-pluginutils": "^2.8.2" 1785 | } 1786 | }, 1787 | "rollup-plugin-terser": { 1788 | "version": "7.0.2", 1789 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1790 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1791 | "dev": true, 1792 | "requires": { 1793 | "@babel/code-frame": "^7.10.4", 1794 | "jest-worker": "^26.2.1", 1795 | "serialize-javascript": "^4.0.0", 1796 | "terser": "^5.0.0" 1797 | } 1798 | }, 1799 | "rollup-pluginutils": { 1800 | "version": "2.8.2", 1801 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1802 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1803 | "dev": true, 1804 | "requires": { 1805 | "estree-walker": "^0.6.1" 1806 | }, 1807 | "dependencies": { 1808 | "estree-walker": { 1809 | "version": "0.6.1", 1810 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1811 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1812 | "dev": true 1813 | } 1814 | } 1815 | }, 1816 | "sade": { 1817 | "version": "1.8.1", 1818 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 1819 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 1820 | "requires": { 1821 | "mri": "^1.1.0" 1822 | } 1823 | }, 1824 | "safe-buffer": { 1825 | "version": "5.2.1", 1826 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1827 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1828 | "dev": true 1829 | }, 1830 | "semiver": { 1831 | "version": "1.1.0", 1832 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", 1833 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==" 1834 | }, 1835 | "serialize-javascript": { 1836 | "version": "4.0.0", 1837 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1838 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1839 | "dev": true, 1840 | "requires": { 1841 | "randombytes": "^2.1.0" 1842 | } 1843 | }, 1844 | "sirv": { 1845 | "version": "2.0.2", 1846 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.2.tgz", 1847 | "integrity": "sha512-4Qog6aE29nIjAOKe/wowFTxOdmbEZKb+3tsLljaBRzJwtqto0BChD2zzH0LhgCSXiI+V7X+Y45v14wBZQ1TK3w==", 1848 | "requires": { 1849 | "@polka/url": "^1.0.0-next.20", 1850 | "mrmime": "^1.0.0", 1851 | "totalist": "^3.0.0" 1852 | } 1853 | }, 1854 | "sirv-cli": { 1855 | "version": "2.0.2", 1856 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-2.0.2.tgz", 1857 | "integrity": "sha512-OtSJDwxsF1NWHc7ps3Sa0s+dPtP15iQNJzfKVz+MxkEo3z72mCD+yu30ct79rPr0CaV1HXSOBp+MIY5uIhHZ1A==", 1858 | "requires": { 1859 | "console-clear": "^1.1.0", 1860 | "get-port": "^3.2.0", 1861 | "kleur": "^4.1.4", 1862 | "local-access": "^1.0.1", 1863 | "sade": "^1.6.0", 1864 | "semiver": "^1.0.0", 1865 | "sirv": "^2.0.0", 1866 | "tinydate": "^1.0.0" 1867 | } 1868 | }, 1869 | "source-map": { 1870 | "version": "0.6.1", 1871 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1872 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1873 | "dev": true 1874 | }, 1875 | "source-map-support": { 1876 | "version": "0.5.21", 1877 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1878 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1879 | "dev": true, 1880 | "requires": { 1881 | "buffer-from": "^1.0.0", 1882 | "source-map": "^0.6.0" 1883 | } 1884 | }, 1885 | "sourcemap-codec": { 1886 | "version": "1.4.8", 1887 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1888 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1889 | "dev": true 1890 | }, 1891 | "supports-color": { 1892 | "version": "5.5.0", 1893 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1894 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1895 | "dev": true, 1896 | "requires": { 1897 | "has-flag": "^3.0.0" 1898 | } 1899 | }, 1900 | "supports-preserve-symlinks-flag": { 1901 | "version": "1.0.0", 1902 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1903 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1904 | "dev": true 1905 | }, 1906 | "svelte": { 1907 | "version": "3.55.1", 1908 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.55.1.tgz", 1909 | "integrity": "sha512-S+87/P0Ve67HxKkEV23iCdAh/SX1xiSfjF1HOglno/YTbSTW7RniICMCofWGdJJbdjw3S+0PfFb1JtGfTXE0oQ==", 1910 | "dev": true 1911 | }, 1912 | "terser": { 1913 | "version": "5.16.1", 1914 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.1.tgz", 1915 | "integrity": "sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==", 1916 | "dev": true, 1917 | "requires": { 1918 | "@jridgewell/source-map": "^0.3.2", 1919 | "acorn": "^8.5.0", 1920 | "commander": "^2.20.0", 1921 | "source-map-support": "~0.5.20" 1922 | } 1923 | }, 1924 | "tinydate": { 1925 | "version": "1.3.0", 1926 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", 1927 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==" 1928 | }, 1929 | "to-regex-range": { 1930 | "version": "5.0.1", 1931 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1932 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1933 | "dev": true, 1934 | "requires": { 1935 | "is-number": "^7.0.0" 1936 | } 1937 | }, 1938 | "totalist": { 1939 | "version": "3.0.0", 1940 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.0.tgz", 1941 | "integrity": "sha512-eM+pCBxXO/njtF7vdFsHuqb+ElbxqtI4r5EAvk6grfAFyJ6IvWlSkfZ5T9ozC6xWw3Fj1fGoSmrl0gUs46JVIw==" 1942 | }, 1943 | "wrappy": { 1944 | "version": "1.0.2", 1945 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1946 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1947 | "dev": true 1948 | }, 1949 | "ws": { 1950 | "version": "7.5.9", 1951 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 1952 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 1953 | "dev": true, 1954 | "requires": {} 1955 | } 1956 | } 1957 | } 1958 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "build": "rollup -c", 7 | "dev": "rollup -c -w", 8 | "start": "sirv public --no-clear" 9 | }, 10 | "devDependencies": { 11 | "@rollup/plugin-commonjs": "^17.0.0", 12 | "@rollup/plugin-node-resolve": "^11.0.0", 13 | "rollup": "^2.3.4", 14 | "rollup-plugin-css-only": "^3.1.0", 15 | "rollup-plugin-livereload": "^2.0.0", 16 | "rollup-plugin-svelte": "^7.0.0", 17 | "rollup-plugin-terser": "^7.0.0", 18 | "svelte": "^3.0.0" 19 | }, 20 | "dependencies": { 21 | "sirv-cli": "^2.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keithj2780/svelte-spreadsheet-frontend/0fcc3078d2ff6a96f4a47a2867cec34d2a27ff2e/public/favicon.png -------------------------------------------------------------------------------- /public/global.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | position: relative; 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | body { 8 | color: #333; 9 | margin: 0; 10 | padding: 8px; 11 | box-sizing: border-box; 12 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 13 | } 14 | 15 | a { 16 | color: rgb(0,100,200); 17 | text-decoration: none; 18 | } 19 | 20 | a:hover { 21 | text-decoration: underline; 22 | } 23 | 24 | a:visited { 25 | color: rgb(0,80,160); 26 | } 27 | 28 | label { 29 | display: block; 30 | } 31 | 32 | input, button, select, textarea { 33 | font-family: inherit; 34 | font-size: inherit; 35 | -webkit-padding: 0.4em 0; 36 | padding: 0.4em; 37 | margin: 0 0 0.5em 0; 38 | box-sizing: border-box; 39 | border: 1px solid #ccc; 40 | border-radius: 2px; 41 | } 42 | 43 | input:disabled { 44 | color: #ccc; 45 | } 46 | 47 | button { 48 | color: #333; 49 | background-color: #f4f4f4; 50 | outline: none; 51 | } 52 | 53 | button:disabled { 54 | color: #999; 55 | } 56 | 57 | button:not(:disabled):active { 58 | background-color: #ddd; 59 | } 60 | 61 | button:focus { 62 | border-color: #666; 63 | } 64 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Svelte app 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | import css from 'rollup-plugin-css-only'; 7 | 8 | const production = !process.env.ROLLUP_WATCH; 9 | 10 | function serve() { 11 | let server; 12 | 13 | function toExit() { 14 | if (server) server.kill(0); 15 | } 16 | 17 | return { 18 | writeBundle() { 19 | if (server) return; 20 | server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { 21 | stdio: ['ignore', 'inherit', 'inherit'], 22 | shell: true 23 | }); 24 | 25 | process.on('SIGTERM', toExit); 26 | process.on('exit', toExit); 27 | } 28 | }; 29 | } 30 | 31 | export default { 32 | input: 'src/main.js', 33 | output: { 34 | sourcemap: true, 35 | format: 'iife', 36 | name: 'app', 37 | file: 'public/build/bundle.js' 38 | }, 39 | plugins: [ 40 | svelte({ 41 | compilerOptions: { 42 | // enable run-time checks when not in production 43 | dev: !production 44 | } 45 | }), 46 | // we'll extract any component CSS out into 47 | // a separate file - better for performance 48 | css({ output: 'bundle.css' }), 49 | 50 | // If you have external dependencies installed from 51 | // npm, you'll most likely need these plugins. In 52 | // some cases you'll need additional configuration - 53 | // consult the documentation for details: 54 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 55 | resolve({ 56 | browser: true, 57 | dedupe: ['svelte'] 58 | }), 59 | commonjs(), 60 | 61 | // In dev mode, call `npm run start` once 62 | // the bundle has been generated 63 | !production && serve(), 64 | 65 | // Watch the `public` directory and refresh the 66 | // browser on changes when not in production 67 | !production && livereload('public'), 68 | 69 | // If we're building for production (npm run build 70 | // instead of npm run dev), minify 71 | production && terser() 72 | ], 73 | watch: { 74 | clearScreen: false 75 | } 76 | }; 77 | -------------------------------------------------------------------------------- /scripts/setupTypeScript.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | /** This script modifies the project to support TS code in .svelte files like: 4 | 5 | 8 | 9 | As well as validating the code for CI. 10 | */ 11 | 12 | /** To work on this script: 13 | rm -rf test-template template && git clone sveltejs/template test-template && node scripts/setupTypeScript.js test-template 14 | */ 15 | 16 | const fs = require("fs") 17 | const path = require("path") 18 | const { argv } = require("process") 19 | 20 | const projectRoot = argv[2] || path.join(__dirname, "..") 21 | 22 | // Add deps to pkg.json 23 | const packageJSON = JSON.parse(fs.readFileSync(path.join(projectRoot, "package.json"), "utf8")) 24 | packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, { 25 | "svelte-check": "^2.0.0", 26 | "svelte-preprocess": "^4.0.0", 27 | "@rollup/plugin-typescript": "^8.0.0", 28 | "typescript": "^4.0.0", 29 | "tslib": "^2.0.0", 30 | "@tsconfig/svelte": "^2.0.0" 31 | }) 32 | 33 | // Add script for checking 34 | packageJSON.scripts = Object.assign(packageJSON.scripts, { 35 | "check": "svelte-check --tsconfig ./tsconfig.json" 36 | }) 37 | 38 | // Write the package JSON 39 | fs.writeFileSync(path.join(projectRoot, "package.json"), JSON.stringify(packageJSON, null, " ")) 40 | 41 | // mv src/main.js to main.ts - note, we need to edit rollup.config.js for this too 42 | const beforeMainJSPath = path.join(projectRoot, "src", "main.js") 43 | const afterMainTSPath = path.join(projectRoot, "src", "main.ts") 44 | fs.renameSync(beforeMainJSPath, afterMainTSPath) 45 | 46 | // Switch the app.svelte file to use TS 47 | const appSveltePath = path.join(projectRoot, "src", "App.svelte") 48 | let appFile = fs.readFileSync(appSveltePath, "utf8") 49 | appFile = appFile.replace(" 29 | 30 | 31 | {#if currCell} 32 | 33 | 34 | 35 | {/if} 36 | 37 |

Standalone Table/Spreadsheet front end

38 | 39 |

This is a spreadsheet front end only. You need to implement calcs yourself. You also need to supply a 2D array of cell values & formats. This REPL has an example of all that.

40 | 41 |

Try dbl clicking (or hit Enter/F2) on a cell to edit. Or select some with mouse or keyboard.

42 |

The buttons show how easy it is to format a cell or display something other than the raw cell value eg a currency.

43 | 44 |

Features

45 | 83 |

Usage

84 |

Needs only 3 params - config, data (2D array) and a uid.

85 |

Two optional params - title (useful when displaying multiple Tables) and allowedActions (see above) - default is all allowed

86 |

defaultGridConfig is the default config. It contains row & column initial configs sizings. It's self explanatory - see utils.js

87 |

data[ ][ ] is a 2D array of cell object. Each cell object looks like 88 |

 89 |  let cell = {'{'}
 90 |     value:'', // raw string. Often what is entered by the user.
 91 |     display:'', // what is displayed often isn't the same as the value. E.G. formulas, 12=>$12.00, -12=>($12.00). It is the parents responsibility to populate this
 92 |     result:'', // the result of a formula or just the value as a string/number
 93 |     format:JSON.parse(JSON.stringify(defaultCellFormat)),
 94 |  };	
 95 | 	
96 | Each cell has its' own format. The format object looks like - 97 |
 98 |  const defaultCellFormat = {'{'}
 99 |   "italics":  0,
100 |   "bold":     0,
101 |   "underline":0,
102 |   "fontsize": 13,
103 |   "align":    "left",
104 |   "colour":   "#888",
105 |   "background": "#fff",
106 |   "border":   [false,false,false,false],				//	TLBR
107 |   "readonly": false,
108 |    displayFormat:'NUMBER2',							//	DATE,TIME, DURATION, CURRENCY2, CURRENCY, TEXT, NUMBER, NUMBER2
109 | }
110 | 
111 | Again, it's self explanatory, and straightforward to extend. 112 | 113 |

Notes

114 |

In production uncomment the .focus() in onMount() of Table.svelte. It's highly irritating to keep having the focus ripped away when testing in this REPL.

115 | -------------------------------------------------------------------------------- /src/Table.svelte: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keithj2780/svelte-spreadsheet-frontend/0fcc3078d2ff6a96f4a47a2867cec34d2a27ff2e/src/Table.svelte -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | import App from './App.svelte'; 2 | 3 | var app = new App({ 4 | target: document.body 5 | }); 6 | 7 | export default app; -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/keithj2780/svelte-spreadsheet-frontend/0fcc3078d2ff6a96f4a47a2867cec34d2a27ff2e/src/utils.js --------------------------------------------------------------------------------