(name: string, value?: T, options?: UseBroadcastOptions): {
189 | state: T;
190 | send: (value: T) => void;
191 | subscribe: (callback: (e: T) => void) => () => void;
192 | };
193 | ```
194 |
195 | #### Parameters
196 |
197 | ##### name
198 |
199 | Type: `string`
200 |
201 | The name of the channel to use.
202 |
203 | ##### value
204 |
205 | Type: `T` (default: `undefined`)
206 |
207 | The initial value of the channel.
208 |
209 | ##### options
210 |
211 | Type: `UseBroadcastOptions` (default: `{}`)
212 |
213 | The options of the hook.
214 |
215 | ##### options.subscribe
216 |
217 | Type: `boolean | undefined` (default: `undefined`)
218 |
219 | If true, the hook will not re-render the component when the channel receive a new value but will call the `subscribe` callback.
220 |
221 | #### Return
222 |
223 | ##### state
224 |
225 | Type: `T`
226 |
227 | The current value of the channel.
228 |
229 | ##### send
230 |
231 | Type: `(value: T) => void`
232 |
233 | Send a new value to the channel.
234 |
235 | ##### subscribe
236 |
237 | Type: `(callback: (e: T) => void) => () => void`
238 |
239 | Subscribe to the channel. The callback will be called when the channel receive a new value and when the options.subscribe is set to true.
240 |
241 | ## What data can I send?
242 |
243 | You can send any of the supported types by the structured clone algorithm and `JSON.stringify` like :
244 |
245 | - `String`
246 | - `Boolean`
247 | - `Number`
248 | - `Array`
249 | - `Object`
250 | - `Date`
251 | - `...`
252 |
253 | In short, you cannot send :
254 |
255 | - `Function`
256 | - `Dom Element`
257 | - `BigInt` (This is only unsupported by `JSON.stringify`, so if you set `skipSerialization=true`, `BigInt`'s will work)
258 | - And some other types
259 |
260 | See the [MDN documentation](https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm) for more information. However, if you need to, you could use `partialize` to convert an unsupported type to a string and convert it back on the other end by providing a `merge` function.
261 |
262 | ## License
263 |
264 | MIT
265 |
--------------------------------------------------------------------------------
/babel.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "presets": [
3 | [
4 | "@babel/preset-env",
5 | {
6 | "targets": {
7 | "node": "current"
8 | }
9 | }
10 | ],
11 | [
12 | "@babel/preset-react",
13 | {
14 | "runtime": "automatic"
15 | }
16 | ],
17 | "@babel/preset-typescript"
18 | ]
19 | }
20 |
--------------------------------------------------------------------------------
/example/.eslintrc.cjs:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | env: { browser: true, es2020: true },
3 | extends: [
4 | 'eslint:recommended',
5 | 'plugin:@typescript-eslint/recommended',
6 | 'plugin:react-hooks/recommended',
7 | ],
8 | parser: '@typescript-eslint/parser',
9 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' },
10 | plugins: ['react-refresh'],
11 | rules: {
12 | 'react-refresh/only-export-components': 'warn',
13 | },
14 | }
15 |
--------------------------------------------------------------------------------
/example/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 |
15 | # Editor directories and files
16 | .vscode/*
17 | !.vscode/extensions.json
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/example/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | use-broadcast-ts with Zustand
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/example/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "use-zustand",
3 | "version": "0.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "use-zustand",
9 | "version": "0.0.0",
10 | "dependencies": {
11 | "react": "^18.2.0",
12 | "react-dom": "^18.2.0",
13 | "use-broadcast-ts": "^1.8.0",
14 | "zustand": "^5.0.0"
15 | },
16 | "devDependencies": {
17 | "@types/react": "^18.0.37",
18 | "@types/react-dom": "^18.0.11",
19 | "@typescript-eslint/eslint-plugin": "^5.59.0",
20 | "@typescript-eslint/parser": "^5.59.0",
21 | "@vitejs/plugin-react-swc": "^3.0.0",
22 | "autoprefixer": "^10.4.14",
23 | "daisyui": "^4.6.0",
24 | "eslint": "^8.38.0",
25 | "eslint-plugin-react-hooks": "^4.6.0",
26 | "eslint-plugin-react-refresh": "^0.3.4",
27 | "postcss": "^8.4.24",
28 | "tailwindcss": "^3.4.1",
29 | "typescript": "^5.0.2",
30 | "vite": "^4.3.9"
31 | }
32 | },
33 | "..": {
34 | "name": "use-broadcast-ts",
35 | "version": "1.8.0",
36 | "extraneous": true,
37 | "license": "MIT",
38 | "devDependencies": {
39 | "@babel/core": "7.21.4",
40 | "@babel/plugin-proposal-class-properties": "^7.18.6",
41 | "@babel/plugin-transform-modules-commonjs": "7.21.2",
42 | "@babel/plugin-transform-parameters": "7.21.3",
43 | "@babel/plugin-transform-runtime": "7.21.4",
44 | "@babel/plugin-transform-template-literals": "7.18.9",
45 | "@babel/preset-env": "^7.21.4",
46 | "@babel/preset-react": "^7.18.6",
47 | "@babel/preset-typescript": "^7.21.4",
48 | "@rollup/plugin-babel": "^6.0.3",
49 | "@rollup/plugin-node-resolve": "^15.0.2",
50 | "@testing-library/jest-dom": "^5.16.5",
51 | "@testing-library/react": "^14.0.0",
52 | "@types/jest": "^29.5.1",
53 | "@types/node": "^18.15.13",
54 | "@types/react": "^18.0.37",
55 | "@types/react-dom": "^18.0.11",
56 | "@types/react-test-renderer": "^18.0.0",
57 | "@typescript-eslint/eslint-plugin": "^5.59.0",
58 | "@typescript-eslint/parser": "^5.59.0",
59 | "babel-jest": "^29.5.0",
60 | "babel-loader": "^9.1.2",
61 | "babel-plugin-dynamic-import-node": "^2.3.3",
62 | "husky": "^8.0.3",
63 | "jest": "^29.5.0",
64 | "jest-environment-jsdom": "^29.5.0",
65 | "lint-staged": "^13.2.1",
66 | "prettier": "^2.8.7",
67 | "react": "^18.2.0",
68 | "react-dom": "^18.2.0",
69 | "react-test-renderer": "^18.2.0",
70 | "rollup": "^3.20.7",
71 | "typescript": "^5.0.4"
72 | },
73 | "optionalDependencies": {
74 | "react": ">=18.0",
75 | "zustand": "^4.0.0 || ^5.0.0"
76 | }
77 | },
78 | "node_modules/@alloc/quick-lru": {
79 | "version": "5.2.0",
80 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
81 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
82 | "dev": true,
83 | "engines": {
84 | "node": ">=10"
85 | },
86 | "funding": {
87 | "url": "https://github.com/sponsors/sindresorhus"
88 | }
89 | },
90 | "node_modules/@esbuild/android-arm": {
91 | "version": "0.17.19",
92 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
93 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
94 | "cpu": [
95 | "arm"
96 | ],
97 | "dev": true,
98 | "optional": true,
99 | "os": [
100 | "android"
101 | ],
102 | "engines": {
103 | "node": ">=12"
104 | }
105 | },
106 | "node_modules/@esbuild/android-arm64": {
107 | "version": "0.17.19",
108 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
109 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
110 | "cpu": [
111 | "arm64"
112 | ],
113 | "dev": true,
114 | "optional": true,
115 | "os": [
116 | "android"
117 | ],
118 | "engines": {
119 | "node": ">=12"
120 | }
121 | },
122 | "node_modules/@esbuild/android-x64": {
123 | "version": "0.17.19",
124 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
125 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
126 | "cpu": [
127 | "x64"
128 | ],
129 | "dev": true,
130 | "optional": true,
131 | "os": [
132 | "android"
133 | ],
134 | "engines": {
135 | "node": ">=12"
136 | }
137 | },
138 | "node_modules/@esbuild/darwin-arm64": {
139 | "version": "0.17.19",
140 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
141 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
142 | "cpu": [
143 | "arm64"
144 | ],
145 | "dev": true,
146 | "optional": true,
147 | "os": [
148 | "darwin"
149 | ],
150 | "engines": {
151 | "node": ">=12"
152 | }
153 | },
154 | "node_modules/@esbuild/darwin-x64": {
155 | "version": "0.17.19",
156 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
157 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
158 | "cpu": [
159 | "x64"
160 | ],
161 | "dev": true,
162 | "optional": true,
163 | "os": [
164 | "darwin"
165 | ],
166 | "engines": {
167 | "node": ">=12"
168 | }
169 | },
170 | "node_modules/@esbuild/freebsd-arm64": {
171 | "version": "0.17.19",
172 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
173 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
174 | "cpu": [
175 | "arm64"
176 | ],
177 | "dev": true,
178 | "optional": true,
179 | "os": [
180 | "freebsd"
181 | ],
182 | "engines": {
183 | "node": ">=12"
184 | }
185 | },
186 | "node_modules/@esbuild/freebsd-x64": {
187 | "version": "0.17.19",
188 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
189 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
190 | "cpu": [
191 | "x64"
192 | ],
193 | "dev": true,
194 | "optional": true,
195 | "os": [
196 | "freebsd"
197 | ],
198 | "engines": {
199 | "node": ">=12"
200 | }
201 | },
202 | "node_modules/@esbuild/linux-arm": {
203 | "version": "0.17.19",
204 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
205 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
206 | "cpu": [
207 | "arm"
208 | ],
209 | "dev": true,
210 | "optional": true,
211 | "os": [
212 | "linux"
213 | ],
214 | "engines": {
215 | "node": ">=12"
216 | }
217 | },
218 | "node_modules/@esbuild/linux-arm64": {
219 | "version": "0.17.19",
220 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
221 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
222 | "cpu": [
223 | "arm64"
224 | ],
225 | "dev": true,
226 | "optional": true,
227 | "os": [
228 | "linux"
229 | ],
230 | "engines": {
231 | "node": ">=12"
232 | }
233 | },
234 | "node_modules/@esbuild/linux-ia32": {
235 | "version": "0.17.19",
236 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
237 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
238 | "cpu": [
239 | "ia32"
240 | ],
241 | "dev": true,
242 | "optional": true,
243 | "os": [
244 | "linux"
245 | ],
246 | "engines": {
247 | "node": ">=12"
248 | }
249 | },
250 | "node_modules/@esbuild/linux-loong64": {
251 | "version": "0.17.19",
252 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
253 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
254 | "cpu": [
255 | "loong64"
256 | ],
257 | "dev": true,
258 | "optional": true,
259 | "os": [
260 | "linux"
261 | ],
262 | "engines": {
263 | "node": ">=12"
264 | }
265 | },
266 | "node_modules/@esbuild/linux-mips64el": {
267 | "version": "0.17.19",
268 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
269 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
270 | "cpu": [
271 | "mips64el"
272 | ],
273 | "dev": true,
274 | "optional": true,
275 | "os": [
276 | "linux"
277 | ],
278 | "engines": {
279 | "node": ">=12"
280 | }
281 | },
282 | "node_modules/@esbuild/linux-ppc64": {
283 | "version": "0.17.19",
284 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
285 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
286 | "cpu": [
287 | "ppc64"
288 | ],
289 | "dev": true,
290 | "optional": true,
291 | "os": [
292 | "linux"
293 | ],
294 | "engines": {
295 | "node": ">=12"
296 | }
297 | },
298 | "node_modules/@esbuild/linux-riscv64": {
299 | "version": "0.17.19",
300 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
301 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
302 | "cpu": [
303 | "riscv64"
304 | ],
305 | "dev": true,
306 | "optional": true,
307 | "os": [
308 | "linux"
309 | ],
310 | "engines": {
311 | "node": ">=12"
312 | }
313 | },
314 | "node_modules/@esbuild/linux-s390x": {
315 | "version": "0.17.19",
316 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
317 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
318 | "cpu": [
319 | "s390x"
320 | ],
321 | "dev": true,
322 | "optional": true,
323 | "os": [
324 | "linux"
325 | ],
326 | "engines": {
327 | "node": ">=12"
328 | }
329 | },
330 | "node_modules/@esbuild/linux-x64": {
331 | "version": "0.17.19",
332 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
333 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
334 | "cpu": [
335 | "x64"
336 | ],
337 | "dev": true,
338 | "optional": true,
339 | "os": [
340 | "linux"
341 | ],
342 | "engines": {
343 | "node": ">=12"
344 | }
345 | },
346 | "node_modules/@esbuild/netbsd-x64": {
347 | "version": "0.17.19",
348 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
349 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
350 | "cpu": [
351 | "x64"
352 | ],
353 | "dev": true,
354 | "optional": true,
355 | "os": [
356 | "netbsd"
357 | ],
358 | "engines": {
359 | "node": ">=12"
360 | }
361 | },
362 | "node_modules/@esbuild/openbsd-x64": {
363 | "version": "0.17.19",
364 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
365 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
366 | "cpu": [
367 | "x64"
368 | ],
369 | "dev": true,
370 | "optional": true,
371 | "os": [
372 | "openbsd"
373 | ],
374 | "engines": {
375 | "node": ">=12"
376 | }
377 | },
378 | "node_modules/@esbuild/sunos-x64": {
379 | "version": "0.17.19",
380 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
381 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
382 | "cpu": [
383 | "x64"
384 | ],
385 | "dev": true,
386 | "optional": true,
387 | "os": [
388 | "sunos"
389 | ],
390 | "engines": {
391 | "node": ">=12"
392 | }
393 | },
394 | "node_modules/@esbuild/win32-arm64": {
395 | "version": "0.17.19",
396 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
397 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
398 | "cpu": [
399 | "arm64"
400 | ],
401 | "dev": true,
402 | "optional": true,
403 | "os": [
404 | "win32"
405 | ],
406 | "engines": {
407 | "node": ">=12"
408 | }
409 | },
410 | "node_modules/@esbuild/win32-ia32": {
411 | "version": "0.17.19",
412 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
413 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
414 | "cpu": [
415 | "ia32"
416 | ],
417 | "dev": true,
418 | "optional": true,
419 | "os": [
420 | "win32"
421 | ],
422 | "engines": {
423 | "node": ">=12"
424 | }
425 | },
426 | "node_modules/@esbuild/win32-x64": {
427 | "version": "0.17.19",
428 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
429 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
430 | "cpu": [
431 | "x64"
432 | ],
433 | "dev": true,
434 | "optional": true,
435 | "os": [
436 | "win32"
437 | ],
438 | "engines": {
439 | "node": ">=12"
440 | }
441 | },
442 | "node_modules/@eslint-community/eslint-utils": {
443 | "version": "4.4.0",
444 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz",
445 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==",
446 | "dev": true,
447 | "dependencies": {
448 | "eslint-visitor-keys": "^3.3.0"
449 | },
450 | "engines": {
451 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
452 | },
453 | "peerDependencies": {
454 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
455 | }
456 | },
457 | "node_modules/@eslint-community/regexpp": {
458 | "version": "4.5.1",
459 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.5.1.tgz",
460 | "integrity": "sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==",
461 | "dev": true,
462 | "engines": {
463 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
464 | }
465 | },
466 | "node_modules/@eslint/eslintrc": {
467 | "version": "2.0.3",
468 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.0.3.tgz",
469 | "integrity": "sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==",
470 | "dev": true,
471 | "dependencies": {
472 | "ajv": "^6.12.4",
473 | "debug": "^4.3.2",
474 | "espree": "^9.5.2",
475 | "globals": "^13.19.0",
476 | "ignore": "^5.2.0",
477 | "import-fresh": "^3.2.1",
478 | "js-yaml": "^4.1.0",
479 | "minimatch": "^3.1.2",
480 | "strip-json-comments": "^3.1.1"
481 | },
482 | "engines": {
483 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
484 | },
485 | "funding": {
486 | "url": "https://opencollective.com/eslint"
487 | }
488 | },
489 | "node_modules/@eslint/js": {
490 | "version": "8.42.0",
491 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.42.0.tgz",
492 | "integrity": "sha512-6SWlXpWU5AvId8Ac7zjzmIOqMOba/JWY8XZ4A7q7Gn1Vlfg/SFFIlrtHXt9nPn4op9ZPAkl91Jao+QQv3r/ukw==",
493 | "dev": true,
494 | "engines": {
495 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
496 | }
497 | },
498 | "node_modules/@humanwhocodes/config-array": {
499 | "version": "0.11.10",
500 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.10.tgz",
501 | "integrity": "sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ==",
502 | "dev": true,
503 | "dependencies": {
504 | "@humanwhocodes/object-schema": "^1.2.1",
505 | "debug": "^4.1.1",
506 | "minimatch": "^3.0.5"
507 | },
508 | "engines": {
509 | "node": ">=10.10.0"
510 | }
511 | },
512 | "node_modules/@humanwhocodes/module-importer": {
513 | "version": "1.0.1",
514 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
515 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
516 | "dev": true,
517 | "engines": {
518 | "node": ">=12.22"
519 | },
520 | "funding": {
521 | "type": "github",
522 | "url": "https://github.com/sponsors/nzakas"
523 | }
524 | },
525 | "node_modules/@humanwhocodes/object-schema": {
526 | "version": "1.2.1",
527 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz",
528 | "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==",
529 | "dev": true
530 | },
531 | "node_modules/@isaacs/cliui": {
532 | "version": "8.0.2",
533 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
534 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
535 | "dev": true,
536 | "dependencies": {
537 | "string-width": "^5.1.2",
538 | "string-width-cjs": "npm:string-width@^4.2.0",
539 | "strip-ansi": "^7.0.1",
540 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
541 | "wrap-ansi": "^8.1.0",
542 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
543 | },
544 | "engines": {
545 | "node": ">=12"
546 | }
547 | },
548 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": {
549 | "version": "6.0.1",
550 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
551 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
552 | "dev": true,
553 | "engines": {
554 | "node": ">=12"
555 | },
556 | "funding": {
557 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
558 | }
559 | },
560 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": {
561 | "version": "7.1.0",
562 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
563 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
564 | "dev": true,
565 | "dependencies": {
566 | "ansi-regex": "^6.0.1"
567 | },
568 | "engines": {
569 | "node": ">=12"
570 | },
571 | "funding": {
572 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
573 | }
574 | },
575 | "node_modules/@jridgewell/gen-mapping": {
576 | "version": "0.3.3",
577 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
578 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
579 | "dev": true,
580 | "dependencies": {
581 | "@jridgewell/set-array": "^1.0.1",
582 | "@jridgewell/sourcemap-codec": "^1.4.10",
583 | "@jridgewell/trace-mapping": "^0.3.9"
584 | },
585 | "engines": {
586 | "node": ">=6.0.0"
587 | }
588 | },
589 | "node_modules/@jridgewell/resolve-uri": {
590 | "version": "3.1.1",
591 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
592 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
593 | "dev": true,
594 | "engines": {
595 | "node": ">=6.0.0"
596 | }
597 | },
598 | "node_modules/@jridgewell/set-array": {
599 | "version": "1.1.2",
600 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
601 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
602 | "dev": true,
603 | "engines": {
604 | "node": ">=6.0.0"
605 | }
606 | },
607 | "node_modules/@jridgewell/sourcemap-codec": {
608 | "version": "1.4.15",
609 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
610 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
611 | "dev": true
612 | },
613 | "node_modules/@jridgewell/trace-mapping": {
614 | "version": "0.3.22",
615 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz",
616 | "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==",
617 | "dev": true,
618 | "dependencies": {
619 | "@jridgewell/resolve-uri": "^3.1.0",
620 | "@jridgewell/sourcemap-codec": "^1.4.14"
621 | }
622 | },
623 | "node_modules/@nodelib/fs.scandir": {
624 | "version": "2.1.5",
625 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
626 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
627 | "dev": true,
628 | "dependencies": {
629 | "@nodelib/fs.stat": "2.0.5",
630 | "run-parallel": "^1.1.9"
631 | },
632 | "engines": {
633 | "node": ">= 8"
634 | }
635 | },
636 | "node_modules/@nodelib/fs.stat": {
637 | "version": "2.0.5",
638 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
639 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
640 | "dev": true,
641 | "engines": {
642 | "node": ">= 8"
643 | }
644 | },
645 | "node_modules/@nodelib/fs.walk": {
646 | "version": "1.2.8",
647 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
648 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
649 | "dev": true,
650 | "dependencies": {
651 | "@nodelib/fs.scandir": "2.1.5",
652 | "fastq": "^1.6.0"
653 | },
654 | "engines": {
655 | "node": ">= 8"
656 | }
657 | },
658 | "node_modules/@pkgjs/parseargs": {
659 | "version": "0.11.0",
660 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
661 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
662 | "dev": true,
663 | "optional": true,
664 | "engines": {
665 | "node": ">=14"
666 | }
667 | },
668 | "node_modules/@swc/core": {
669 | "version": "1.3.62",
670 | "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.3.62.tgz",
671 | "integrity": "sha512-J58hWY+/G8vOr4J6ZH9hLg0lMSijZtqIIf4HofZezGog/pVX6sJyBJ40dZ1ploFkDIlWTWvJyqtpesBKS73gkQ==",
672 | "dev": true,
673 | "hasInstallScript": true,
674 | "engines": {
675 | "node": ">=10"
676 | },
677 | "funding": {
678 | "type": "opencollective",
679 | "url": "https://opencollective.com/swc"
680 | },
681 | "optionalDependencies": {
682 | "@swc/core-darwin-arm64": "1.3.62",
683 | "@swc/core-darwin-x64": "1.3.62",
684 | "@swc/core-linux-arm-gnueabihf": "1.3.62",
685 | "@swc/core-linux-arm64-gnu": "1.3.62",
686 | "@swc/core-linux-arm64-musl": "1.3.62",
687 | "@swc/core-linux-x64-gnu": "1.3.62",
688 | "@swc/core-linux-x64-musl": "1.3.62",
689 | "@swc/core-win32-arm64-msvc": "1.3.62",
690 | "@swc/core-win32-ia32-msvc": "1.3.62",
691 | "@swc/core-win32-x64-msvc": "1.3.62"
692 | },
693 | "peerDependencies": {
694 | "@swc/helpers": "^0.5.0"
695 | },
696 | "peerDependenciesMeta": {
697 | "@swc/helpers": {
698 | "optional": true
699 | }
700 | }
701 | },
702 | "node_modules/@swc/core-darwin-arm64": {
703 | "version": "1.3.62",
704 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.3.62.tgz",
705 | "integrity": "sha512-MmGilibITz68LEje6vJlKzc2gUUSgzvB3wGLSjEORikTNeM7P8jXVxE4A8fgZqDeudJUm9HVWrxCV+pHDSwXhA==",
706 | "cpu": [
707 | "arm64"
708 | ],
709 | "dev": true,
710 | "optional": true,
711 | "os": [
712 | "darwin"
713 | ],
714 | "engines": {
715 | "node": ">=10"
716 | }
717 | },
718 | "node_modules/@swc/core-darwin-x64": {
719 | "version": "1.3.62",
720 | "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.3.62.tgz",
721 | "integrity": "sha512-Xl93MMB3sCWVlYWuQIB+v6EQgzoiuQYK5tNt9lsHoIEVu2zLdkQjae+5FUHZb1VYqCXIiWcULFfVz0R4Sjb7JQ==",
722 | "cpu": [
723 | "x64"
724 | ],
725 | "dev": true,
726 | "optional": true,
727 | "os": [
728 | "darwin"
729 | ],
730 | "engines": {
731 | "node": ">=10"
732 | }
733 | },
734 | "node_modules/@swc/core-linux-arm-gnueabihf": {
735 | "version": "1.3.62",
736 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.3.62.tgz",
737 | "integrity": "sha512-nJsp6O7kCtAjTTMcIjVB0g5y1JNiYAa5q630eiwrnaHUusEFoANDdORI3Z9vXeikMkng+6yIv9/V8Rb093xLjQ==",
738 | "cpu": [
739 | "arm"
740 | ],
741 | "dev": true,
742 | "optional": true,
743 | "os": [
744 | "linux"
745 | ],
746 | "engines": {
747 | "node": ">=10"
748 | }
749 | },
750 | "node_modules/@swc/core-linux-arm64-gnu": {
751 | "version": "1.3.62",
752 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.3.62.tgz",
753 | "integrity": "sha512-XGsV93vpUAopDt5y6vPwbK1Nc/MlL55L77bAZUPIiosWD1cWWPHNtNSpriE6+I+JiMHe0pqtfS/SSTk6ZkFQVw==",
754 | "cpu": [
755 | "arm64"
756 | ],
757 | "dev": true,
758 | "optional": true,
759 | "os": [
760 | "linux"
761 | ],
762 | "engines": {
763 | "node": ">=10"
764 | }
765 | },
766 | "node_modules/@swc/core-linux-arm64-musl": {
767 | "version": "1.3.62",
768 | "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.3.62.tgz",
769 | "integrity": "sha512-ESUmJjSlTTkoBy9dMG49opcNn8BmviqStMhwyeD1G8XRnmRVCZZgoBOKdvCXmJhw8bQXDhZumeaTUB+OFUKVXg==",
770 | "cpu": [
771 | "arm64"
772 | ],
773 | "dev": true,
774 | "optional": true,
775 | "os": [
776 | "linux"
777 | ],
778 | "engines": {
779 | "node": ">=10"
780 | }
781 | },
782 | "node_modules/@swc/core-linux-x64-gnu": {
783 | "version": "1.3.62",
784 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.3.62.tgz",
785 | "integrity": "sha512-wnHJkt3ZBrax3SFnUHDcncG6mrSg9ZZjMhQV9Mc3JL1x1s1Gy9rGZCoBNnV/BUZWTemxIBcQbANRSDut/WO+9A==",
786 | "cpu": [
787 | "x64"
788 | ],
789 | "dev": true,
790 | "optional": true,
791 | "os": [
792 | "linux"
793 | ],
794 | "engines": {
795 | "node": ">=10"
796 | }
797 | },
798 | "node_modules/@swc/core-linux-x64-musl": {
799 | "version": "1.3.62",
800 | "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.3.62.tgz",
801 | "integrity": "sha512-9oRbuTC/VshB66Rgwi3pTq3sPxSTIb8k9L1vJjES+dDMKa29DAjPtWCXG/pyZ00ufpFZgkGEuAHH5uqUcr1JQg==",
802 | "cpu": [
803 | "x64"
804 | ],
805 | "dev": true,
806 | "optional": true,
807 | "os": [
808 | "linux"
809 | ],
810 | "engines": {
811 | "node": ">=10"
812 | }
813 | },
814 | "node_modules/@swc/core-win32-arm64-msvc": {
815 | "version": "1.3.62",
816 | "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.3.62.tgz",
817 | "integrity": "sha512-zv14vlF2VRrxS061XkfzGjCYnOrEo5glKJjLK5PwUKysIoVrx/L8nAbFxjkX5cObdlyoqo+ekelyBPAO+4bS0w==",
818 | "cpu": [
819 | "arm64"
820 | ],
821 | "dev": true,
822 | "optional": true,
823 | "os": [
824 | "win32"
825 | ],
826 | "engines": {
827 | "node": ">=10"
828 | }
829 | },
830 | "node_modules/@swc/core-win32-ia32-msvc": {
831 | "version": "1.3.62",
832 | "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.3.62.tgz",
833 | "integrity": "sha512-8MC/PZQSsOP2iA/81tAfNRqMWyEqTS/8zKUI67vPuLvpx6NAjRn3E9qBv7iFqH79iqZNzqSMo3awnLrKZyFbcw==",
834 | "cpu": [
835 | "ia32"
836 | ],
837 | "dev": true,
838 | "optional": true,
839 | "os": [
840 | "win32"
841 | ],
842 | "engines": {
843 | "node": ">=10"
844 | }
845 | },
846 | "node_modules/@swc/core-win32-x64-msvc": {
847 | "version": "1.3.62",
848 | "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.3.62.tgz",
849 | "integrity": "sha512-GJSmUJ95HKHZXAxiuPUmrcm/S3ivQvEzXhOZaIqYBIwUsm02vFZkClsV7eIKzWjso1t0+I/8MjrnUNaSWqh1rQ==",
850 | "cpu": [
851 | "x64"
852 | ],
853 | "dev": true,
854 | "optional": true,
855 | "os": [
856 | "win32"
857 | ],
858 | "engines": {
859 | "node": ">=10"
860 | }
861 | },
862 | "node_modules/@types/json-schema": {
863 | "version": "7.0.12",
864 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
865 | "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
866 | "dev": true
867 | },
868 | "node_modules/@types/prop-types": {
869 | "version": "15.7.5",
870 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz",
871 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==",
872 | "devOptional": true
873 | },
874 | "node_modules/@types/react": {
875 | "version": "18.2.9",
876 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.9.tgz",
877 | "integrity": "sha512-pL3JAesUkF7PEQGxh5XOwdXGV907te6m1/Qe1ERJLgomojS6Ne790QiA7GUl434JEkFA2aAaB6qJ5z4e1zJn/w==",
878 | "devOptional": true,
879 | "dependencies": {
880 | "@types/prop-types": "*",
881 | "@types/scheduler": "*",
882 | "csstype": "^3.0.2"
883 | }
884 | },
885 | "node_modules/@types/react-dom": {
886 | "version": "18.2.4",
887 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.4.tgz",
888 | "integrity": "sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw==",
889 | "dev": true,
890 | "dependencies": {
891 | "@types/react": "*"
892 | }
893 | },
894 | "node_modules/@types/scheduler": {
895 | "version": "0.16.3",
896 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz",
897 | "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==",
898 | "devOptional": true
899 | },
900 | "node_modules/@types/semver": {
901 | "version": "7.5.0",
902 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
903 | "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
904 | "dev": true
905 | },
906 | "node_modules/@typescript-eslint/eslint-plugin": {
907 | "version": "5.59.9",
908 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.59.9.tgz",
909 | "integrity": "sha512-4uQIBq1ffXd2YvF7MAvehWKW3zVv/w+mSfRAu+8cKbfj3nwzyqJLNcZJpQ/WZ1HLbJDiowwmQ6NO+63nCA+fqA==",
910 | "dev": true,
911 | "dependencies": {
912 | "@eslint-community/regexpp": "^4.4.0",
913 | "@typescript-eslint/scope-manager": "5.59.9",
914 | "@typescript-eslint/type-utils": "5.59.9",
915 | "@typescript-eslint/utils": "5.59.9",
916 | "debug": "^4.3.4",
917 | "grapheme-splitter": "^1.0.4",
918 | "ignore": "^5.2.0",
919 | "natural-compare-lite": "^1.4.0",
920 | "semver": "^7.3.7",
921 | "tsutils": "^3.21.0"
922 | },
923 | "engines": {
924 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
925 | },
926 | "funding": {
927 | "type": "opencollective",
928 | "url": "https://opencollective.com/typescript-eslint"
929 | },
930 | "peerDependencies": {
931 | "@typescript-eslint/parser": "^5.0.0",
932 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
933 | },
934 | "peerDependenciesMeta": {
935 | "typescript": {
936 | "optional": true
937 | }
938 | }
939 | },
940 | "node_modules/@typescript-eslint/parser": {
941 | "version": "5.59.9",
942 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.59.9.tgz",
943 | "integrity": "sha512-FsPkRvBtcLQ/eVK1ivDiNYBjn3TGJdXy2fhXX+rc7czWl4ARwnpArwbihSOHI2Peg9WbtGHrbThfBUkZZGTtvQ==",
944 | "dev": true,
945 | "dependencies": {
946 | "@typescript-eslint/scope-manager": "5.59.9",
947 | "@typescript-eslint/types": "5.59.9",
948 | "@typescript-eslint/typescript-estree": "5.59.9",
949 | "debug": "^4.3.4"
950 | },
951 | "engines": {
952 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
953 | },
954 | "funding": {
955 | "type": "opencollective",
956 | "url": "https://opencollective.com/typescript-eslint"
957 | },
958 | "peerDependencies": {
959 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
960 | },
961 | "peerDependenciesMeta": {
962 | "typescript": {
963 | "optional": true
964 | }
965 | }
966 | },
967 | "node_modules/@typescript-eslint/scope-manager": {
968 | "version": "5.59.9",
969 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.59.9.tgz",
970 | "integrity": "sha512-8RA+E+w78z1+2dzvK/tGZ2cpGigBZ58VMEHDZtpE1v+LLjzrYGc8mMaTONSxKyEkz3IuXFM0IqYiGHlCsmlZxQ==",
971 | "dev": true,
972 | "dependencies": {
973 | "@typescript-eslint/types": "5.59.9",
974 | "@typescript-eslint/visitor-keys": "5.59.9"
975 | },
976 | "engines": {
977 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
978 | },
979 | "funding": {
980 | "type": "opencollective",
981 | "url": "https://opencollective.com/typescript-eslint"
982 | }
983 | },
984 | "node_modules/@typescript-eslint/type-utils": {
985 | "version": "5.59.9",
986 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.59.9.tgz",
987 | "integrity": "sha512-ksEsT0/mEHg9e3qZu98AlSrONAQtrSTljL3ow9CGej8eRo7pe+yaC/mvTjptp23Xo/xIf2mLZKC6KPv4Sji26Q==",
988 | "dev": true,
989 | "dependencies": {
990 | "@typescript-eslint/typescript-estree": "5.59.9",
991 | "@typescript-eslint/utils": "5.59.9",
992 | "debug": "^4.3.4",
993 | "tsutils": "^3.21.0"
994 | },
995 | "engines": {
996 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
997 | },
998 | "funding": {
999 | "type": "opencollective",
1000 | "url": "https://opencollective.com/typescript-eslint"
1001 | },
1002 | "peerDependencies": {
1003 | "eslint": "*"
1004 | },
1005 | "peerDependenciesMeta": {
1006 | "typescript": {
1007 | "optional": true
1008 | }
1009 | }
1010 | },
1011 | "node_modules/@typescript-eslint/types": {
1012 | "version": "5.59.9",
1013 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.59.9.tgz",
1014 | "integrity": "sha512-uW8H5NRgTVneSVTfiCVffBb8AbwWSKg7qcA4Ot3JI3MPCJGsB4Db4BhvAODIIYE5mNj7Q+VJkK7JxmRhk2Lyjw==",
1015 | "dev": true,
1016 | "engines": {
1017 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1018 | },
1019 | "funding": {
1020 | "type": "opencollective",
1021 | "url": "https://opencollective.com/typescript-eslint"
1022 | }
1023 | },
1024 | "node_modules/@typescript-eslint/typescript-estree": {
1025 | "version": "5.59.9",
1026 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.59.9.tgz",
1027 | "integrity": "sha512-pmM0/VQ7kUhd1QyIxgS+aRvMgw+ZljB3eDb+jYyp6d2bC0mQWLzUDF+DLwCTkQ3tlNyVsvZRXjFyV0LkU/aXjA==",
1028 | "dev": true,
1029 | "dependencies": {
1030 | "@typescript-eslint/types": "5.59.9",
1031 | "@typescript-eslint/visitor-keys": "5.59.9",
1032 | "debug": "^4.3.4",
1033 | "globby": "^11.1.0",
1034 | "is-glob": "^4.0.3",
1035 | "semver": "^7.3.7",
1036 | "tsutils": "^3.21.0"
1037 | },
1038 | "engines": {
1039 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1040 | },
1041 | "funding": {
1042 | "type": "opencollective",
1043 | "url": "https://opencollective.com/typescript-eslint"
1044 | },
1045 | "peerDependenciesMeta": {
1046 | "typescript": {
1047 | "optional": true
1048 | }
1049 | }
1050 | },
1051 | "node_modules/@typescript-eslint/utils": {
1052 | "version": "5.59.9",
1053 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.59.9.tgz",
1054 | "integrity": "sha512-1PuMYsju/38I5Ggblaeb98TOoUvjhRvLpLa1DoTOFaLWqaXl/1iQ1eGurTXgBY58NUdtfTXKP5xBq7q9NDaLKg==",
1055 | "dev": true,
1056 | "dependencies": {
1057 | "@eslint-community/eslint-utils": "^4.2.0",
1058 | "@types/json-schema": "^7.0.9",
1059 | "@types/semver": "^7.3.12",
1060 | "@typescript-eslint/scope-manager": "5.59.9",
1061 | "@typescript-eslint/types": "5.59.9",
1062 | "@typescript-eslint/typescript-estree": "5.59.9",
1063 | "eslint-scope": "^5.1.1",
1064 | "semver": "^7.3.7"
1065 | },
1066 | "engines": {
1067 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1068 | },
1069 | "funding": {
1070 | "type": "opencollective",
1071 | "url": "https://opencollective.com/typescript-eslint"
1072 | },
1073 | "peerDependencies": {
1074 | "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0"
1075 | }
1076 | },
1077 | "node_modules/@typescript-eslint/visitor-keys": {
1078 | "version": "5.59.9",
1079 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.59.9.tgz",
1080 | "integrity": "sha512-bT7s0td97KMaLwpEBckbzj/YohnvXtqbe2XgqNvTl6RJVakY5mvENOTPvw5u66nljfZxthESpDozs86U+oLY8Q==",
1081 | "dev": true,
1082 | "dependencies": {
1083 | "@typescript-eslint/types": "5.59.9",
1084 | "eslint-visitor-keys": "^3.3.0"
1085 | },
1086 | "engines": {
1087 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1088 | },
1089 | "funding": {
1090 | "type": "opencollective",
1091 | "url": "https://opencollective.com/typescript-eslint"
1092 | }
1093 | },
1094 | "node_modules/@vitejs/plugin-react-swc": {
1095 | "version": "3.3.2",
1096 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.3.2.tgz",
1097 | "integrity": "sha512-VJFWY5sfoZerQRvJrh518h3AcQt6f/yTuWn4/TRB+dqmYU0NX1qz7qM5Wfd+gOQqUzQW4gxKqKN3KpE/P3+zrA==",
1098 | "dev": true,
1099 | "dependencies": {
1100 | "@swc/core": "^1.3.61"
1101 | },
1102 | "peerDependencies": {
1103 | "vite": "^4"
1104 | }
1105 | },
1106 | "node_modules/acorn": {
1107 | "version": "8.8.2",
1108 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
1109 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
1110 | "dev": true,
1111 | "bin": {
1112 | "acorn": "bin/acorn"
1113 | },
1114 | "engines": {
1115 | "node": ">=0.4.0"
1116 | }
1117 | },
1118 | "node_modules/acorn-jsx": {
1119 | "version": "5.3.2",
1120 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
1121 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
1122 | "dev": true,
1123 | "peerDependencies": {
1124 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
1125 | }
1126 | },
1127 | "node_modules/ajv": {
1128 | "version": "6.12.6",
1129 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
1130 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
1131 | "dev": true,
1132 | "dependencies": {
1133 | "fast-deep-equal": "^3.1.1",
1134 | "fast-json-stable-stringify": "^2.0.0",
1135 | "json-schema-traverse": "^0.4.1",
1136 | "uri-js": "^4.2.2"
1137 | },
1138 | "funding": {
1139 | "type": "github",
1140 | "url": "https://github.com/sponsors/epoberezkin"
1141 | }
1142 | },
1143 | "node_modules/ansi-regex": {
1144 | "version": "5.0.1",
1145 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
1146 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
1147 | "dev": true,
1148 | "engines": {
1149 | "node": ">=8"
1150 | }
1151 | },
1152 | "node_modules/ansi-styles": {
1153 | "version": "4.3.0",
1154 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
1155 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
1156 | "dev": true,
1157 | "dependencies": {
1158 | "color-convert": "^2.0.1"
1159 | },
1160 | "engines": {
1161 | "node": ">=8"
1162 | },
1163 | "funding": {
1164 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1165 | }
1166 | },
1167 | "node_modules/any-promise": {
1168 | "version": "1.3.0",
1169 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1170 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1171 | "dev": true
1172 | },
1173 | "node_modules/anymatch": {
1174 | "version": "3.1.3",
1175 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1176 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1177 | "dev": true,
1178 | "dependencies": {
1179 | "normalize-path": "^3.0.0",
1180 | "picomatch": "^2.0.4"
1181 | },
1182 | "engines": {
1183 | "node": ">= 8"
1184 | }
1185 | },
1186 | "node_modules/arg": {
1187 | "version": "5.0.2",
1188 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
1189 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
1190 | "dev": true
1191 | },
1192 | "node_modules/argparse": {
1193 | "version": "2.0.1",
1194 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
1195 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
1196 | "dev": true
1197 | },
1198 | "node_modules/array-union": {
1199 | "version": "2.1.0",
1200 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
1201 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
1202 | "dev": true,
1203 | "engines": {
1204 | "node": ">=8"
1205 | }
1206 | },
1207 | "node_modules/autoprefixer": {
1208 | "version": "10.4.14",
1209 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
1210 | "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
1211 | "dev": true,
1212 | "funding": [
1213 | {
1214 | "type": "opencollective",
1215 | "url": "https://opencollective.com/postcss/"
1216 | },
1217 | {
1218 | "type": "tidelift",
1219 | "url": "https://tidelift.com/funding/github/npm/autoprefixer"
1220 | }
1221 | ],
1222 | "dependencies": {
1223 | "browserslist": "^4.21.5",
1224 | "caniuse-lite": "^1.0.30001464",
1225 | "fraction.js": "^4.2.0",
1226 | "normalize-range": "^0.1.2",
1227 | "picocolors": "^1.0.0",
1228 | "postcss-value-parser": "^4.2.0"
1229 | },
1230 | "bin": {
1231 | "autoprefixer": "bin/autoprefixer"
1232 | },
1233 | "engines": {
1234 | "node": "^10 || ^12 || >=14"
1235 | },
1236 | "peerDependencies": {
1237 | "postcss": "^8.1.0"
1238 | }
1239 | },
1240 | "node_modules/balanced-match": {
1241 | "version": "1.0.2",
1242 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1243 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
1244 | "dev": true
1245 | },
1246 | "node_modules/binary-extensions": {
1247 | "version": "2.2.0",
1248 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1249 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1250 | "dev": true,
1251 | "engines": {
1252 | "node": ">=8"
1253 | }
1254 | },
1255 | "node_modules/brace-expansion": {
1256 | "version": "1.1.11",
1257 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
1258 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
1259 | "dev": true,
1260 | "dependencies": {
1261 | "balanced-match": "^1.0.0",
1262 | "concat-map": "0.0.1"
1263 | }
1264 | },
1265 | "node_modules/braces": {
1266 | "version": "3.0.2",
1267 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1268 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1269 | "dev": true,
1270 | "dependencies": {
1271 | "fill-range": "^7.0.1"
1272 | },
1273 | "engines": {
1274 | "node": ">=8"
1275 | }
1276 | },
1277 | "node_modules/browserslist": {
1278 | "version": "4.21.7",
1279 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz",
1280 | "integrity": "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==",
1281 | "dev": true,
1282 | "funding": [
1283 | {
1284 | "type": "opencollective",
1285 | "url": "https://opencollective.com/browserslist"
1286 | },
1287 | {
1288 | "type": "tidelift",
1289 | "url": "https://tidelift.com/funding/github/npm/browserslist"
1290 | },
1291 | {
1292 | "type": "github",
1293 | "url": "https://github.com/sponsors/ai"
1294 | }
1295 | ],
1296 | "dependencies": {
1297 | "caniuse-lite": "^1.0.30001489",
1298 | "electron-to-chromium": "^1.4.411",
1299 | "node-releases": "^2.0.12",
1300 | "update-browserslist-db": "^1.0.11"
1301 | },
1302 | "bin": {
1303 | "browserslist": "cli.js"
1304 | },
1305 | "engines": {
1306 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
1307 | }
1308 | },
1309 | "node_modules/callsites": {
1310 | "version": "3.1.0",
1311 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
1312 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
1313 | "dev": true,
1314 | "engines": {
1315 | "node": ">=6"
1316 | }
1317 | },
1318 | "node_modules/camelcase-css": {
1319 | "version": "2.0.1",
1320 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
1321 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
1322 | "dev": true,
1323 | "engines": {
1324 | "node": ">= 6"
1325 | }
1326 | },
1327 | "node_modules/caniuse-lite": {
1328 | "version": "1.0.30001495",
1329 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz",
1330 | "integrity": "sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg==",
1331 | "dev": true,
1332 | "funding": [
1333 | {
1334 | "type": "opencollective",
1335 | "url": "https://opencollective.com/browserslist"
1336 | },
1337 | {
1338 | "type": "tidelift",
1339 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
1340 | },
1341 | {
1342 | "type": "github",
1343 | "url": "https://github.com/sponsors/ai"
1344 | }
1345 | ]
1346 | },
1347 | "node_modules/chalk": {
1348 | "version": "4.1.2",
1349 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
1350 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
1351 | "dev": true,
1352 | "dependencies": {
1353 | "ansi-styles": "^4.1.0",
1354 | "supports-color": "^7.1.0"
1355 | },
1356 | "engines": {
1357 | "node": ">=10"
1358 | },
1359 | "funding": {
1360 | "url": "https://github.com/chalk/chalk?sponsor=1"
1361 | }
1362 | },
1363 | "node_modules/chokidar": {
1364 | "version": "3.5.3",
1365 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1366 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
1367 | "dev": true,
1368 | "funding": [
1369 | {
1370 | "type": "individual",
1371 | "url": "https://paulmillr.com/funding/"
1372 | }
1373 | ],
1374 | "dependencies": {
1375 | "anymatch": "~3.1.2",
1376 | "braces": "~3.0.2",
1377 | "glob-parent": "~5.1.2",
1378 | "is-binary-path": "~2.1.0",
1379 | "is-glob": "~4.0.1",
1380 | "normalize-path": "~3.0.0",
1381 | "readdirp": "~3.6.0"
1382 | },
1383 | "engines": {
1384 | "node": ">= 8.10.0"
1385 | },
1386 | "optionalDependencies": {
1387 | "fsevents": "~2.3.2"
1388 | }
1389 | },
1390 | "node_modules/chokidar/node_modules/glob-parent": {
1391 | "version": "5.1.2",
1392 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1393 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1394 | "dev": true,
1395 | "dependencies": {
1396 | "is-glob": "^4.0.1"
1397 | },
1398 | "engines": {
1399 | "node": ">= 6"
1400 | }
1401 | },
1402 | "node_modules/color-convert": {
1403 | "version": "2.0.1",
1404 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1405 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1406 | "dev": true,
1407 | "dependencies": {
1408 | "color-name": "~1.1.4"
1409 | },
1410 | "engines": {
1411 | "node": ">=7.0.0"
1412 | }
1413 | },
1414 | "node_modules/color-name": {
1415 | "version": "1.1.4",
1416 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1417 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
1418 | "dev": true
1419 | },
1420 | "node_modules/commander": {
1421 | "version": "4.1.1",
1422 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1423 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1424 | "dev": true,
1425 | "engines": {
1426 | "node": ">= 6"
1427 | }
1428 | },
1429 | "node_modules/concat-map": {
1430 | "version": "0.0.1",
1431 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1432 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1433 | "dev": true
1434 | },
1435 | "node_modules/cross-spawn": {
1436 | "version": "7.0.3",
1437 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1438 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1439 | "dev": true,
1440 | "dependencies": {
1441 | "path-key": "^3.1.0",
1442 | "shebang-command": "^2.0.0",
1443 | "which": "^2.0.1"
1444 | },
1445 | "engines": {
1446 | "node": ">= 8"
1447 | }
1448 | },
1449 | "node_modules/css-selector-tokenizer": {
1450 | "version": "0.8.0",
1451 | "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz",
1452 | "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==",
1453 | "dev": true,
1454 | "dependencies": {
1455 | "cssesc": "^3.0.0",
1456 | "fastparse": "^1.1.2"
1457 | }
1458 | },
1459 | "node_modules/cssesc": {
1460 | "version": "3.0.0",
1461 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
1462 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
1463 | "dev": true,
1464 | "bin": {
1465 | "cssesc": "bin/cssesc"
1466 | },
1467 | "engines": {
1468 | "node": ">=4"
1469 | }
1470 | },
1471 | "node_modules/csstype": {
1472 | "version": "3.1.2",
1473 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
1474 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
1475 | "devOptional": true
1476 | },
1477 | "node_modules/culori": {
1478 | "version": "3.3.0",
1479 | "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz",
1480 | "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==",
1481 | "dev": true,
1482 | "engines": {
1483 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1484 | }
1485 | },
1486 | "node_modules/daisyui": {
1487 | "version": "4.6.0",
1488 | "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.6.0.tgz",
1489 | "integrity": "sha512-B5ZB/sczXpp4LMdo/SZrtYY/U2hq+Vr9I15QawuWZ0VwgtSAbuZpAZUftKVryEsPuv3BM0yVlBED0nAmtis/dw==",
1490 | "dev": true,
1491 | "dependencies": {
1492 | "css-selector-tokenizer": "^0.8",
1493 | "culori": "^3",
1494 | "picocolors": "^1",
1495 | "postcss-js": "^4"
1496 | },
1497 | "engines": {
1498 | "node": ">=16.9.0"
1499 | },
1500 | "funding": {
1501 | "type": "opencollective",
1502 | "url": "https://opencollective.com/daisyui"
1503 | }
1504 | },
1505 | "node_modules/debug": {
1506 | "version": "4.3.4",
1507 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1508 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1509 | "dev": true,
1510 | "dependencies": {
1511 | "ms": "2.1.2"
1512 | },
1513 | "engines": {
1514 | "node": ">=6.0"
1515 | },
1516 | "peerDependenciesMeta": {
1517 | "supports-color": {
1518 | "optional": true
1519 | }
1520 | }
1521 | },
1522 | "node_modules/deep-is": {
1523 | "version": "0.1.4",
1524 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
1525 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
1526 | "dev": true
1527 | },
1528 | "node_modules/didyoumean": {
1529 | "version": "1.2.2",
1530 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
1531 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
1532 | "dev": true
1533 | },
1534 | "node_modules/dir-glob": {
1535 | "version": "3.0.1",
1536 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
1537 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
1538 | "dev": true,
1539 | "dependencies": {
1540 | "path-type": "^4.0.0"
1541 | },
1542 | "engines": {
1543 | "node": ">=8"
1544 | }
1545 | },
1546 | "node_modules/dlv": {
1547 | "version": "1.1.3",
1548 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
1549 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
1550 | "dev": true
1551 | },
1552 | "node_modules/doctrine": {
1553 | "version": "3.0.0",
1554 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
1555 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
1556 | "dev": true,
1557 | "dependencies": {
1558 | "esutils": "^2.0.2"
1559 | },
1560 | "engines": {
1561 | "node": ">=6.0.0"
1562 | }
1563 | },
1564 | "node_modules/eastasianwidth": {
1565 | "version": "0.2.0",
1566 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1567 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
1568 | "dev": true
1569 | },
1570 | "node_modules/electron-to-chromium": {
1571 | "version": "1.4.425",
1572 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.425.tgz",
1573 | "integrity": "sha512-wv1NufHxu11zfDbY4fglYQApMswleE9FL/DSeyOyauVXDZ+Kco96JK/tPfBUaDqfRarYp2WH2hJ/5UnVywp9Jg==",
1574 | "dev": true
1575 | },
1576 | "node_modules/emoji-regex": {
1577 | "version": "9.2.2",
1578 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1579 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
1580 | "dev": true
1581 | },
1582 | "node_modules/esbuild": {
1583 | "version": "0.17.19",
1584 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
1585 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
1586 | "dev": true,
1587 | "hasInstallScript": true,
1588 | "bin": {
1589 | "esbuild": "bin/esbuild"
1590 | },
1591 | "engines": {
1592 | "node": ">=12"
1593 | },
1594 | "optionalDependencies": {
1595 | "@esbuild/android-arm": "0.17.19",
1596 | "@esbuild/android-arm64": "0.17.19",
1597 | "@esbuild/android-x64": "0.17.19",
1598 | "@esbuild/darwin-arm64": "0.17.19",
1599 | "@esbuild/darwin-x64": "0.17.19",
1600 | "@esbuild/freebsd-arm64": "0.17.19",
1601 | "@esbuild/freebsd-x64": "0.17.19",
1602 | "@esbuild/linux-arm": "0.17.19",
1603 | "@esbuild/linux-arm64": "0.17.19",
1604 | "@esbuild/linux-ia32": "0.17.19",
1605 | "@esbuild/linux-loong64": "0.17.19",
1606 | "@esbuild/linux-mips64el": "0.17.19",
1607 | "@esbuild/linux-ppc64": "0.17.19",
1608 | "@esbuild/linux-riscv64": "0.17.19",
1609 | "@esbuild/linux-s390x": "0.17.19",
1610 | "@esbuild/linux-x64": "0.17.19",
1611 | "@esbuild/netbsd-x64": "0.17.19",
1612 | "@esbuild/openbsd-x64": "0.17.19",
1613 | "@esbuild/sunos-x64": "0.17.19",
1614 | "@esbuild/win32-arm64": "0.17.19",
1615 | "@esbuild/win32-ia32": "0.17.19",
1616 | "@esbuild/win32-x64": "0.17.19"
1617 | }
1618 | },
1619 | "node_modules/escalade": {
1620 | "version": "3.1.1",
1621 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
1622 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
1623 | "dev": true,
1624 | "engines": {
1625 | "node": ">=6"
1626 | }
1627 | },
1628 | "node_modules/escape-string-regexp": {
1629 | "version": "4.0.0",
1630 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
1631 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
1632 | "dev": true,
1633 | "engines": {
1634 | "node": ">=10"
1635 | },
1636 | "funding": {
1637 | "url": "https://github.com/sponsors/sindresorhus"
1638 | }
1639 | },
1640 | "node_modules/eslint": {
1641 | "version": "8.42.0",
1642 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.42.0.tgz",
1643 | "integrity": "sha512-ulg9Ms6E1WPf67PHaEY4/6E2tEn5/f7FXGzr3t9cBMugOmf1INYvuUwwh1aXQN4MfJ6a5K2iNwP3w4AColvI9A==",
1644 | "dev": true,
1645 | "dependencies": {
1646 | "@eslint-community/eslint-utils": "^4.2.0",
1647 | "@eslint-community/regexpp": "^4.4.0",
1648 | "@eslint/eslintrc": "^2.0.3",
1649 | "@eslint/js": "8.42.0",
1650 | "@humanwhocodes/config-array": "^0.11.10",
1651 | "@humanwhocodes/module-importer": "^1.0.1",
1652 | "@nodelib/fs.walk": "^1.2.8",
1653 | "ajv": "^6.10.0",
1654 | "chalk": "^4.0.0",
1655 | "cross-spawn": "^7.0.2",
1656 | "debug": "^4.3.2",
1657 | "doctrine": "^3.0.0",
1658 | "escape-string-regexp": "^4.0.0",
1659 | "eslint-scope": "^7.2.0",
1660 | "eslint-visitor-keys": "^3.4.1",
1661 | "espree": "^9.5.2",
1662 | "esquery": "^1.4.2",
1663 | "esutils": "^2.0.2",
1664 | "fast-deep-equal": "^3.1.3",
1665 | "file-entry-cache": "^6.0.1",
1666 | "find-up": "^5.0.0",
1667 | "glob-parent": "^6.0.2",
1668 | "globals": "^13.19.0",
1669 | "graphemer": "^1.4.0",
1670 | "ignore": "^5.2.0",
1671 | "import-fresh": "^3.0.0",
1672 | "imurmurhash": "^0.1.4",
1673 | "is-glob": "^4.0.0",
1674 | "is-path-inside": "^3.0.3",
1675 | "js-yaml": "^4.1.0",
1676 | "json-stable-stringify-without-jsonify": "^1.0.1",
1677 | "levn": "^0.4.1",
1678 | "lodash.merge": "^4.6.2",
1679 | "minimatch": "^3.1.2",
1680 | "natural-compare": "^1.4.0",
1681 | "optionator": "^0.9.1",
1682 | "strip-ansi": "^6.0.1",
1683 | "strip-json-comments": "^3.1.0",
1684 | "text-table": "^0.2.0"
1685 | },
1686 | "bin": {
1687 | "eslint": "bin/eslint.js"
1688 | },
1689 | "engines": {
1690 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1691 | },
1692 | "funding": {
1693 | "url": "https://opencollective.com/eslint"
1694 | }
1695 | },
1696 | "node_modules/eslint-plugin-react-hooks": {
1697 | "version": "4.6.0",
1698 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz",
1699 | "integrity": "sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==",
1700 | "dev": true,
1701 | "engines": {
1702 | "node": ">=10"
1703 | },
1704 | "peerDependencies": {
1705 | "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0"
1706 | }
1707 | },
1708 | "node_modules/eslint-plugin-react-refresh": {
1709 | "version": "0.3.5",
1710 | "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.3.5.tgz",
1711 | "integrity": "sha512-61qNIsc7fo9Pp/mju0J83kzvLm0Bsayu7OQSLEoJxLDCBjIIyb87bkzufoOvdDxLkSlMfkF7UxomC4+eztUBSA==",
1712 | "dev": true,
1713 | "peerDependencies": {
1714 | "eslint": ">=7"
1715 | }
1716 | },
1717 | "node_modules/eslint-scope": {
1718 | "version": "5.1.1",
1719 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
1720 | "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
1721 | "dev": true,
1722 | "dependencies": {
1723 | "esrecurse": "^4.3.0",
1724 | "estraverse": "^4.1.1"
1725 | },
1726 | "engines": {
1727 | "node": ">=8.0.0"
1728 | }
1729 | },
1730 | "node_modules/eslint-visitor-keys": {
1731 | "version": "3.4.1",
1732 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz",
1733 | "integrity": "sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==",
1734 | "dev": true,
1735 | "engines": {
1736 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1737 | },
1738 | "funding": {
1739 | "url": "https://opencollective.com/eslint"
1740 | }
1741 | },
1742 | "node_modules/eslint/node_modules/eslint-scope": {
1743 | "version": "7.2.0",
1744 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.0.tgz",
1745 | "integrity": "sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==",
1746 | "dev": true,
1747 | "dependencies": {
1748 | "esrecurse": "^4.3.0",
1749 | "estraverse": "^5.2.0"
1750 | },
1751 | "engines": {
1752 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1753 | },
1754 | "funding": {
1755 | "url": "https://opencollective.com/eslint"
1756 | }
1757 | },
1758 | "node_modules/eslint/node_modules/estraverse": {
1759 | "version": "5.3.0",
1760 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1761 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1762 | "dev": true,
1763 | "engines": {
1764 | "node": ">=4.0"
1765 | }
1766 | },
1767 | "node_modules/espree": {
1768 | "version": "9.5.2",
1769 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.5.2.tgz",
1770 | "integrity": "sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==",
1771 | "dev": true,
1772 | "dependencies": {
1773 | "acorn": "^8.8.0",
1774 | "acorn-jsx": "^5.3.2",
1775 | "eslint-visitor-keys": "^3.4.1"
1776 | },
1777 | "engines": {
1778 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
1779 | },
1780 | "funding": {
1781 | "url": "https://opencollective.com/eslint"
1782 | }
1783 | },
1784 | "node_modules/esquery": {
1785 | "version": "1.5.0",
1786 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
1787 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==",
1788 | "dev": true,
1789 | "dependencies": {
1790 | "estraverse": "^5.1.0"
1791 | },
1792 | "engines": {
1793 | "node": ">=0.10"
1794 | }
1795 | },
1796 | "node_modules/esquery/node_modules/estraverse": {
1797 | "version": "5.3.0",
1798 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1799 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1800 | "dev": true,
1801 | "engines": {
1802 | "node": ">=4.0"
1803 | }
1804 | },
1805 | "node_modules/esrecurse": {
1806 | "version": "4.3.0",
1807 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
1808 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
1809 | "dev": true,
1810 | "dependencies": {
1811 | "estraverse": "^5.2.0"
1812 | },
1813 | "engines": {
1814 | "node": ">=4.0"
1815 | }
1816 | },
1817 | "node_modules/esrecurse/node_modules/estraverse": {
1818 | "version": "5.3.0",
1819 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
1820 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
1821 | "dev": true,
1822 | "engines": {
1823 | "node": ">=4.0"
1824 | }
1825 | },
1826 | "node_modules/estraverse": {
1827 | "version": "4.3.0",
1828 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
1829 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
1830 | "dev": true,
1831 | "engines": {
1832 | "node": ">=4.0"
1833 | }
1834 | },
1835 | "node_modules/esutils": {
1836 | "version": "2.0.3",
1837 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
1838 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
1839 | "dev": true,
1840 | "engines": {
1841 | "node": ">=0.10.0"
1842 | }
1843 | },
1844 | "node_modules/fast-deep-equal": {
1845 | "version": "3.1.3",
1846 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
1847 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
1848 | "dev": true
1849 | },
1850 | "node_modules/fast-glob": {
1851 | "version": "3.3.2",
1852 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
1853 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
1854 | "dev": true,
1855 | "dependencies": {
1856 | "@nodelib/fs.stat": "^2.0.2",
1857 | "@nodelib/fs.walk": "^1.2.3",
1858 | "glob-parent": "^5.1.2",
1859 | "merge2": "^1.3.0",
1860 | "micromatch": "^4.0.4"
1861 | },
1862 | "engines": {
1863 | "node": ">=8.6.0"
1864 | }
1865 | },
1866 | "node_modules/fast-glob/node_modules/glob-parent": {
1867 | "version": "5.1.2",
1868 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1869 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1870 | "dev": true,
1871 | "dependencies": {
1872 | "is-glob": "^4.0.1"
1873 | },
1874 | "engines": {
1875 | "node": ">= 6"
1876 | }
1877 | },
1878 | "node_modules/fast-json-stable-stringify": {
1879 | "version": "2.1.0",
1880 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
1881 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
1882 | "dev": true
1883 | },
1884 | "node_modules/fast-levenshtein": {
1885 | "version": "2.0.6",
1886 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
1887 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
1888 | "dev": true
1889 | },
1890 | "node_modules/fastparse": {
1891 | "version": "1.1.2",
1892 | "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
1893 | "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==",
1894 | "dev": true
1895 | },
1896 | "node_modules/fastq": {
1897 | "version": "1.15.0",
1898 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
1899 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
1900 | "dev": true,
1901 | "dependencies": {
1902 | "reusify": "^1.0.4"
1903 | }
1904 | },
1905 | "node_modules/file-entry-cache": {
1906 | "version": "6.0.1",
1907 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
1908 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
1909 | "dev": true,
1910 | "dependencies": {
1911 | "flat-cache": "^3.0.4"
1912 | },
1913 | "engines": {
1914 | "node": "^10.12.0 || >=12.0.0"
1915 | }
1916 | },
1917 | "node_modules/fill-range": {
1918 | "version": "7.0.1",
1919 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1920 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1921 | "dev": true,
1922 | "dependencies": {
1923 | "to-regex-range": "^5.0.1"
1924 | },
1925 | "engines": {
1926 | "node": ">=8"
1927 | }
1928 | },
1929 | "node_modules/find-up": {
1930 | "version": "5.0.0",
1931 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
1932 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
1933 | "dev": true,
1934 | "dependencies": {
1935 | "locate-path": "^6.0.0",
1936 | "path-exists": "^4.0.0"
1937 | },
1938 | "engines": {
1939 | "node": ">=10"
1940 | },
1941 | "funding": {
1942 | "url": "https://github.com/sponsors/sindresorhus"
1943 | }
1944 | },
1945 | "node_modules/flat-cache": {
1946 | "version": "3.0.4",
1947 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz",
1948 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==",
1949 | "dev": true,
1950 | "dependencies": {
1951 | "flatted": "^3.1.0",
1952 | "rimraf": "^3.0.2"
1953 | },
1954 | "engines": {
1955 | "node": "^10.12.0 || >=12.0.0"
1956 | }
1957 | },
1958 | "node_modules/flatted": {
1959 | "version": "3.2.7",
1960 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz",
1961 | "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==",
1962 | "dev": true
1963 | },
1964 | "node_modules/foreground-child": {
1965 | "version": "3.1.1",
1966 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
1967 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
1968 | "dev": true,
1969 | "dependencies": {
1970 | "cross-spawn": "^7.0.0",
1971 | "signal-exit": "^4.0.1"
1972 | },
1973 | "engines": {
1974 | "node": ">=14"
1975 | },
1976 | "funding": {
1977 | "url": "https://github.com/sponsors/isaacs"
1978 | }
1979 | },
1980 | "node_modules/fraction.js": {
1981 | "version": "4.2.0",
1982 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
1983 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
1984 | "dev": true,
1985 | "engines": {
1986 | "node": "*"
1987 | },
1988 | "funding": {
1989 | "type": "patreon",
1990 | "url": "https://www.patreon.com/infusion"
1991 | }
1992 | },
1993 | "node_modules/fs.realpath": {
1994 | "version": "1.0.0",
1995 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1996 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1997 | "dev": true
1998 | },
1999 | "node_modules/fsevents": {
2000 | "version": "2.3.2",
2001 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
2002 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
2003 | "dev": true,
2004 | "hasInstallScript": true,
2005 | "optional": true,
2006 | "os": [
2007 | "darwin"
2008 | ],
2009 | "engines": {
2010 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
2011 | }
2012 | },
2013 | "node_modules/function-bind": {
2014 | "version": "1.1.2",
2015 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz",
2016 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==",
2017 | "dev": true,
2018 | "funding": {
2019 | "url": "https://github.com/sponsors/ljharb"
2020 | }
2021 | },
2022 | "node_modules/glob": {
2023 | "version": "7.2.3",
2024 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2025 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2026 | "dev": true,
2027 | "dependencies": {
2028 | "fs.realpath": "^1.0.0",
2029 | "inflight": "^1.0.4",
2030 | "inherits": "2",
2031 | "minimatch": "^3.1.1",
2032 | "once": "^1.3.0",
2033 | "path-is-absolute": "^1.0.0"
2034 | },
2035 | "engines": {
2036 | "node": "*"
2037 | },
2038 | "funding": {
2039 | "url": "https://github.com/sponsors/isaacs"
2040 | }
2041 | },
2042 | "node_modules/glob-parent": {
2043 | "version": "6.0.2",
2044 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
2045 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
2046 | "dev": true,
2047 | "dependencies": {
2048 | "is-glob": "^4.0.3"
2049 | },
2050 | "engines": {
2051 | "node": ">=10.13.0"
2052 | }
2053 | },
2054 | "node_modules/globals": {
2055 | "version": "13.20.0",
2056 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.20.0.tgz",
2057 | "integrity": "sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==",
2058 | "dev": true,
2059 | "dependencies": {
2060 | "type-fest": "^0.20.2"
2061 | },
2062 | "engines": {
2063 | "node": ">=8"
2064 | },
2065 | "funding": {
2066 | "url": "https://github.com/sponsors/sindresorhus"
2067 | }
2068 | },
2069 | "node_modules/globby": {
2070 | "version": "11.1.0",
2071 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
2072 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
2073 | "dev": true,
2074 | "dependencies": {
2075 | "array-union": "^2.1.0",
2076 | "dir-glob": "^3.0.1",
2077 | "fast-glob": "^3.2.9",
2078 | "ignore": "^5.2.0",
2079 | "merge2": "^1.4.1",
2080 | "slash": "^3.0.0"
2081 | },
2082 | "engines": {
2083 | "node": ">=10"
2084 | },
2085 | "funding": {
2086 | "url": "https://github.com/sponsors/sindresorhus"
2087 | }
2088 | },
2089 | "node_modules/grapheme-splitter": {
2090 | "version": "1.0.4",
2091 | "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz",
2092 | "integrity": "sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==",
2093 | "dev": true
2094 | },
2095 | "node_modules/graphemer": {
2096 | "version": "1.4.0",
2097 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
2098 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==",
2099 | "dev": true
2100 | },
2101 | "node_modules/has-flag": {
2102 | "version": "4.0.0",
2103 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
2104 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
2105 | "dev": true,
2106 | "engines": {
2107 | "node": ">=8"
2108 | }
2109 | },
2110 | "node_modules/hasown": {
2111 | "version": "2.0.0",
2112 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz",
2113 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==",
2114 | "dev": true,
2115 | "dependencies": {
2116 | "function-bind": "^1.1.2"
2117 | },
2118 | "engines": {
2119 | "node": ">= 0.4"
2120 | }
2121 | },
2122 | "node_modules/ignore": {
2123 | "version": "5.2.4",
2124 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
2125 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
2126 | "dev": true,
2127 | "engines": {
2128 | "node": ">= 4"
2129 | }
2130 | },
2131 | "node_modules/import-fresh": {
2132 | "version": "3.3.0",
2133 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz",
2134 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==",
2135 | "dev": true,
2136 | "dependencies": {
2137 | "parent-module": "^1.0.0",
2138 | "resolve-from": "^4.0.0"
2139 | },
2140 | "engines": {
2141 | "node": ">=6"
2142 | },
2143 | "funding": {
2144 | "url": "https://github.com/sponsors/sindresorhus"
2145 | }
2146 | },
2147 | "node_modules/imurmurhash": {
2148 | "version": "0.1.4",
2149 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
2150 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
2151 | "dev": true,
2152 | "engines": {
2153 | "node": ">=0.8.19"
2154 | }
2155 | },
2156 | "node_modules/inflight": {
2157 | "version": "1.0.6",
2158 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
2159 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
2160 | "dev": true,
2161 | "dependencies": {
2162 | "once": "^1.3.0",
2163 | "wrappy": "1"
2164 | }
2165 | },
2166 | "node_modules/inherits": {
2167 | "version": "2.0.4",
2168 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
2169 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
2170 | "dev": true
2171 | },
2172 | "node_modules/is-binary-path": {
2173 | "version": "2.1.0",
2174 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
2175 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
2176 | "dev": true,
2177 | "dependencies": {
2178 | "binary-extensions": "^2.0.0"
2179 | },
2180 | "engines": {
2181 | "node": ">=8"
2182 | }
2183 | },
2184 | "node_modules/is-core-module": {
2185 | "version": "2.13.1",
2186 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
2187 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==",
2188 | "dev": true,
2189 | "dependencies": {
2190 | "hasown": "^2.0.0"
2191 | },
2192 | "funding": {
2193 | "url": "https://github.com/sponsors/ljharb"
2194 | }
2195 | },
2196 | "node_modules/is-extglob": {
2197 | "version": "2.1.1",
2198 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
2199 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
2200 | "dev": true,
2201 | "engines": {
2202 | "node": ">=0.10.0"
2203 | }
2204 | },
2205 | "node_modules/is-fullwidth-code-point": {
2206 | "version": "3.0.0",
2207 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
2208 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
2209 | "dev": true,
2210 | "engines": {
2211 | "node": ">=8"
2212 | }
2213 | },
2214 | "node_modules/is-glob": {
2215 | "version": "4.0.3",
2216 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
2217 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
2218 | "dev": true,
2219 | "dependencies": {
2220 | "is-extglob": "^2.1.1"
2221 | },
2222 | "engines": {
2223 | "node": ">=0.10.0"
2224 | }
2225 | },
2226 | "node_modules/is-number": {
2227 | "version": "7.0.0",
2228 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
2229 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
2230 | "dev": true,
2231 | "engines": {
2232 | "node": ">=0.12.0"
2233 | }
2234 | },
2235 | "node_modules/is-path-inside": {
2236 | "version": "3.0.3",
2237 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
2238 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
2239 | "dev": true,
2240 | "engines": {
2241 | "node": ">=8"
2242 | }
2243 | },
2244 | "node_modules/isexe": {
2245 | "version": "2.0.0",
2246 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
2247 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
2248 | "dev": true
2249 | },
2250 | "node_modules/jackspeak": {
2251 | "version": "2.3.6",
2252 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
2253 | "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
2254 | "dev": true,
2255 | "dependencies": {
2256 | "@isaacs/cliui": "^8.0.2"
2257 | },
2258 | "engines": {
2259 | "node": ">=14"
2260 | },
2261 | "funding": {
2262 | "url": "https://github.com/sponsors/isaacs"
2263 | },
2264 | "optionalDependencies": {
2265 | "@pkgjs/parseargs": "^0.11.0"
2266 | }
2267 | },
2268 | "node_modules/jiti": {
2269 | "version": "1.21.0",
2270 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz",
2271 | "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==",
2272 | "dev": true,
2273 | "bin": {
2274 | "jiti": "bin/jiti.js"
2275 | }
2276 | },
2277 | "node_modules/js-tokens": {
2278 | "version": "4.0.0",
2279 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
2280 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
2281 | },
2282 | "node_modules/js-yaml": {
2283 | "version": "4.1.0",
2284 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
2285 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==",
2286 | "dev": true,
2287 | "dependencies": {
2288 | "argparse": "^2.0.1"
2289 | },
2290 | "bin": {
2291 | "js-yaml": "bin/js-yaml.js"
2292 | }
2293 | },
2294 | "node_modules/json-schema-traverse": {
2295 | "version": "0.4.1",
2296 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
2297 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
2298 | "dev": true
2299 | },
2300 | "node_modules/json-stable-stringify-without-jsonify": {
2301 | "version": "1.0.1",
2302 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
2303 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
2304 | "dev": true
2305 | },
2306 | "node_modules/levn": {
2307 | "version": "0.4.1",
2308 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
2309 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
2310 | "dev": true,
2311 | "dependencies": {
2312 | "prelude-ls": "^1.2.1",
2313 | "type-check": "~0.4.0"
2314 | },
2315 | "engines": {
2316 | "node": ">= 0.8.0"
2317 | }
2318 | },
2319 | "node_modules/lilconfig": {
2320 | "version": "2.1.0",
2321 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
2322 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
2323 | "dev": true,
2324 | "engines": {
2325 | "node": ">=10"
2326 | }
2327 | },
2328 | "node_modules/lines-and-columns": {
2329 | "version": "1.2.4",
2330 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
2331 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
2332 | "dev": true
2333 | },
2334 | "node_modules/locate-path": {
2335 | "version": "6.0.0",
2336 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
2337 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
2338 | "dev": true,
2339 | "dependencies": {
2340 | "p-locate": "^5.0.0"
2341 | },
2342 | "engines": {
2343 | "node": ">=10"
2344 | },
2345 | "funding": {
2346 | "url": "https://github.com/sponsors/sindresorhus"
2347 | }
2348 | },
2349 | "node_modules/lodash.merge": {
2350 | "version": "4.6.2",
2351 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
2352 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
2353 | "dev": true
2354 | },
2355 | "node_modules/loose-envify": {
2356 | "version": "1.4.0",
2357 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
2358 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
2359 | "dependencies": {
2360 | "js-tokens": "^3.0.0 || ^4.0.0"
2361 | },
2362 | "bin": {
2363 | "loose-envify": "cli.js"
2364 | }
2365 | },
2366 | "node_modules/lru-cache": {
2367 | "version": "6.0.0",
2368 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2369 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2370 | "dev": true,
2371 | "dependencies": {
2372 | "yallist": "^4.0.0"
2373 | },
2374 | "engines": {
2375 | "node": ">=10"
2376 | }
2377 | },
2378 | "node_modules/merge2": {
2379 | "version": "1.4.1",
2380 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
2381 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
2382 | "dev": true,
2383 | "engines": {
2384 | "node": ">= 8"
2385 | }
2386 | },
2387 | "node_modules/micromatch": {
2388 | "version": "4.0.5",
2389 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
2390 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
2391 | "dev": true,
2392 | "dependencies": {
2393 | "braces": "^3.0.2",
2394 | "picomatch": "^2.3.1"
2395 | },
2396 | "engines": {
2397 | "node": ">=8.6"
2398 | }
2399 | },
2400 | "node_modules/minimatch": {
2401 | "version": "3.1.2",
2402 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2403 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2404 | "dev": true,
2405 | "dependencies": {
2406 | "brace-expansion": "^1.1.7"
2407 | },
2408 | "engines": {
2409 | "node": "*"
2410 | }
2411 | },
2412 | "node_modules/minipass": {
2413 | "version": "7.0.4",
2414 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
2415 | "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
2416 | "dev": true,
2417 | "engines": {
2418 | "node": ">=16 || 14 >=14.17"
2419 | }
2420 | },
2421 | "node_modules/ms": {
2422 | "version": "2.1.2",
2423 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
2424 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
2425 | "dev": true
2426 | },
2427 | "node_modules/mz": {
2428 | "version": "2.7.0",
2429 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
2430 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
2431 | "dev": true,
2432 | "dependencies": {
2433 | "any-promise": "^1.0.0",
2434 | "object-assign": "^4.0.1",
2435 | "thenify-all": "^1.0.0"
2436 | }
2437 | },
2438 | "node_modules/nanoid": {
2439 | "version": "3.3.6",
2440 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
2441 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
2442 | "dev": true,
2443 | "funding": [
2444 | {
2445 | "type": "github",
2446 | "url": "https://github.com/sponsors/ai"
2447 | }
2448 | ],
2449 | "bin": {
2450 | "nanoid": "bin/nanoid.cjs"
2451 | },
2452 | "engines": {
2453 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
2454 | }
2455 | },
2456 | "node_modules/natural-compare": {
2457 | "version": "1.4.0",
2458 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
2459 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
2460 | "dev": true
2461 | },
2462 | "node_modules/natural-compare-lite": {
2463 | "version": "1.4.0",
2464 | "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz",
2465 | "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==",
2466 | "dev": true
2467 | },
2468 | "node_modules/node-releases": {
2469 | "version": "2.0.12",
2470 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
2471 | "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
2472 | "dev": true
2473 | },
2474 | "node_modules/normalize-path": {
2475 | "version": "3.0.0",
2476 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
2477 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
2478 | "dev": true,
2479 | "engines": {
2480 | "node": ">=0.10.0"
2481 | }
2482 | },
2483 | "node_modules/normalize-range": {
2484 | "version": "0.1.2",
2485 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
2486 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
2487 | "dev": true,
2488 | "engines": {
2489 | "node": ">=0.10.0"
2490 | }
2491 | },
2492 | "node_modules/object-assign": {
2493 | "version": "4.1.1",
2494 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
2495 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
2496 | "dev": true,
2497 | "engines": {
2498 | "node": ">=0.10.0"
2499 | }
2500 | },
2501 | "node_modules/object-hash": {
2502 | "version": "3.0.0",
2503 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
2504 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
2505 | "dev": true,
2506 | "engines": {
2507 | "node": ">= 6"
2508 | }
2509 | },
2510 | "node_modules/once": {
2511 | "version": "1.4.0",
2512 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
2513 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
2514 | "dev": true,
2515 | "dependencies": {
2516 | "wrappy": "1"
2517 | }
2518 | },
2519 | "node_modules/optionator": {
2520 | "version": "0.9.1",
2521 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz",
2522 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==",
2523 | "dev": true,
2524 | "dependencies": {
2525 | "deep-is": "^0.1.3",
2526 | "fast-levenshtein": "^2.0.6",
2527 | "levn": "^0.4.1",
2528 | "prelude-ls": "^1.2.1",
2529 | "type-check": "^0.4.0",
2530 | "word-wrap": "^1.2.3"
2531 | },
2532 | "engines": {
2533 | "node": ">= 0.8.0"
2534 | }
2535 | },
2536 | "node_modules/p-limit": {
2537 | "version": "3.1.0",
2538 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
2539 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
2540 | "dev": true,
2541 | "dependencies": {
2542 | "yocto-queue": "^0.1.0"
2543 | },
2544 | "engines": {
2545 | "node": ">=10"
2546 | },
2547 | "funding": {
2548 | "url": "https://github.com/sponsors/sindresorhus"
2549 | }
2550 | },
2551 | "node_modules/p-locate": {
2552 | "version": "5.0.0",
2553 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
2554 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
2555 | "dev": true,
2556 | "dependencies": {
2557 | "p-limit": "^3.0.2"
2558 | },
2559 | "engines": {
2560 | "node": ">=10"
2561 | },
2562 | "funding": {
2563 | "url": "https://github.com/sponsors/sindresorhus"
2564 | }
2565 | },
2566 | "node_modules/parent-module": {
2567 | "version": "1.0.1",
2568 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
2569 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
2570 | "dev": true,
2571 | "dependencies": {
2572 | "callsites": "^3.0.0"
2573 | },
2574 | "engines": {
2575 | "node": ">=6"
2576 | }
2577 | },
2578 | "node_modules/path-exists": {
2579 | "version": "4.0.0",
2580 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
2581 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
2582 | "dev": true,
2583 | "engines": {
2584 | "node": ">=8"
2585 | }
2586 | },
2587 | "node_modules/path-is-absolute": {
2588 | "version": "1.0.1",
2589 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2590 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
2591 | "dev": true,
2592 | "engines": {
2593 | "node": ">=0.10.0"
2594 | }
2595 | },
2596 | "node_modules/path-key": {
2597 | "version": "3.1.1",
2598 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2599 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2600 | "dev": true,
2601 | "engines": {
2602 | "node": ">=8"
2603 | }
2604 | },
2605 | "node_modules/path-parse": {
2606 | "version": "1.0.7",
2607 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
2608 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
2609 | "dev": true
2610 | },
2611 | "node_modules/path-scurry": {
2612 | "version": "1.10.1",
2613 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
2614 | "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
2615 | "dev": true,
2616 | "dependencies": {
2617 | "lru-cache": "^9.1.1 || ^10.0.0",
2618 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
2619 | },
2620 | "engines": {
2621 | "node": ">=16 || 14 >=14.17"
2622 | },
2623 | "funding": {
2624 | "url": "https://github.com/sponsors/isaacs"
2625 | }
2626 | },
2627 | "node_modules/path-scurry/node_modules/lru-cache": {
2628 | "version": "10.1.0",
2629 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
2630 | "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
2631 | "dev": true,
2632 | "engines": {
2633 | "node": "14 || >=16.14"
2634 | }
2635 | },
2636 | "node_modules/path-type": {
2637 | "version": "4.0.0",
2638 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
2639 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
2640 | "dev": true,
2641 | "engines": {
2642 | "node": ">=8"
2643 | }
2644 | },
2645 | "node_modules/picocolors": {
2646 | "version": "1.0.0",
2647 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2648 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
2649 | "dev": true
2650 | },
2651 | "node_modules/picomatch": {
2652 | "version": "2.3.1",
2653 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2654 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
2655 | "dev": true,
2656 | "engines": {
2657 | "node": ">=8.6"
2658 | },
2659 | "funding": {
2660 | "url": "https://github.com/sponsors/jonschlinkert"
2661 | }
2662 | },
2663 | "node_modules/pify": {
2664 | "version": "2.3.0",
2665 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
2666 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
2667 | "dev": true,
2668 | "engines": {
2669 | "node": ">=0.10.0"
2670 | }
2671 | },
2672 | "node_modules/pirates": {
2673 | "version": "4.0.6",
2674 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
2675 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
2676 | "dev": true,
2677 | "engines": {
2678 | "node": ">= 6"
2679 | }
2680 | },
2681 | "node_modules/postcss": {
2682 | "version": "8.4.24",
2683 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
2684 | "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
2685 | "dev": true,
2686 | "funding": [
2687 | {
2688 | "type": "opencollective",
2689 | "url": "https://opencollective.com/postcss/"
2690 | },
2691 | {
2692 | "type": "tidelift",
2693 | "url": "https://tidelift.com/funding/github/npm/postcss"
2694 | },
2695 | {
2696 | "type": "github",
2697 | "url": "https://github.com/sponsors/ai"
2698 | }
2699 | ],
2700 | "dependencies": {
2701 | "nanoid": "^3.3.6",
2702 | "picocolors": "^1.0.0",
2703 | "source-map-js": "^1.0.2"
2704 | },
2705 | "engines": {
2706 | "node": "^10 || ^12 || >=14"
2707 | }
2708 | },
2709 | "node_modules/postcss-import": {
2710 | "version": "15.1.0",
2711 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
2712 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
2713 | "dev": true,
2714 | "dependencies": {
2715 | "postcss-value-parser": "^4.0.0",
2716 | "read-cache": "^1.0.0",
2717 | "resolve": "^1.1.7"
2718 | },
2719 | "engines": {
2720 | "node": ">=14.0.0"
2721 | },
2722 | "peerDependencies": {
2723 | "postcss": "^8.0.0"
2724 | }
2725 | },
2726 | "node_modules/postcss-js": {
2727 | "version": "4.0.1",
2728 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
2729 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
2730 | "dev": true,
2731 | "dependencies": {
2732 | "camelcase-css": "^2.0.1"
2733 | },
2734 | "engines": {
2735 | "node": "^12 || ^14 || >= 16"
2736 | },
2737 | "funding": {
2738 | "type": "opencollective",
2739 | "url": "https://opencollective.com/postcss/"
2740 | },
2741 | "peerDependencies": {
2742 | "postcss": "^8.4.21"
2743 | }
2744 | },
2745 | "node_modules/postcss-load-config": {
2746 | "version": "4.0.2",
2747 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
2748 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
2749 | "dev": true,
2750 | "funding": [
2751 | {
2752 | "type": "opencollective",
2753 | "url": "https://opencollective.com/postcss/"
2754 | },
2755 | {
2756 | "type": "github",
2757 | "url": "https://github.com/sponsors/ai"
2758 | }
2759 | ],
2760 | "dependencies": {
2761 | "lilconfig": "^3.0.0",
2762 | "yaml": "^2.3.4"
2763 | },
2764 | "engines": {
2765 | "node": ">= 14"
2766 | },
2767 | "peerDependencies": {
2768 | "postcss": ">=8.0.9",
2769 | "ts-node": ">=9.0.0"
2770 | },
2771 | "peerDependenciesMeta": {
2772 | "postcss": {
2773 | "optional": true
2774 | },
2775 | "ts-node": {
2776 | "optional": true
2777 | }
2778 | }
2779 | },
2780 | "node_modules/postcss-load-config/node_modules/lilconfig": {
2781 | "version": "3.0.0",
2782 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
2783 | "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
2784 | "dev": true,
2785 | "engines": {
2786 | "node": ">=14"
2787 | }
2788 | },
2789 | "node_modules/postcss-nested": {
2790 | "version": "6.0.1",
2791 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
2792 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
2793 | "dev": true,
2794 | "dependencies": {
2795 | "postcss-selector-parser": "^6.0.11"
2796 | },
2797 | "engines": {
2798 | "node": ">=12.0"
2799 | },
2800 | "funding": {
2801 | "type": "opencollective",
2802 | "url": "https://opencollective.com/postcss/"
2803 | },
2804 | "peerDependencies": {
2805 | "postcss": "^8.2.14"
2806 | }
2807 | },
2808 | "node_modules/postcss-selector-parser": {
2809 | "version": "6.0.15",
2810 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz",
2811 | "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==",
2812 | "dev": true,
2813 | "dependencies": {
2814 | "cssesc": "^3.0.0",
2815 | "util-deprecate": "^1.0.2"
2816 | },
2817 | "engines": {
2818 | "node": ">=4"
2819 | }
2820 | },
2821 | "node_modules/postcss-value-parser": {
2822 | "version": "4.2.0",
2823 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
2824 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
2825 | "dev": true
2826 | },
2827 | "node_modules/prelude-ls": {
2828 | "version": "1.2.1",
2829 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
2830 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
2831 | "dev": true,
2832 | "engines": {
2833 | "node": ">= 0.8.0"
2834 | }
2835 | },
2836 | "node_modules/punycode": {
2837 | "version": "2.3.0",
2838 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
2839 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
2840 | "dev": true,
2841 | "engines": {
2842 | "node": ">=6"
2843 | }
2844 | },
2845 | "node_modules/queue-microtask": {
2846 | "version": "1.2.3",
2847 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2848 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2849 | "dev": true,
2850 | "funding": [
2851 | {
2852 | "type": "github",
2853 | "url": "https://github.com/sponsors/feross"
2854 | },
2855 | {
2856 | "type": "patreon",
2857 | "url": "https://www.patreon.com/feross"
2858 | },
2859 | {
2860 | "type": "consulting",
2861 | "url": "https://feross.org/support"
2862 | }
2863 | ]
2864 | },
2865 | "node_modules/react": {
2866 | "version": "18.2.0",
2867 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz",
2868 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==",
2869 | "dependencies": {
2870 | "loose-envify": "^1.1.0"
2871 | },
2872 | "engines": {
2873 | "node": ">=0.10.0"
2874 | }
2875 | },
2876 | "node_modules/react-dom": {
2877 | "version": "18.2.0",
2878 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz",
2879 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==",
2880 | "dependencies": {
2881 | "loose-envify": "^1.1.0",
2882 | "scheduler": "^0.23.0"
2883 | },
2884 | "peerDependencies": {
2885 | "react": "^18.2.0"
2886 | }
2887 | },
2888 | "node_modules/read-cache": {
2889 | "version": "1.0.0",
2890 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
2891 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
2892 | "dev": true,
2893 | "dependencies": {
2894 | "pify": "^2.3.0"
2895 | }
2896 | },
2897 | "node_modules/readdirp": {
2898 | "version": "3.6.0",
2899 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2900 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2901 | "dev": true,
2902 | "dependencies": {
2903 | "picomatch": "^2.2.1"
2904 | },
2905 | "engines": {
2906 | "node": ">=8.10.0"
2907 | }
2908 | },
2909 | "node_modules/resolve": {
2910 | "version": "1.22.8",
2911 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
2912 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
2913 | "dev": true,
2914 | "dependencies": {
2915 | "is-core-module": "^2.13.0",
2916 | "path-parse": "^1.0.7",
2917 | "supports-preserve-symlinks-flag": "^1.0.0"
2918 | },
2919 | "bin": {
2920 | "resolve": "bin/resolve"
2921 | },
2922 | "funding": {
2923 | "url": "https://github.com/sponsors/ljharb"
2924 | }
2925 | },
2926 | "node_modules/resolve-from": {
2927 | "version": "4.0.0",
2928 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
2929 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
2930 | "dev": true,
2931 | "engines": {
2932 | "node": ">=4"
2933 | }
2934 | },
2935 | "node_modules/reusify": {
2936 | "version": "1.0.4",
2937 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2938 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2939 | "dev": true,
2940 | "engines": {
2941 | "iojs": ">=1.0.0",
2942 | "node": ">=0.10.0"
2943 | }
2944 | },
2945 | "node_modules/rimraf": {
2946 | "version": "3.0.2",
2947 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
2948 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
2949 | "dev": true,
2950 | "dependencies": {
2951 | "glob": "^7.1.3"
2952 | },
2953 | "bin": {
2954 | "rimraf": "bin.js"
2955 | },
2956 | "funding": {
2957 | "url": "https://github.com/sponsors/isaacs"
2958 | }
2959 | },
2960 | "node_modules/rollup": {
2961 | "version": "3.24.0",
2962 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.24.0.tgz",
2963 | "integrity": "sha512-OgraHOIg2YpHQTjl0/ymWfFNBEyPucB7lmhXrQUh38qNOegxLapSPFs9sNr0qKR75awW41D93XafoR2QfhBdUQ==",
2964 | "dev": true,
2965 | "bin": {
2966 | "rollup": "dist/bin/rollup"
2967 | },
2968 | "engines": {
2969 | "node": ">=14.18.0",
2970 | "npm": ">=8.0.0"
2971 | },
2972 | "optionalDependencies": {
2973 | "fsevents": "~2.3.2"
2974 | }
2975 | },
2976 | "node_modules/run-parallel": {
2977 | "version": "1.2.0",
2978 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2979 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2980 | "dev": true,
2981 | "funding": [
2982 | {
2983 | "type": "github",
2984 | "url": "https://github.com/sponsors/feross"
2985 | },
2986 | {
2987 | "type": "patreon",
2988 | "url": "https://www.patreon.com/feross"
2989 | },
2990 | {
2991 | "type": "consulting",
2992 | "url": "https://feross.org/support"
2993 | }
2994 | ],
2995 | "dependencies": {
2996 | "queue-microtask": "^1.2.2"
2997 | }
2998 | },
2999 | "node_modules/scheduler": {
3000 | "version": "0.23.0",
3001 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz",
3002 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==",
3003 | "dependencies": {
3004 | "loose-envify": "^1.1.0"
3005 | }
3006 | },
3007 | "node_modules/semver": {
3008 | "version": "7.5.1",
3009 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
3010 | "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
3011 | "dev": true,
3012 | "dependencies": {
3013 | "lru-cache": "^6.0.0"
3014 | },
3015 | "bin": {
3016 | "semver": "bin/semver.js"
3017 | },
3018 | "engines": {
3019 | "node": ">=10"
3020 | }
3021 | },
3022 | "node_modules/shebang-command": {
3023 | "version": "2.0.0",
3024 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
3025 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
3026 | "dev": true,
3027 | "dependencies": {
3028 | "shebang-regex": "^3.0.0"
3029 | },
3030 | "engines": {
3031 | "node": ">=8"
3032 | }
3033 | },
3034 | "node_modules/shebang-regex": {
3035 | "version": "3.0.0",
3036 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
3037 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
3038 | "dev": true,
3039 | "engines": {
3040 | "node": ">=8"
3041 | }
3042 | },
3043 | "node_modules/signal-exit": {
3044 | "version": "4.1.0",
3045 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
3046 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
3047 | "dev": true,
3048 | "engines": {
3049 | "node": ">=14"
3050 | },
3051 | "funding": {
3052 | "url": "https://github.com/sponsors/isaacs"
3053 | }
3054 | },
3055 | "node_modules/slash": {
3056 | "version": "3.0.0",
3057 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
3058 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
3059 | "dev": true,
3060 | "engines": {
3061 | "node": ">=8"
3062 | }
3063 | },
3064 | "node_modules/source-map-js": {
3065 | "version": "1.0.2",
3066 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
3067 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
3068 | "dev": true,
3069 | "engines": {
3070 | "node": ">=0.10.0"
3071 | }
3072 | },
3073 | "node_modules/string-width": {
3074 | "version": "5.1.2",
3075 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
3076 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
3077 | "dev": true,
3078 | "dependencies": {
3079 | "eastasianwidth": "^0.2.0",
3080 | "emoji-regex": "^9.2.2",
3081 | "strip-ansi": "^7.0.1"
3082 | },
3083 | "engines": {
3084 | "node": ">=12"
3085 | },
3086 | "funding": {
3087 | "url": "https://github.com/sponsors/sindresorhus"
3088 | }
3089 | },
3090 | "node_modules/string-width-cjs": {
3091 | "name": "string-width",
3092 | "version": "4.2.3",
3093 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3094 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3095 | "dev": true,
3096 | "dependencies": {
3097 | "emoji-regex": "^8.0.0",
3098 | "is-fullwidth-code-point": "^3.0.0",
3099 | "strip-ansi": "^6.0.1"
3100 | },
3101 | "engines": {
3102 | "node": ">=8"
3103 | }
3104 | },
3105 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
3106 | "version": "8.0.0",
3107 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3108 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
3109 | "dev": true
3110 | },
3111 | "node_modules/string-width/node_modules/ansi-regex": {
3112 | "version": "6.0.1",
3113 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
3114 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
3115 | "dev": true,
3116 | "engines": {
3117 | "node": ">=12"
3118 | },
3119 | "funding": {
3120 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
3121 | }
3122 | },
3123 | "node_modules/string-width/node_modules/strip-ansi": {
3124 | "version": "7.1.0",
3125 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
3126 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
3127 | "dev": true,
3128 | "dependencies": {
3129 | "ansi-regex": "^6.0.1"
3130 | },
3131 | "engines": {
3132 | "node": ">=12"
3133 | },
3134 | "funding": {
3135 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
3136 | }
3137 | },
3138 | "node_modules/strip-ansi": {
3139 | "version": "6.0.1",
3140 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3141 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3142 | "dev": true,
3143 | "dependencies": {
3144 | "ansi-regex": "^5.0.1"
3145 | },
3146 | "engines": {
3147 | "node": ">=8"
3148 | }
3149 | },
3150 | "node_modules/strip-ansi-cjs": {
3151 | "name": "strip-ansi",
3152 | "version": "6.0.1",
3153 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3154 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3155 | "dev": true,
3156 | "dependencies": {
3157 | "ansi-regex": "^5.0.1"
3158 | },
3159 | "engines": {
3160 | "node": ">=8"
3161 | }
3162 | },
3163 | "node_modules/strip-json-comments": {
3164 | "version": "3.1.1",
3165 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
3166 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
3167 | "dev": true,
3168 | "engines": {
3169 | "node": ">=8"
3170 | },
3171 | "funding": {
3172 | "url": "https://github.com/sponsors/sindresorhus"
3173 | }
3174 | },
3175 | "node_modules/sucrase": {
3176 | "version": "3.35.0",
3177 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
3178 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
3179 | "dev": true,
3180 | "dependencies": {
3181 | "@jridgewell/gen-mapping": "^0.3.2",
3182 | "commander": "^4.0.0",
3183 | "glob": "^10.3.10",
3184 | "lines-and-columns": "^1.1.6",
3185 | "mz": "^2.7.0",
3186 | "pirates": "^4.0.1",
3187 | "ts-interface-checker": "^0.1.9"
3188 | },
3189 | "bin": {
3190 | "sucrase": "bin/sucrase",
3191 | "sucrase-node": "bin/sucrase-node"
3192 | },
3193 | "engines": {
3194 | "node": ">=16 || 14 >=14.17"
3195 | }
3196 | },
3197 | "node_modules/sucrase/node_modules/brace-expansion": {
3198 | "version": "2.0.1",
3199 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
3200 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
3201 | "dev": true,
3202 | "dependencies": {
3203 | "balanced-match": "^1.0.0"
3204 | }
3205 | },
3206 | "node_modules/sucrase/node_modules/glob": {
3207 | "version": "10.3.10",
3208 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
3209 | "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
3210 | "dev": true,
3211 | "dependencies": {
3212 | "foreground-child": "^3.1.0",
3213 | "jackspeak": "^2.3.5",
3214 | "minimatch": "^9.0.1",
3215 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
3216 | "path-scurry": "^1.10.1"
3217 | },
3218 | "bin": {
3219 | "glob": "dist/esm/bin.mjs"
3220 | },
3221 | "engines": {
3222 | "node": ">=16 || 14 >=14.17"
3223 | },
3224 | "funding": {
3225 | "url": "https://github.com/sponsors/isaacs"
3226 | }
3227 | },
3228 | "node_modules/sucrase/node_modules/minimatch": {
3229 | "version": "9.0.3",
3230 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
3231 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
3232 | "dev": true,
3233 | "dependencies": {
3234 | "brace-expansion": "^2.0.1"
3235 | },
3236 | "engines": {
3237 | "node": ">=16 || 14 >=14.17"
3238 | },
3239 | "funding": {
3240 | "url": "https://github.com/sponsors/isaacs"
3241 | }
3242 | },
3243 | "node_modules/supports-color": {
3244 | "version": "7.2.0",
3245 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
3246 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
3247 | "dev": true,
3248 | "dependencies": {
3249 | "has-flag": "^4.0.0"
3250 | },
3251 | "engines": {
3252 | "node": ">=8"
3253 | }
3254 | },
3255 | "node_modules/supports-preserve-symlinks-flag": {
3256 | "version": "1.0.0",
3257 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
3258 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
3259 | "dev": true,
3260 | "engines": {
3261 | "node": ">= 0.4"
3262 | },
3263 | "funding": {
3264 | "url": "https://github.com/sponsors/ljharb"
3265 | }
3266 | },
3267 | "node_modules/tailwindcss": {
3268 | "version": "3.4.1",
3269 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz",
3270 | "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==",
3271 | "dev": true,
3272 | "dependencies": {
3273 | "@alloc/quick-lru": "^5.2.0",
3274 | "arg": "^5.0.2",
3275 | "chokidar": "^3.5.3",
3276 | "didyoumean": "^1.2.2",
3277 | "dlv": "^1.1.3",
3278 | "fast-glob": "^3.3.0",
3279 | "glob-parent": "^6.0.2",
3280 | "is-glob": "^4.0.3",
3281 | "jiti": "^1.19.1",
3282 | "lilconfig": "^2.1.0",
3283 | "micromatch": "^4.0.5",
3284 | "normalize-path": "^3.0.0",
3285 | "object-hash": "^3.0.0",
3286 | "picocolors": "^1.0.0",
3287 | "postcss": "^8.4.23",
3288 | "postcss-import": "^15.1.0",
3289 | "postcss-js": "^4.0.1",
3290 | "postcss-load-config": "^4.0.1",
3291 | "postcss-nested": "^6.0.1",
3292 | "postcss-selector-parser": "^6.0.11",
3293 | "resolve": "^1.22.2",
3294 | "sucrase": "^3.32.0"
3295 | },
3296 | "bin": {
3297 | "tailwind": "lib/cli.js",
3298 | "tailwindcss": "lib/cli.js"
3299 | },
3300 | "engines": {
3301 | "node": ">=14.0.0"
3302 | }
3303 | },
3304 | "node_modules/text-table": {
3305 | "version": "0.2.0",
3306 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
3307 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==",
3308 | "dev": true
3309 | },
3310 | "node_modules/thenify": {
3311 | "version": "3.3.1",
3312 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
3313 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
3314 | "dev": true,
3315 | "dependencies": {
3316 | "any-promise": "^1.0.0"
3317 | }
3318 | },
3319 | "node_modules/thenify-all": {
3320 | "version": "1.6.0",
3321 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
3322 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
3323 | "dev": true,
3324 | "dependencies": {
3325 | "thenify": ">= 3.1.0 < 4"
3326 | },
3327 | "engines": {
3328 | "node": ">=0.8"
3329 | }
3330 | },
3331 | "node_modules/to-regex-range": {
3332 | "version": "5.0.1",
3333 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
3334 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
3335 | "dev": true,
3336 | "dependencies": {
3337 | "is-number": "^7.0.0"
3338 | },
3339 | "engines": {
3340 | "node": ">=8.0"
3341 | }
3342 | },
3343 | "node_modules/ts-interface-checker": {
3344 | "version": "0.1.13",
3345 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
3346 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
3347 | "dev": true
3348 | },
3349 | "node_modules/tslib": {
3350 | "version": "1.14.1",
3351 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
3352 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
3353 | "dev": true
3354 | },
3355 | "node_modules/tsutils": {
3356 | "version": "3.21.0",
3357 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz",
3358 | "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==",
3359 | "dev": true,
3360 | "dependencies": {
3361 | "tslib": "^1.8.1"
3362 | },
3363 | "engines": {
3364 | "node": ">= 6"
3365 | },
3366 | "peerDependencies": {
3367 | "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta"
3368 | }
3369 | },
3370 | "node_modules/type-check": {
3371 | "version": "0.4.0",
3372 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
3373 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
3374 | "dev": true,
3375 | "dependencies": {
3376 | "prelude-ls": "^1.2.1"
3377 | },
3378 | "engines": {
3379 | "node": ">= 0.8.0"
3380 | }
3381 | },
3382 | "node_modules/type-fest": {
3383 | "version": "0.20.2",
3384 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
3385 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
3386 | "dev": true,
3387 | "engines": {
3388 | "node": ">=10"
3389 | },
3390 | "funding": {
3391 | "url": "https://github.com/sponsors/sindresorhus"
3392 | }
3393 | },
3394 | "node_modules/typescript": {
3395 | "version": "5.1.3",
3396 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz",
3397 | "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==",
3398 | "dev": true,
3399 | "bin": {
3400 | "tsc": "bin/tsc",
3401 | "tsserver": "bin/tsserver"
3402 | },
3403 | "engines": {
3404 | "node": ">=14.17"
3405 | }
3406 | },
3407 | "node_modules/update-browserslist-db": {
3408 | "version": "1.0.11",
3409 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
3410 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
3411 | "dev": true,
3412 | "funding": [
3413 | {
3414 | "type": "opencollective",
3415 | "url": "https://opencollective.com/browserslist"
3416 | },
3417 | {
3418 | "type": "tidelift",
3419 | "url": "https://tidelift.com/funding/github/npm/browserslist"
3420 | },
3421 | {
3422 | "type": "github",
3423 | "url": "https://github.com/sponsors/ai"
3424 | }
3425 | ],
3426 | "dependencies": {
3427 | "escalade": "^3.1.1",
3428 | "picocolors": "^1.0.0"
3429 | },
3430 | "bin": {
3431 | "update-browserslist-db": "cli.js"
3432 | },
3433 | "peerDependencies": {
3434 | "browserslist": ">= 4.21.0"
3435 | }
3436 | },
3437 | "node_modules/uri-js": {
3438 | "version": "4.4.1",
3439 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
3440 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
3441 | "dev": true,
3442 | "dependencies": {
3443 | "punycode": "^2.1.0"
3444 | }
3445 | },
3446 | "node_modules/use-broadcast-ts": {
3447 | "version": "1.8.0",
3448 | "resolved": "https://registry.npmjs.org/use-broadcast-ts/-/use-broadcast-ts-1.8.0.tgz",
3449 | "integrity": "sha512-0P96KV3fj2RalmWPAEVm5J7vFuB3PLxBIzei4Nv2z9ckvr6+MxgbtpgJXLWcVBa3JsvI6G7a6u11mzsuUdpjuA==",
3450 | "optionalDependencies": {
3451 | "react": ">=18.0",
3452 | "zustand": "^4.0.0 || ^5.0.0"
3453 | }
3454 | },
3455 | "node_modules/use-sync-external-store": {
3456 | "version": "1.2.2",
3457 | "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz",
3458 | "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==",
3459 | "optional": true,
3460 | "peer": true,
3461 | "peerDependencies": {
3462 | "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
3463 | }
3464 | },
3465 | "node_modules/util-deprecate": {
3466 | "version": "1.0.2",
3467 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
3468 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
3469 | "dev": true
3470 | },
3471 | "node_modules/vite": {
3472 | "version": "4.3.9",
3473 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
3474 | "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
3475 | "dev": true,
3476 | "dependencies": {
3477 | "esbuild": "^0.17.5",
3478 | "postcss": "^8.4.23",
3479 | "rollup": "^3.21.0"
3480 | },
3481 | "bin": {
3482 | "vite": "bin/vite.js"
3483 | },
3484 | "engines": {
3485 | "node": "^14.18.0 || >=16.0.0"
3486 | },
3487 | "optionalDependencies": {
3488 | "fsevents": "~2.3.2"
3489 | },
3490 | "peerDependencies": {
3491 | "@types/node": ">= 14",
3492 | "less": "*",
3493 | "sass": "*",
3494 | "stylus": "*",
3495 | "sugarss": "*",
3496 | "terser": "^5.4.0"
3497 | },
3498 | "peerDependenciesMeta": {
3499 | "@types/node": {
3500 | "optional": true
3501 | },
3502 | "less": {
3503 | "optional": true
3504 | },
3505 | "sass": {
3506 | "optional": true
3507 | },
3508 | "stylus": {
3509 | "optional": true
3510 | },
3511 | "sugarss": {
3512 | "optional": true
3513 | },
3514 | "terser": {
3515 | "optional": true
3516 | }
3517 | }
3518 | },
3519 | "node_modules/which": {
3520 | "version": "2.0.2",
3521 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3522 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3523 | "dev": true,
3524 | "dependencies": {
3525 | "isexe": "^2.0.0"
3526 | },
3527 | "bin": {
3528 | "node-which": "bin/node-which"
3529 | },
3530 | "engines": {
3531 | "node": ">= 8"
3532 | }
3533 | },
3534 | "node_modules/word-wrap": {
3535 | "version": "1.2.3",
3536 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz",
3537 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==",
3538 | "dev": true,
3539 | "engines": {
3540 | "node": ">=0.10.0"
3541 | }
3542 | },
3543 | "node_modules/wrap-ansi": {
3544 | "version": "8.1.0",
3545 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
3546 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
3547 | "dev": true,
3548 | "dependencies": {
3549 | "ansi-styles": "^6.1.0",
3550 | "string-width": "^5.0.1",
3551 | "strip-ansi": "^7.0.1"
3552 | },
3553 | "engines": {
3554 | "node": ">=12"
3555 | },
3556 | "funding": {
3557 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3558 | }
3559 | },
3560 | "node_modules/wrap-ansi-cjs": {
3561 | "name": "wrap-ansi",
3562 | "version": "7.0.0",
3563 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3564 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3565 | "dev": true,
3566 | "dependencies": {
3567 | "ansi-styles": "^4.0.0",
3568 | "string-width": "^4.1.0",
3569 | "strip-ansi": "^6.0.0"
3570 | },
3571 | "engines": {
3572 | "node": ">=10"
3573 | },
3574 | "funding": {
3575 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3576 | }
3577 | },
3578 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
3579 | "version": "8.0.0",
3580 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3581 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
3582 | "dev": true
3583 | },
3584 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
3585 | "version": "4.2.3",
3586 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3587 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3588 | "dev": true,
3589 | "dependencies": {
3590 | "emoji-regex": "^8.0.0",
3591 | "is-fullwidth-code-point": "^3.0.0",
3592 | "strip-ansi": "^6.0.1"
3593 | },
3594 | "engines": {
3595 | "node": ">=8"
3596 | }
3597 | },
3598 | "node_modules/wrap-ansi/node_modules/ansi-regex": {
3599 | "version": "6.0.1",
3600 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
3601 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
3602 | "dev": true,
3603 | "engines": {
3604 | "node": ">=12"
3605 | },
3606 | "funding": {
3607 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
3608 | }
3609 | },
3610 | "node_modules/wrap-ansi/node_modules/ansi-styles": {
3611 | "version": "6.2.1",
3612 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
3613 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
3614 | "dev": true,
3615 | "engines": {
3616 | "node": ">=12"
3617 | },
3618 | "funding": {
3619 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
3620 | }
3621 | },
3622 | "node_modules/wrap-ansi/node_modules/strip-ansi": {
3623 | "version": "7.1.0",
3624 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
3625 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
3626 | "dev": true,
3627 | "dependencies": {
3628 | "ansi-regex": "^6.0.1"
3629 | },
3630 | "engines": {
3631 | "node": ">=12"
3632 | },
3633 | "funding": {
3634 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
3635 | }
3636 | },
3637 | "node_modules/wrappy": {
3638 | "version": "1.0.2",
3639 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3640 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
3641 | "dev": true
3642 | },
3643 | "node_modules/yallist": {
3644 | "version": "4.0.0",
3645 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3646 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
3647 | "dev": true
3648 | },
3649 | "node_modules/yaml": {
3650 | "version": "2.3.4",
3651 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
3652 | "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
3653 | "dev": true,
3654 | "engines": {
3655 | "node": ">= 14"
3656 | }
3657 | },
3658 | "node_modules/yocto-queue": {
3659 | "version": "0.1.0",
3660 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
3661 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
3662 | "dev": true,
3663 | "engines": {
3664 | "node": ">=10"
3665 | },
3666 | "funding": {
3667 | "url": "https://github.com/sponsors/sindresorhus"
3668 | }
3669 | },
3670 | "node_modules/zustand": {
3671 | "version": "5.0.0",
3672 | "resolved": "https://registry.npmjs.org/zustand/-/zustand-5.0.0.tgz",
3673 | "integrity": "sha512-LE+VcmbartOPM+auOjCCLQOsQ05zUTp8RkgwRzefUk+2jISdMMFnxvyTjA4YNWr5ZGXYbVsEMZosttuxUBkojQ==",
3674 | "engines": {
3675 | "node": ">=12.20.0"
3676 | },
3677 | "peerDependencies": {
3678 | "@types/react": ">=18.0.0",
3679 | "immer": ">=9.0.6",
3680 | "react": ">=18.0.0",
3681 | "use-sync-external-store": ">=1.2.0"
3682 | },
3683 | "peerDependenciesMeta": {
3684 | "@types/react": {
3685 | "optional": true
3686 | },
3687 | "immer": {
3688 | "optional": true
3689 | },
3690 | "react": {
3691 | "optional": true
3692 | },
3693 | "use-sync-external-store": {
3694 | "optional": true
3695 | }
3696 | }
3697 | }
3698 | }
3699 | }
3700 |
--------------------------------------------------------------------------------
/example/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "use-zustand",
3 | "private": true,
4 | "version": "0.0.0",
5 | "type": "module",
6 | "scripts": {
7 | "dev": "vite --host",
8 | "build": "tsc && vite build",
9 | "lint": "eslint src --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
10 | "preview": "vite preview"
11 | },
12 | "dependencies": {
13 | "react": "^18.2.0",
14 | "react-dom": "^18.2.0",
15 | "use-broadcast-ts": "^1.8.0",
16 | "zustand": "^5.0.0"
17 | },
18 | "devDependencies": {
19 | "@types/react": "^18.0.37",
20 | "@types/react-dom": "^18.0.11",
21 | "@typescript-eslint/eslint-plugin": "^5.59.0",
22 | "@typescript-eslint/parser": "^5.59.0",
23 | "@vitejs/plugin-react-swc": "^3.0.0",
24 | "autoprefixer": "^10.4.14",
25 | "daisyui": "^4.6.0",
26 | "eslint": "^8.38.0",
27 | "eslint-plugin-react-hooks": "^4.6.0",
28 | "eslint-plugin-react-refresh": "^0.3.4",
29 | "postcss": "^8.4.24",
30 | "tailwindcss": "^3.4.1",
31 | "typescript": "^5.0.2",
32 | "vite": "^4.3.9"
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/example/postcss.config.js:
--------------------------------------------------------------------------------
1 | export default {
2 | plugins: {
3 | tailwindcss: {},
4 | autoprefixer: {},
5 | },
6 | }
7 |
--------------------------------------------------------------------------------
/example/public/vite.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/example/src/App.tsx:
--------------------------------------------------------------------------------
1 | import Spinner from './components/Spinner';
2 | import { lazy, Suspense } from 'react';
3 |
4 | const Code = lazy(() => import('./components/Code'));
5 | const Actions = lazy(() => import('./components/Actions'));
6 |
7 | const Github = lazy(() => import('./assets/Github'));
8 | const Npm = lazy(() => import('./assets/Npm'));
9 |
10 | const App = () => {
11 | return (
12 |
13 |
14 |
15 |
use-broadcast-ts
16 | v2.0.0
17 |
18 |
19 |
20 |
21 |
22 | window.open('https://www.npmjs.com/package/use-broadcast-ts', '_blank', 'noopener')}
25 | >
26 |
27 | }>
28 |
29 |
30 |
31 |
32 | window.open('https://github.com/Romainlg29/use-broadcast', '_blank', 'noopener')}
35 | >
36 |
37 | }>
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
50 |
51 |
52 | }
53 | >
54 |
55 |
56 |
57 |
58 |
59 |
64 |
65 | );
66 | };
67 |
68 | export default App;
69 |
--------------------------------------------------------------------------------
/example/src/assets/Github.tsx:
--------------------------------------------------------------------------------
1 | import { useColorScheme } from '../hooks/useColorScheme';
2 |
3 | const Github = () => {
4 | const isDark = useColorScheme();
5 |
6 | return (
7 |
8 |
9 |
10 | );
11 | };
12 |
13 | export default Github;
--------------------------------------------------------------------------------
/example/src/assets/Npm.tsx:
--------------------------------------------------------------------------------
1 | import { useColorScheme } from '../hooks/useColorScheme';
2 |
3 | const Npm = () => {
4 | const isDark = useColorScheme();
5 |
6 | return (
7 |
16 |
17 |
18 | );
19 | };
20 |
21 | export default Npm;
22 |
--------------------------------------------------------------------------------
/example/src/assets/Sync.tsx:
--------------------------------------------------------------------------------
1 | import { useColorScheme } from "../hooks/useColorScheme";
2 |
3 | const SyncIcon = () => {
4 |
5 | const isDark = useColorScheme();
6 |
7 | return (
8 |
9 |
10 |
11 | );
12 | };
13 |
14 | export default SyncIcon;
--------------------------------------------------------------------------------
/example/src/assets/Unsync.tsx:
--------------------------------------------------------------------------------
1 | import { useColorScheme } from "../hooks/useColorScheme";
2 |
3 | const UnsyncIcon = () => {
4 |
5 | const isDark = useColorScheme();
6 |
7 | return (
8 |
9 |
10 |
11 | );
12 | };
13 |
14 | export default UnsyncIcon;
15 |
--------------------------------------------------------------------------------
/example/src/components/Actions.tsx:
--------------------------------------------------------------------------------
1 | import Spinner from './Spinner';
2 |
3 | import { FC, lazy, Suspense } from 'react';
4 | import { useCountStore } from '../stores/useCountStore';
5 |
6 | const SyncIcon = lazy(() => import('../assets/Sync'));
7 | const UnsyncIcon = lazy(() => import('../assets/Unsync'));
8 |
9 | const Actions: FC = () => {
10 | const { mode, increment, decrement, setMode } = useCountStore((s) => ({
11 | mode: s.mode,
12 | increment: s.increment,
13 | decrement: s.decrement,
14 | setMode: s.setMode,
15 | }));
16 |
17 | return (
18 |
19 |
20 | +
21 | Increment
22 |
23 |
24 |
25 | -
26 | Decrement
27 |
28 |
29 |
30 |
31 |
32 | }>{mode === 'Sync' ? : }
33 |
34 | {mode}
35 |
36 |
44 |
45 |
46 |
window.open('.', '_blank')}>
47 | Open in new window
48 |
49 |
50 | {mode === 'Not Sync' && (
51 |
52 |
53 | This sync mode won't work in this example.
54 |
55 |
56 | )}
57 |
58 | );
59 | };
60 |
61 | export default Actions;
62 |
--------------------------------------------------------------------------------
/example/src/components/Code.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react';
2 | import { useCountStore } from '../stores/useCountStore';
3 |
4 | const tab = ' ';
5 |
6 | const Code: FC = () => {
7 | const { count, mode } = useCountStore((s) => ({ count: s.count, mode: s.mode }));
8 |
9 | return (
10 | <>
11 |
12 |
13 | import { create {' '}
14 | } from 'zustand'
15 | ;
16 |
17 |
18 |
19 |
20 | import { shared {' '}
21 | } from{' '}
22 | 'use-broadcast-ts'
23 | ;
24 |
25 |
26 |
27 |
28 |
29 | type CountStore = {
30 |
31 |
32 |
33 |
34 | {tab}
35 | count: number
36 | ;
37 |
38 |
39 |
40 |
41 | {tab}increment: () => {' '}
42 | void
43 | ;
44 |
45 |
46 |
47 |
48 | {tab}decrement: () => {' '}
49 | void
50 | ;
51 |
52 |
53 |
54 | };
55 |
56 |
57 |
58 |
59 | export const {' '}
60 | useCountStore = create{'<'}
61 | CountStore
62 | {'>('} {' '}
63 |
64 |
65 |
66 |
67 | {tab}
68 | shared
69 | {'('}
70 |
71 |
72 |
73 |
74 | {tab}
75 | {tab}
76 | {'('}
77 | set
78 | ,
79 | get
80 | {') => ('}
81 | {'{'}
82 |
83 |
84 |
85 |
86 | {tab}
87 | {tab}
88 | {tab}
89 | count: {count} ,
90 |
91 |
92 |
93 |
94 | {tab}
95 | {tab}
96 | {tab}
97 | increment
98 | : () {' '}
99 | => set
100 | {'('}
101 | {'{'} count: {' '}
102 | get()
103 | .
104 | count
105 | +
106 | 1 {'}'}
107 | {')'} ,
108 |
109 |
110 |
111 |
112 | {tab}
113 | {tab}
114 | {tab}
115 | decrement
116 | : () {' '}
117 | => set
118 | {'('}
119 | {'{'} count: {' '}
120 | get()
121 | .
122 | count
123 | -
124 | 1 {'}'}
125 | {')'} ,
126 |
127 |
128 |
129 |
130 | {tab}
131 | {tab}
132 | {'}'}
133 | {')'} ,
134 |
135 |
136 |
137 |
138 | {tab}
139 | {tab}
140 | {'{'} name: {' '}
141 | 'count-store'
142 | {mode === 'Not Sync' ? (
143 | <>
144 | , unsync:
145 | true
146 | >
147 | ) : (
148 | ''
149 | )}{' '}
150 | {'}'}
151 |
152 |
153 |
154 |
155 | {tab}
156 | {')'}
157 |
158 |
159 |
160 |
161 | {')'}
162 | {';'}
163 |
164 |
165 | >
166 | );
167 | };
168 |
169 | export default Code;
170 |
--------------------------------------------------------------------------------
/example/src/components/Spinner.tsx:
--------------------------------------------------------------------------------
1 | import { FC } from 'react';
2 |
3 | const Spinner: FC = () => ;
4 |
5 | export default Spinner;
6 |
--------------------------------------------------------------------------------
/example/src/hooks/useColorScheme.ts:
--------------------------------------------------------------------------------
1 | import { useState, useEffect } from 'react';
2 |
3 | export const useColorScheme = () => {
4 | const theme = (() => window.matchMedia('(prefers-color-scheme: dark)').matches)();
5 |
6 | const [isDark, setIsDark] = useState(theme);
7 |
8 | useEffect(() => {
9 | const listener = window.matchMedia('(prefers-color-scheme: dark)');
10 |
11 | listener.addEventListener('change', (e) => setIsDark(e.matches));
12 |
13 | return () => listener.removeEventListener('change', (e) => setIsDark(e.matches));
14 | }, []);
15 |
16 | return isDark;
17 | };
18 |
--------------------------------------------------------------------------------
/example/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
--------------------------------------------------------------------------------
/example/src/main.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import ReactDOM from 'react-dom/client'
3 | import App from './App.tsx'
4 | import './index.css'
5 |
6 | ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render(
7 |
8 |
9 | ,
10 | )
11 |
--------------------------------------------------------------------------------
/example/src/stores/useCountStore.ts:
--------------------------------------------------------------------------------
1 | import { shared } from 'use-broadcast-ts';
2 | import { createWithEqualityFn as create } from 'zustand/traditional';
3 |
4 | type CountStore = {
5 | count: number;
6 | increment: () => void;
7 | decrement: () => void;
8 |
9 | mode: 'Sync' | 'Not Sync';
10 | setMode: (mode: 'Sync' | 'Not Sync') => void;
11 | };
12 |
13 | export const useCountStore = create()(
14 | shared(
15 | (set, get) => ({
16 | count: 0,
17 | increment: () => set((s) => ({ count: s.count + 1 })),
18 | decrement: () => set({ count: get().count - 1 }),
19 |
20 | mode: 'Sync',
21 | setMode: (mode) => set({ mode }),
22 | }),
23 | { name: 'my-store' }
24 | )
25 | );
26 |
--------------------------------------------------------------------------------
/example/src/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
--------------------------------------------------------------------------------
/example/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | export default {
3 | content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'],
4 | theme: {
5 | extend: {
6 | animation: {
7 | in: 'fadeIn 0.5s ease-in-out',
8 | },
9 | keyframes: {
10 | fadeIn: {
11 | '0%': { opacity: 0, scale: '90%' },
12 | '100%': { opacity: 1, scale: '100%' },
13 | },
14 | },
15 | },
16 | },
17 | plugins: [require('daisyui')],
18 | };
19 |
--------------------------------------------------------------------------------
/example/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "useDefineForClassFields": true,
5 | "lib": ["ES2020", "DOM", "DOM.Iterable"],
6 | "module": "ESNext",
7 | "skipLibCheck": true,
8 |
9 | /* Bundler mode */
10 | "moduleResolution": "bundler",
11 | "allowImportingTsExtensions": true,
12 | "resolveJsonModule": true,
13 | "isolatedModules": true,
14 | "noEmit": true,
15 | "jsx": "react-jsx",
16 |
17 | /* Linting */
18 | "strict": true,
19 | "noUnusedLocals": true,
20 | "noUnusedParameters": true,
21 | "noFallthroughCasesInSwitch": true
22 | },
23 | "include": ["src"],
24 | "references": [{ "path": "./tsconfig.node.json" }]
25 | }
26 |
--------------------------------------------------------------------------------
/example/tsconfig.node.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "composite": true,
4 | "skipLibCheck": true,
5 | "module": "ESNext",
6 | "moduleResolution": "bundler",
7 | "allowSyntheticDefaultImports": true
8 | },
9 | "include": ["vite.config.ts"]
10 | }
11 |
--------------------------------------------------------------------------------
/example/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite'
2 | import react from '@vitejs/plugin-react-swc'
3 |
4 | // https://vitejs.dev/config/
5 | export default defineConfig({
6 | plugins: [react()],
7 | base: ''
8 | })
9 |
--------------------------------------------------------------------------------
/jest.config.json:
--------------------------------------------------------------------------------
1 | {
2 | "verbose": true,
3 | "testEnvironment": "jsdom"
4 | }
5 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "use-broadcast-ts",
3 | "version": "2.0.0",
4 | "description": "Use the Broadcast Channel API in React easily with hooks or Zustand, and Typescript!",
5 | "type": "module",
6 | "types": "./dist/index.d.ts",
7 | "main": "./dist/index.js",
8 | "module": "./dist/index.mjs",
9 | "exports": {
10 | "types": "./dist/index.d.ts",
11 | "require": "./dist/index.js",
12 | "import": "./dist/index.mjs"
13 | },
14 | "sideEffects": false,
15 | "scripts": {
16 | "build": "rollup -c --bundleConfigAsCjs",
17 | "postbuild": "tsc --emitDeclarationOnly",
18 | "prepublishOnly": "npm run build",
19 | "test": "jest"
20 | },
21 | "husky": {
22 | "hooks": {
23 | "pre-commit": "lint-staged"
24 | }
25 | },
26 | "lint-staged": {
27 | "*.{js,jsx,ts,tsx}": [
28 | "eslint --fix"
29 | ]
30 | },
31 | "repository": {
32 | "type": "git",
33 | "url": "git+https://github.com/Romainlg29/use-broadcast.git"
34 | },
35 | "keywords": [
36 | "web",
37 | "api",
38 | "broadcast",
39 | "channel",
40 | "broadcast-channel",
41 | "hooks",
42 | "react",
43 | "react 18",
44 | "zustand",
45 | "middleware",
46 | "state"
47 | ],
48 | "author": "Romain Le Gall",
49 | "license": "MIT",
50 | "bugs": {
51 | "url": "https://github.com/Romainlg29/use-broadcast/issues"
52 | },
53 | "devDependencies": {
54 | "@babel/core": "7.21.4",
55 | "@babel/plugin-proposal-class-properties": "^7.18.6",
56 | "@babel/plugin-transform-modules-commonjs": "7.21.2",
57 | "@babel/plugin-transform-parameters": "7.21.3",
58 | "@babel/plugin-transform-runtime": "7.21.4",
59 | "@babel/plugin-transform-template-literals": "7.18.9",
60 | "@babel/preset-env": "^7.21.4",
61 | "@babel/preset-react": "^7.18.6",
62 | "@babel/preset-typescript": "^7.21.4",
63 | "@rollup/plugin-babel": "^6.0.3",
64 | "@rollup/plugin-node-resolve": "^15.0.2",
65 | "@testing-library/jest-dom": "^5.16.5",
66 | "@testing-library/react": "^14.0.0",
67 | "@types/jest": "^29.5.1",
68 | "@types/node": "^18.15.13",
69 | "@types/react": "^18.0.37",
70 | "@types/react-dom": "^18.0.11",
71 | "@types/react-test-renderer": "^18.0.0",
72 | "@typescript-eslint/eslint-plugin": "^5.59.0",
73 | "@typescript-eslint/parser": "^5.59.0",
74 | "babel-jest": "^29.5.0",
75 | "babel-loader": "^9.1.2",
76 | "babel-plugin-dynamic-import-node": "^2.3.3",
77 | "husky": "^8.0.3",
78 | "jest": "^29.5.0",
79 | "jest-environment-jsdom": "^29.5.0",
80 | "lint-staged": "^13.2.1",
81 | "prettier": "^2.8.7",
82 | "react": "^18.2.0",
83 | "react-dom": "^18.2.0",
84 | "react-test-renderer": "^18.2.0",
85 | "rollup": "^3.20.7",
86 | "typescript": "^5.0.4"
87 | },
88 | "homepage": "https://github.com/Romainlg29/use-broadcast",
89 | "optionalDependencies": {
90 | "zustand": "^4.0.0 || ^5.0.0",
91 | "react": ">=18.0"
92 | }
93 | }
94 |
--------------------------------------------------------------------------------
/rollup.config.js:
--------------------------------------------------------------------------------
1 | import path from 'path'
2 | import babel from '@rollup/plugin-babel'
3 | import resolve from '@rollup/plugin-node-resolve'
4 |
5 | const root = process.platform === 'win32' ? path.resolve('/') : '/'
6 | const external = (id) => !id.startsWith('.') && !id.startsWith(root)
7 | const extensions = ['.js', '.jsx', '.ts', '.tsx', '.json']
8 |
9 | const getBabelOptions = ({ useESModules }) => ({
10 | babelrc: false,
11 | extensions,
12 | exclude: '**/node_modules/**',
13 | babelHelpers: 'runtime',
14 | presets: [
15 | [
16 | '@babel/preset-env',
17 | {
18 | include: [
19 | '@babel/plugin-proposal-optional-chaining',
20 | '@babel/plugin-proposal-nullish-coalescing-operator',
21 | '@babel/plugin-proposal-numeric-separator',
22 | '@babel/plugin-proposal-logical-assignment-operators',
23 | ],
24 | bugfixes: true,
25 | loose: true,
26 | modules: false,
27 | targets: '> 1%, not dead, not ie 11, not op_mini all',
28 | },
29 | ],
30 | '@babel/preset-react',
31 | '@babel/preset-typescript',
32 | ],
33 | plugins: [['@babel/transform-runtime', { regenerator: false, useESModules }]],
34 | })
35 |
36 | export default [
37 | {
38 | input: `./src/index.ts`,
39 | output: { file: `dist/index.mjs`, format: 'esm' },
40 | external,
41 | plugins: [babel(getBabelOptions({ useESModules: true })), resolve({ extensions })],
42 | },
43 | {
44 | input: `./src/index.ts`,
45 | output: { file: `dist/index.js`, format: 'cjs' },
46 | external,
47 | plugins: [babel(getBabelOptions({ useESModules: false })), resolve({ extensions })],
48 | },
49 | ]
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | export * from './useBroadcast';
2 | export * from './shared';
--------------------------------------------------------------------------------
/src/shared.ts:
--------------------------------------------------------------------------------
1 | import { StateCreator, StoreMutatorIdentifier } from 'zustand';
2 |
3 | export type SharedOptions = {
4 | /**
5 | * The name of the broadcast channel
6 | * It must be unique
7 | */
8 | name?: string;
9 |
10 | /**
11 | * Main timeout
12 | * If the main tab / window doesn't respond in this time, this tab / window will become the main
13 | * @default 100 ms
14 | */
15 | mainTimeout?: number;
16 |
17 | /**
18 | * If true, the store will only synchronize once with the main tab. After that, the store will be unsynchronized.
19 | * @default false
20 | */
21 | unsync?: boolean;
22 |
23 | /**
24 | * If true, will not serialize with JSON.parse(JSON.stringify(state)) the state before sending it.
25 | * This results in a performance boost, but it is on the user to ensure there are no unsupported types in their state.
26 | * @default false
27 | */
28 | skipSerialization?: boolean;
29 |
30 | /**
31 | * Custom function to parse the state before sending it to the other tabs
32 | * @param state The state
33 | * @returns The parsed state
34 | */
35 | partialize?: (state: T) => Partial;
36 |
37 | /**
38 | * Custom function to merge the state after receiving it from the other tabs
39 | * @param state The current state
40 | * @param receivedState The state received from the other tab
41 | * @returns The restored state
42 | */
43 | merge?: (state: T, receivedState: Partial) => T;
44 |
45 | /**
46 | * Callback when this tab / window becomes the main tab / window
47 | * Triggered only in the main tab / window
48 | */
49 | onBecomeMain?: (id: number) => void;
50 |
51 | /**
52 | * Callback when a new tab is opened / closed
53 | * Triggered only in the main tab / window
54 | */
55 | onTabsChange?: (ids: number[]) => void;
56 | };
57 |
58 | /**
59 | * The Shared type
60 | */
61 | export type Shared = <
62 | T extends object,
63 | Mps extends [StoreMutatorIdentifier, unknown][] = [],
64 | Mcs extends [StoreMutatorIdentifier, unknown][] = []
65 | >(
66 | f: StateCreator,
67 | options?: SharedOptions
68 | ) => StateCreator;
69 |
70 | /**
71 | * Type implementation of the Shared function
72 | */
73 | type SharedImpl = (f: StateCreator, options?: SharedOptions) => StateCreator;
74 |
75 | /**
76 | * Shared implementation
77 | * @param f Zustand state creator
78 | * @param options The options
79 | */
80 | const sharedImpl: SharedImpl = (f, options) => (set, get, store) => {
81 | /**
82 | * The broadcast channel is not supported in SSR
83 | */
84 | if (
85 | typeof window === 'undefined' &&
86 | // @ts-expect-error WorkerGlobalScope is not defined in the types
87 | !(typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope)
88 | ) {
89 | console.warn('BroadcastChannel is not supported in this environment. The store will not be shared.');
90 | return f(set, get, store);
91 | }
92 |
93 | /**
94 | * If BroadcastChannel is not supported, return the basic store
95 | */
96 | if (typeof BroadcastChannel === 'undefined') {
97 | console.warn('BroadcastChannel is not supported in this browser. The store will not be shared.');
98 | return f(set, get, store);
99 | }
100 |
101 | /**
102 | * Types
103 | */
104 | type T = ReturnType;
105 |
106 | type Item = { [key: string]: unknown };
107 | type Message =
108 | | {
109 | action: 'sync';
110 | }
111 | | {
112 | action: 'change';
113 | state: Item;
114 | }
115 | | {
116 | action: 'add_new_tab';
117 | id: number;
118 | }
119 | | {
120 | action: 'close';
121 | id: number;
122 | }
123 | | {
124 | action: 'change_main';
125 | id: number;
126 | tabs: number[];
127 | };
128 |
129 | /**
130 | * Is the store synced with the other tabs
131 | */
132 | let isSynced = get() !== undefined;
133 |
134 | /**
135 | * Is this tab / window the main tab / window
136 | * When a new tab / window is opened, it will be synced with the main
137 | */
138 | let isMain = false;
139 |
140 | /**
141 | * The broadcast channel name
142 | */
143 | const name = options?.name ?? f.toString();
144 |
145 | /**
146 | * The id of the tab / window
147 | */
148 | let id = 0;
149 |
150 | /**
151 | * Store a list of all the tabs / windows
152 | * Only for the main tab / window
153 | */
154 | const tabs: number[] = [0];
155 |
156 | /**
157 | * Create the broadcast channel
158 | */
159 | const channel = new BroadcastChannel(name);
160 |
161 | const sendChangeToOtherTabs = () => {
162 | let state: Item = get() as Item;
163 |
164 | /**
165 | * If the partialize function is provided, use it to parse the state
166 | */
167 | if (options?.partialize) {
168 | // Partialize the state
169 | state = options.partialize(state as T);
170 | }
171 |
172 | /**
173 | * If the user did not specify that serialization should be skipped, remove unsupported types
174 | */
175 | if (!options?.skipSerialization) {
176 | // Remove unserializable types (functions, Symbols, etc.) from the state.
177 | state = JSON.parse(JSON.stringify(state));
178 | }
179 |
180 | /**
181 | * Send the states to all the other tabs
182 | */
183 | channel.postMessage({ action: 'change', state } as Message);
184 | };
185 |
186 | /**
187 | * Handle the Zustand set function
188 | * Trigger a postMessage to all the other tabs
189 | */
190 | const onSet: typeof set = (...args) => {
191 | /**
192 | * Update the states
193 | */
194 | set(...(args as Parameters));
195 |
196 | /**
197 | * If the stores should not be synced, return.
198 | */
199 | if (options?.unsync) {
200 | return;
201 | }
202 |
203 | sendChangeToOtherTabs();
204 | };
205 |
206 | /**
207 | * Subscribe to the broadcast channel
208 | */
209 | channel.onmessage = (e) => {
210 | if ((e.data as Message).action === 'sync') {
211 | /**
212 | * If this tab / window is not the main, return
213 | */
214 | if (!isMain) {
215 | return;
216 | }
217 |
218 | sendChangeToOtherTabs();
219 |
220 | /**
221 | * Set the new tab / window id
222 | */
223 | const new_id = tabs[tabs.length - 1]! + 1;
224 | tabs.push(new_id);
225 |
226 | options?.onTabsChange?.(tabs);
227 |
228 | channel.postMessage({ action: 'add_new_tab', id: new_id } as Message);
229 |
230 | return;
231 | }
232 |
233 | /**
234 | * Set an id for the tab / window if it doesn't have one
235 | */
236 | if ((e.data as Message).action === 'add_new_tab' && !isMain && id === 0) {
237 | id = e.data.id;
238 | return;
239 | }
240 |
241 | /**
242 | * On receiving a new state, update the state
243 | */
244 | if ((e.data as Message).action === 'change') {
245 | /**
246 | * Update the state
247 | */
248 | set((state) => (options?.merge ? options.merge(state, e.data.state as Partial) : e.data.state));
249 |
250 | /**
251 | * Set the synced attribute
252 | */
253 | isSynced = true;
254 | }
255 |
256 | /**
257 | * On receiving a close message, remove the tab / window id from the list
258 | */
259 | if ((e.data as Message).action === 'close') {
260 | if (!isMain) {
261 | return;
262 | }
263 |
264 | const index = tabs.indexOf(e.data.id);
265 | if (index !== -1) {
266 | tabs.splice(index, 1);
267 |
268 | options?.onTabsChange?.(tabs);
269 | }
270 | }
271 |
272 | /**
273 | * On receiving a change_main message, change the main tab / window
274 | */
275 | if ((e.data as Message).action === 'change_main') {
276 | if (e.data.id === id) {
277 | isMain = true;
278 | tabs.splice(0, tabs.length, ...e.data.tabs);
279 |
280 | options?.onBecomeMain?.(id);
281 | }
282 | }
283 | };
284 |
285 | /**
286 | * Synchronize with the main tab
287 | */
288 | const synchronize = (): void => {
289 | channel.postMessage({ action: 'sync' } as Message);
290 |
291 | /**
292 | * If isSynced is false after 100ms, this tab is the main tab
293 | */
294 | setTimeout(() => {
295 | if (!isSynced) {
296 | isMain = true;
297 | isSynced = true;
298 |
299 | options?.onBecomeMain?.(id);
300 | }
301 | }, options?.mainTimeout ?? 100);
302 | };
303 |
304 | /**
305 | * Handle case when the tab / window is closed
306 | */
307 | const onClose = (): void => {
308 | /**
309 | * For some reason, the channel can be closed abruptly, when redirecting for example
310 | * So we need to wrap this in a try catch block
311 | */
312 | try {
313 | channel.postMessage({ action: 'close', id } as Message);
314 |
315 | /**
316 | * If we're closing the main, make the second the new main
317 | */
318 | if (isMain) {
319 | /**
320 | * If there is only one tab left, close the channel and return
321 | */
322 | if (tabs.length === 1) {
323 | /**
324 | * Clean up
325 | */
326 | channel.close();
327 | return;
328 | }
329 |
330 | const remaining_tabs = tabs.filter((tab) => tab !== id);
331 | channel.postMessage({ action: 'change_main', id: remaining_tabs[0], tabs: remaining_tabs } as Message);
332 |
333 | return;
334 | }
335 | } catch (e) {}
336 | };
337 |
338 | /**
339 | * Add close event listener
340 | */
341 | if (typeof window !== 'undefined') {
342 | window.addEventListener('beforeunload', onClose);
343 | }
344 |
345 | /**
346 | * Synchronize with the main tab
347 | */
348 | if (!isSynced) {
349 | synchronize();
350 | }
351 |
352 | /**
353 | * Modify and return the Zustand store
354 | */
355 | store.setState = onSet;
356 |
357 | return f(onSet, get, store);
358 | };
359 |
360 | /**
361 | * Shared middleware
362 | *
363 | * @example
364 | * import { create } from 'zustand';
365 | * import { shared } from 'use-broadcast-ts';
366 | *
367 | * const useStore = create(
368 | * shared(
369 | * (set) => ({ count: 0 }),
370 | * { name: 'my-store' }
371 | * )
372 | * );
373 | */
374 | export const shared = sharedImpl as Shared;
375 |
--------------------------------------------------------------------------------
/src/useBroadcast.test.ts:
--------------------------------------------------------------------------------
1 | import { renderHook } from '@testing-library/react';
2 | import { useBroadcast } from './useBroadcast';
3 |
4 | describe('useBroadcast', () => {
5 | beforeEach(() => {
6 | jest.clearAllMocks();
7 | });
8 |
9 | it('should return the initial value.', () => {
10 | const { result } = renderHook(() => useBroadcast('my-channel', 'hello'));
11 |
12 | expect(result.current.state).toBe('hello');
13 | });
14 |
15 | it('should return undefined if no initial value is provided.', () => {
16 | const { result } = renderHook(() => useBroadcast('my-channel'));
17 |
18 | expect(result.current.state).toBeUndefined();
19 | });
20 | });
21 |
--------------------------------------------------------------------------------
/src/useBroadcast.ts:
--------------------------------------------------------------------------------
1 | import { useEffect, useRef, useState } from "react";
2 |
3 | /**
4 | * Our hook will return an object with three properties:
5 | * - send: a function that will send a message to all other tabs
6 | * - state: the current state of the broadcast
7 | * - subscribe: a function that will subscribe to the broadcast (Only if options.subscribe is true)
8 | */
9 | export type UseBroadcastReturn = {
10 | send: (val: T) => void;
11 | state: T | undefined;
12 | subscribe: (callback: (e: T) => void) => () => void;
13 | };
14 |
15 | /**
16 | * The options for the useBroadcast hook
17 | */
18 | export type UseBroadcastOptions = {
19 | subscribe?: boolean;
20 | };
21 |
22 | /**
23 | *
24 | * @param name The name of the broadcast channel
25 | * @param val The initial value of the broadcast
26 | * @returns Returns an object with three properties: send, state and subscribe
27 | */
28 | export const useBroadcast = (
29 | name: string,
30 | val?: T,
31 | options?: UseBroadcastOptions
32 | ): UseBroadcastReturn => {
33 | /**
34 | * Store the state of the broadcast
35 | */
36 | const [state, setState] = useState(val);
37 |
38 | /**
39 | * Store the BroadcastChannel instance
40 | */
41 | const channel = useRef(null);
42 |
43 | /**
44 | * Store the listeners
45 | */
46 | const listeners = useRef<((e: T) => void)[]>([]);
47 |
48 | /**
49 | * This function send the value to all the other tabs
50 | * @param val The value to send
51 | */
52 | const send = (val: T) => {
53 | if (!channel.current) {
54 | return;
55 | }
56 |
57 | /**
58 | * Send the value to all the other tabs
59 | */
60 | channel.current.postMessage(val);
61 |
62 | if (!options?.subscribe) {
63 | setState(val);
64 | }
65 |
66 | /**
67 | * Dispatch the event to the listeners
68 | */
69 | listeners.current.forEach((listener) => listener(val));
70 | };
71 |
72 | /**
73 | * This function subscribe to the broadcast
74 | * @param callback The callback function
75 | * @returns Returns a function that unsubscribe the callback
76 | */
77 | const subscribe = (callback: (e: T) => void) => {
78 | /**
79 | * Add the callback to the listeners
80 | */
81 | listeners.current.push(callback);
82 |
83 | /**
84 | * Return a function that unsubscribe the callback
85 | */
86 | return () =>
87 | listeners.current.splice(listeners.current.indexOf(callback), 1);
88 | };
89 |
90 | useEffect(() => {
91 | /**
92 | * If BroadcastChannel is not supported, we log an error and return
93 | */
94 | if (typeof window === "undefined") {
95 | console.error("Window is undefined!");
96 | return;
97 | }
98 |
99 | if (!window.BroadcastChannel) {
100 | console.error("BroadcastChannel is not supported!");
101 | return;
102 | }
103 |
104 | /**
105 | * If the channel is null, we create a new one
106 | */
107 | if (!channel.current) {
108 | channel.current = new BroadcastChannel(name);
109 | }
110 |
111 | /**
112 | * Subscribe to the message event
113 | * @param e The message event
114 | */
115 | channel.current.onmessage = (e) => {
116 | /**
117 | * Update the state
118 | */
119 | if (!options?.subscribe) {
120 | setState(e.data);
121 | }
122 |
123 | /**
124 | * Dispatch an event to the listeners
125 | */
126 | listeners.current.forEach((listener) => listener(e.data));
127 | };
128 |
129 | /**
130 | * Cleanup
131 | */
132 | return () => {
133 | if (!channel.current) {
134 | return;
135 | }
136 |
137 | channel.current.close();
138 | channel.current = null;
139 | };
140 | }, [name, options]);
141 |
142 | return { send, state, subscribe };
143 | };
144 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "esnext",
4 | "target": "es2018",
5 | "allowSyntheticDefaultImports": true,
6 | "jsx": "react",
7 | "strict": true,
8 | "preserveSymlinks": true,
9 | "moduleResolution": "Node",
10 | "esModuleInterop": true,
11 | "declaration": true,
12 | "declarationDir": "dist",
13 | "skipLibCheck": true,
14 | "removeComments": false,
15 | "baseUrl": "."
16 | },
17 | "include": ["src", "src/useBroadcast.test.ts"]
18 | }
19 |
--------------------------------------------------------------------------------