├── .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 |
13 | Cells are editable. F2 or = or Enter or just type alpha-numerics, or DblClick
14 | Cells each have their own format
15 | Each cell supports attributes for borders x 4, italics, bold, font-size, bg & fg colours. Other attributes can easily be added.
16 | Read Only cells supported
17 | Keyboard nav using Home,End, Arrows
18 | Ctrl+nav key moves to next full/empty cell boundary
19 | Select cells with mouse or shift+nav keys
20 | Tab/BackTab moves through selected cells
21 | Supports 3 cell data values... just like a spreadsheet.
22 |
23 | cell.value is the raw content that the user enters
24 | cell.result is the result of any calc you may implement
25 | cell.display is what gets displayed. So setting cell.value will show nothing - you need to do a calc and populate cell.result/display or just copy cell.value to cell.display. Or make your own Formatter that takes cell.value/result and puts e.g. a currency/date string into cell.display
26 |
27 |
28 |
29 | Row/Col select with mouse (+shift for multiple)
30 | Row/Col resize with mouse. (Can be disabled in config)
31 | ^A selects all, so does click at top left
32 | Del deletes selected cells
33 | Rows/Cols can be added dynamically. data[ ] [ ] must be extended too!
34 | Copy/del/paste ^C ^X ^V using clipboard. (Some caveats apply!)
35 | Navigation scrolls the newly selected cell into view
36 | Edit of cell is highly visible
37 | Various user actions can be allowed/denied at the Table level. See allowedActions="EDIT RESIZE FORMAT DELETE COPY PASTE NAVIGATE"
38 | Only 3 events that are dispatched are
39 |
40 | onselchange(selectedCells) - when the user navigates somewhere
41 | startedit(selectedCells) - before the user edits a cell
42 | onendedit(selectedCells) - when the user changes a cells value
43 |
44 | Adding more for e.g. row/col resize would be straightforward
45 | Supports lots of row/cols with scrolling. Only limited by DOM and memory
46 | Compact data requirements. Config & Data are easily JSONable.
47 | Multiple Tables can be in DOM at same time
48 | No dependencies - approx 1100 LOC inc styling
49 |
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 | {data[currCell.row][currCell.col].format.bold = ! data[currCell.row][currCell.col].format.bold}}>Toggle Bold
33 | data[currCell.row][currCell.col].format.fontsize++}>Font+
34 | data[currCell.row][currCell.col].display='$'+data[currCell.row][currCell.col].value}>Currency Formatter
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 |
46 | Cells are editable. F2 or = or Enter or just type alpha-numerics, or DblClick
47 | Cells each have their own format
48 | Each cell supports attributes for borders x 4, italics, bold, font-size, bg & fg colours. Other attributes can easily be added.
49 | Read Only cells supported
50 | Keyboard nav using Home,End, Arrows
51 | Ctrl+nav key moves to next full/empty cell boundary
52 | Select cells with mouse or shift+nav keys
53 | Tab/BackTab moves through selected cells
54 | Supports 3 cell data values... just like a spreadsheet.
55 |
56 | cell.value is the raw content that the user enters
57 | cell.result is the result of any calc you may implement
58 | cell.display is what gets displayed. So setting cell.value will show nothing - you need to do a calc and populate cell.result/display or just copy cell.value to cell.display. Or make your own Formatter that takes cell.value/result and puts e.g. a currency/date string into cell.display
59 |
60 |
61 |
62 | Row/Col select with mouse (+shift for multiple)
63 | Row/Col resize with mouse. (Can be disabled in config)
64 | ^A selects all, so does click at top left
65 | Del deletes selected cells
66 | Rows/Cols can be added dynamically. data[ ] [ ] must be extended too!
67 | Copy/del/paste ^C ^X ^V using clipboard. (Some caveats apply!)
68 | Navigation scrolls the newly selected cell into view
69 | Edit of cell is highly visible
70 | Various user actions can be allowed/denied at the Table level. See allowedActions="EDIT RESIZE FORMAT DELETE COPY PASTE NAVIGATE"
71 | Only 3 events that are dispatched are
72 |
73 | onselchange(selectedCells) - when the user navigates somewhere
74 | startedit(selectedCells) - before the user edits a cell
75 | onendedit(selectedCells) - when the user changes a cells value
76 |
77 | Adding more for e.g. row/col resize would be straightforward
78 | Supports lots of row/cols with scrolling. Only limited by DOM and memory
79 | Compact data requirements. Config & Data are easily JSONable.
80 | Multiple Tables can be in DOM at same time
81 | No dependencies - approx 1100 LOC inc styling
82 |
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
--------------------------------------------------------------------------------