From fa991afe151580d752b7a925711e627f776f776c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=BD=D0=B0=D1=82=D0=BE=D0=BB=D0=B8=D0=B9=20=D0=A2?= =?UTF-8?q?=D1=83=D1=85=D1=82=D0=B0=D1=80=D0=BE=D0=B2?= Date: Tue, 2 Jan 2024 09:18:36 +0500 Subject: [PATCH] v0.0.0 --- app/.gitignore | 24 + app/.vscode/extensions.json | 3 + app/README.md | 47 + app/index.html | 15 + app/jsconfig.json | 32 + app/package-lock.json | 2652 +++++++++++++++++++++++++++++++++++ app/package.json | 24 + app/postcss.config.js | 6 + app/public/vite.svg | 1 + app/src/App.svelte | 49 + app/src/app.css | 8 + app/src/assets/svelte.svg | 1 + app/src/lib/Counter.svelte | 10 + app/src/main.js | 8 + app/src/routers.js | 7 + app/src/vite-env.d.ts | 2 + app/svelte.config.js | 7 + app/tailwind.config.cjs | 13 + app/vite.config.js | 7 + go.mod | 23 + go.sum | 36 + main.go | 38 + router.go | 38 + stem.bmpr | Bin 0 -> 110592 bytes stemdb/start.go | 66 + 25 files changed, 3117 insertions(+) create mode 100644 app/.gitignore create mode 100644 app/.vscode/extensions.json create mode 100644 app/README.md create mode 100644 app/index.html create mode 100644 app/jsconfig.json create mode 100644 app/package-lock.json create mode 100644 app/package.json create mode 100644 app/postcss.config.js create mode 100644 app/public/vite.svg create mode 100644 app/src/App.svelte create mode 100644 app/src/app.css create mode 100644 app/src/assets/svelte.svg create mode 100644 app/src/lib/Counter.svelte create mode 100644 app/src/main.js create mode 100644 app/src/routers.js create mode 100644 app/src/vite-env.d.ts create mode 100644 app/svelte.config.js create mode 100644 app/tailwind.config.cjs create mode 100644 app/vite.config.js create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 router.go create mode 100644 stem.bmpr create mode 100644 stemdb/start.go diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/app/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/app/.vscode/extensions.json b/app/.vscode/extensions.json new file mode 100644 index 0000000..bdef820 --- /dev/null +++ b/app/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["svelte.svelte-vscode"] +} diff --git a/app/README.md b/app/README.md new file mode 100644 index 0000000..382941e --- /dev/null +++ b/app/README.md @@ -0,0 +1,47 @@ +# Svelte + Vite + +This template should help get you started developing with Svelte in Vite. + +## Recommended IDE Setup + +[VS Code](https://code.visualstudio.com/) + [Svelte](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). + +## Need an official Svelte framework? + +Check out [SvelteKit](https://github.com/sveltejs/kit#readme), which is also powered by Vite. Deploy anywhere with its serverless-first approach and adapt to various platforms, with out of the box support for TypeScript, SCSS, and Less, and easily-added support for mdsvex, GraphQL, PostCSS, Tailwind CSS, and more. + +## Technical considerations + +**Why use this over SvelteKit?** + +- It brings its own routing solution which might not be preferable for some users. +- It is first and foremost a framework that just happens to use Vite under the hood, not a Vite app. + +This template contains as little as possible to get started with Vite + Svelte, while taking into account the developer experience with regards to HMR and intellisense. It demonstrates capabilities on par with the other `create-vite` templates and is a good starting point for beginners dipping their toes into a Vite + Svelte project. + +Should you later need the extended capabilities and extensibility provided by SvelteKit, the template has been structured similarly to SvelteKit so that it is easy to migrate. + +**Why `global.d.ts` instead of `compilerOptions.types` inside `jsconfig.json` or `tsconfig.json`?** + +Setting `compilerOptions.types` shuts out all other types not explicitly listed in the configuration. Using triple-slash references keeps the default TypeScript setting of accepting type information from the entire workspace, while also adding `svelte` and `vite/client` type information. + +**Why include `.vscode/extensions.json`?** + +Other templates indirectly recommend extensions via the README, but this file allows VS Code to prompt the user to install the recommended extension upon opening the project. + +**Why enable `checkJs` in the JS template?** + +It is likely that most cases of changing variable types in runtime are likely to be accidental, rather than deliberate. This provides advanced typechecking out of the box. Should you like to take advantage of the dynamically-typed nature of JavaScript, it is trivial to change the configuration. + +**Why is HMR not preserving my local component state?** + +HMR state preservation comes with a number of gotchas! It has been disabled by default in both `svelte-hmr` and `@sveltejs/vite-plugin-svelte` due to its often surprising behavior. You can read the details [here](https://github.com/sveltejs/svelte-hmr/tree/master/packages/svelte-hmr#preservation-of-local-state). + +If you have state that's important to retain within a component, consider creating an external store which would not be replaced by HMR. + +```js +// store.js +// An extremely simple external store +import { writable } from 'svelte/store' +export default writable(0) +``` diff --git a/app/index.html b/app/index.html new file mode 100644 index 0000000..d82dc48 --- /dev/null +++ b/app/index.html @@ -0,0 +1,15 @@ + + + + + + + + + stem + + +
+ + + diff --git a/app/jsconfig.json b/app/jsconfig.json new file mode 100644 index 0000000..5696a2d --- /dev/null +++ b/app/jsconfig.json @@ -0,0 +1,32 @@ +{ + "compilerOptions": { + "moduleResolution": "bundler", + "target": "ESNext", + "module": "ESNext", + /** + * svelte-preprocess cannot figure out whether you have + * a value or a type, so tell TypeScript to enforce using + * `import type` instead of `import` for Types. + */ + "verbatimModuleSyntax": true, + "isolatedModules": true, + "resolveJsonModule": true, + /** + * To have warnings / errors of the Svelte compiler at the + * correct position, enable source maps by default. + */ + "sourceMap": true, + "esModuleInterop": true, + "skipLibCheck": true, + /** + * Typecheck JS in `.svelte` and `.js` files by default. + * Disable this if you'd like to use dynamic types. + */ + "checkJs": true + }, + /** + * Use global.d.ts instead of compilerOptions.types + * to avoid limiting type declarations. + */ + "include": ["src/**/*.d.ts", "src/**/*.js", "src/**/*.svelte"] +} diff --git a/app/package-lock.json b/app/package-lock.json new file mode 100644 index 0000000..cfe6de4 --- /dev/null +++ b/app/package-lock.json @@ -0,0 +1,2652 @@ +{ + "name": "stem", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "stem", + "version": "0.0.0", + "dependencies": { + "axios": "^1.6.3", + "svelte-spa-router": "^4.0.0", + "tw-elements": "^1.1.0" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "svelte": "^4.2.8", + "tailwindcss": "^3.4.0", + "vite": "^5.0.8" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", + "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", + "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.1.tgz", + "integrity": "sha512-6vMdBZqtq1dVQ4CWdhFwhKZL6E4L1dV6jUjuBvsavvNJSppzi6dLBbuV+3+IyUREaj9ZFvQefnQm28v4OCXlig==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.1.tgz", + "integrity": "sha512-Jto9Fl3YQ9OLsTDWtLFPtaIMSL2kwGyGoVCmPC8Gxvym9TCZm4Sie+cVeblPO66YZsYH8MhBKDMGZ2NDxuk/XQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.1.tgz", + "integrity": "sha512-LtYcLNM+bhsaKAIGwVkh5IOWhaZhjTfNOkGzGqdHvhiCUVuJDalvDxEdSnhFzAn+g23wgsycmZk1vbnaibZwwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.1.tgz", + "integrity": "sha512-KyP/byeXu9V+etKO6Lw3E4tW4QdcnzDG/ake031mg42lob5tN+5qfr+lkcT/SGZaH2PdW4Z1NX9GHEkZ8xV7og==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.1.tgz", + "integrity": "sha512-Yqz/Doumf3QTKplwGNrCHe/B2p9xqDghBZSlAY0/hU6ikuDVQuOUIpDP/YcmoT+447tsZTmirmjgG3znvSCR0Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.1.tgz", + "integrity": "sha512-u3XkZVvxcvlAOlQJ3UsD1rFvLWqu4Ef/Ggl40WAVCuogf4S1nJPHh5RTgqYFpCOvuGJ7H5yGHabjFKEZGExk5Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.1.tgz", + "integrity": "sha512-0XSYN/rfWShW+i+qjZ0phc6vZ7UWI8XWNz4E/l+6edFt+FxoEghrJHjX1EY/kcUGCnZzYYRCl31SNdfOi450Aw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.1.tgz", + "integrity": "sha512-LmYIO65oZVfFt9t6cpYkbC4d5lKHLYv5B4CSHRpnANq0VZUQXGcCPXHzbCXCz4RQnx7jvlYB1ISVNCE/omz5cw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.1.tgz", + "integrity": "sha512-kr8rEPQ6ns/Lmr/hiw8sEVj9aa07gh1/tQF2Y5HrNCCEPiCBGnBUt9tVusrcBBiJfIt1yNaXN6r1CCmpbFEDpg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.1.tgz", + "integrity": "sha512-t4QSR7gN+OEZLG0MiCgPqMWZGwmeHhsM4AkegJ0Kiy6TnJ9vZ8dEIwHw1LcZKhbHxTY32hp9eVCMdR3/I8MGRw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.1.tgz", + "integrity": "sha512-7XI4ZCBN34cb+BH557FJPmh0kmNz2c25SCQeT9OiFWEgf8+dL6ZwJ8f9RnUIit+j01u07Yvrsuu1rZGxJCc51g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.1.tgz", + "integrity": "sha512-yE5c2j1lSWOH5jp+Q0qNL3Mdhr8WuqCNVjc6BxbVfS5cAS6zRmdiw7ktb8GNpDCEUJphILY6KACoFoRtKoqNQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.1.tgz", + "integrity": "sha512-PyJsSsafjmIhVgaI1Zdj7m8BB8mMckFah/xbpplObyHfiXzKcI5UOUXRyOdHW7nz4DpMCuzLnF7v5IWHenCwYA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.1.tgz", + "integrity": "sha512-CGURX6Ps+TkOovK6xV+Y2rn8JKa8ZPUHPZ/NKgCxAmgBrXReavzFl8aOSCj3kQ1xqT7yGJj53hjcV/gqwDAaWA==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0-next.0 || ^2.0.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", + "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/axios": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.3.tgz", + "integrity": "sha512-fWyNdeawGam70jXSVlKl+SUNVcL6j6W79CuSIPfi6HnDUmSCH6gyUys/HrqHeA/wU0Az41rRgean494d0Jb+ww==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/axobject-query": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", + "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001572", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001572.tgz", + "integrity": "sha512-1Pbh5FLmn5y4+QhNyJE9j3/7dK44dGB83/ZMjv/qJk86TvDbjk0LosiZo0i0WB0Vx607qMX9jYrn1VLHCkN4rw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chart.js": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-3.9.1.tgz", + "integrity": "sha512-Ro2JbLmvg83gXF5F4sniaQ+lTbSv18E+TIf2cOeiH1Iqd2PGFOtem+DUufMZsCJwFE7ywPOpfXFBwRTGq7dh6w==" + }, + "node_modules/chartjs-plugin-datalabels": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chartjs-plugin-datalabels/-/chartjs-plugin-datalabels-2.2.0.tgz", + "integrity": "sha512-14ZU30lH7n89oq+A4bWaJPnAG8a7ZTk7dKf48YAzMvJjQtjrgg5Dpk9f+LbjCF6bpx3RAGTeL13IXpKQYyRvlw==", + "peerDependencies": { + "chart.js": ">=3.0.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event-polyfill": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", + "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-autofill": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/detect-autofill/-/detect-autofill-1.1.4.tgz", + "integrity": "sha512-utCBQwCR/beSnADQmBC7C4tTueBBkYCl6WSpfGUkYKO/+MzPxqYGj6G4MvHzcKmH1gCTK+VunX2vaagvkRXPvA==", + "dependencies": { + "custom-event-polyfill": "^1.0.7" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.616", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.616.tgz", + "integrity": "sha512-1n7zWYh8eS0L9Uy+GskE0lkBUNK83cXTVJI0pU3mGprFsbfSdAc15VTFbo+A+Bq4pwstmL30AVcEU3Fo463lNg==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/esbuild": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", + "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", + "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/perfect-scrollbar": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", + "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.32", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", + "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regexparam": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/regexparam/-/regexparam-2.0.2.tgz", + "integrity": "sha512-A1PeDEYMrkLrfyOwv2jwihXbo9qxdGD3atBYQA9JJgreAx8/7rC6IUkWOw2NQlOxLp2wL0ifQbh1HuidDfYA6w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.1.tgz", + "integrity": "sha512-pgPO9DWzLoW/vIhlSoDByCzcpX92bKEorbgXuZrqxByte3JFk2xSW2JEeAcyLc9Ru9pqcNNW+Ob7ntsk2oT/Xw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.1", + "@rollup/rollup-android-arm64": "4.9.1", + "@rollup/rollup-darwin-arm64": "4.9.1", + "@rollup/rollup-darwin-x64": "4.9.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.1", + "@rollup/rollup-linux-arm64-gnu": "4.9.1", + "@rollup/rollup-linux-arm64-musl": "4.9.1", + "@rollup/rollup-linux-riscv64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-gnu": "4.9.1", + "@rollup/rollup-linux-x64-musl": "4.9.1", + "@rollup/rollup-win32-arm64-msvc": "4.9.1", + "@rollup/rollup-win32-ia32-msvc": "4.9.1", + "@rollup/rollup-win32-x64-msvc": "4.9.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.8.tgz", + "integrity": "sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^3.2.1", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-spa-router": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/svelte-spa-router/-/svelte-spa-router-4.0.0.tgz", + "integrity": "sha512-Z9OjOgF6n6N+N30aKZi20DypEfQAYY4USSChQd9UTlV6X7A2BvZ+Dm9uXx4Sw3FqwQUKelyKhEWjlD71yvLdgw==", + "dependencies": { + "regexparam": "2.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ItalyPaleAle" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.0.tgz", + "integrity": "sha512-VigzymniH77knD1dryXbyxR+ePHihHociZbXnLZHUyzf2MMs2ZVqlUrZ3FvpXP8pno9JzmILt1sZPD19M3IxtA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tw-elements": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/tw-elements/-/tw-elements-1.1.0.tgz", + "integrity": "sha512-IUr9YW2l99oTVZxuVjQg6rpuCpo6VZqbaKGYmZUNVVsoSVU/ljPpkJAY2Pn/morlXwKPhP9MTPNQMlWosqHL4w==", + "dependencies": { + "@popperjs/core": "^2.6.0", + "chart.js": "^3.7.1", + "chartjs-plugin-datalabels": "^2.0.0", + "deepmerge": "^4.2.2", + "detect-autofill": "^1.1.3", + "perfect-scrollbar": "^1.5.5", + "tailwindcss": "3.3.0" + } + }, + "node_modules/tw-elements/node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/tw-elements/node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/tw-elements/node_modules/postcss-nested": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.0.tgz", + "integrity": "sha512-0DkamqrPcmkBDsLn+vQDIrtkSbNkv5AD/M322ySo9kqFkCIYklym2xEmWkwo+Y3/qZo34tzEPNUw4y7yMCdv5w==", + "dependencies": { + "postcss-selector-parser": "^6.0.10" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/tw-elements/node_modules/tailwindcss": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.0.tgz", + "integrity": "sha512-hOXlFx+YcklJ8kXiCAfk/FMyr4Pm9ck477G0m/us2344Vuj355IpoEDB5UmGAsSpTBmr+4ZhjzW04JuFXkb/fw==", + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.12", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.17.2", + "lilconfig": "^2.0.6", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.0.9", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "6.0.0", + "postcss-selector-parser": "^6.0.11", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1", + "sucrase": "^3.29.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/tw-elements/node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/vite": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", + "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/app/package.json b/app/package.json new file mode 100644 index 0000000..123c168 --- /dev/null +++ b/app/package.json @@ -0,0 +1,24 @@ +{ + "name": "stem", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "devDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.1", + "autoprefixer": "^10.4.16", + "postcss": "^8.4.32", + "svelte": "^4.2.8", + "tailwindcss": "^3.4.0", + "vite": "^5.0.8" + }, + "dependencies": { + "axios": "^1.6.3", + "svelte-spa-router": "^4.0.0", + "tw-elements": "^1.1.0" + } +} diff --git a/app/postcss.config.js b/app/postcss.config.js new file mode 100644 index 0000000..2e7af2b --- /dev/null +++ b/app/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/app/public/vite.svg b/app/public/vite.svg new file mode 100644 index 0000000..e7b8dfb --- /dev/null +++ b/app/public/vite.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/App.svelte b/app/src/App.svelte new file mode 100644 index 0000000..11bbf86 --- /dev/null +++ b/app/src/App.svelte @@ -0,0 +1,49 @@ + + + +
+ +
diff --git a/app/src/app.css b/app/src/app.css new file mode 100644 index 0000000..3501170 --- /dev/null +++ b/app/src/app.css @@ -0,0 +1,8 @@ + +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + background-color: #212121; +} diff --git a/app/src/assets/svelte.svg b/app/src/assets/svelte.svg new file mode 100644 index 0000000..c5e0848 --- /dev/null +++ b/app/src/assets/svelte.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/app/src/lib/Counter.svelte b/app/src/lib/Counter.svelte new file mode 100644 index 0000000..e45f903 --- /dev/null +++ b/app/src/lib/Counter.svelte @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main.js b/app/src/main.js new file mode 100644 index 0000000..8a909a1 --- /dev/null +++ b/app/src/main.js @@ -0,0 +1,8 @@ +import './app.css' +import App from './App.svelte' + +const app = new App({ + target: document.getElementById('app'), +}) + +export default app diff --git a/app/src/routers.js b/app/src/routers.js new file mode 100644 index 0000000..192fad3 --- /dev/null +++ b/app/src/routers.js @@ -0,0 +1,7 @@ + +import App from "./App.svelte"; + +export const routes = { + "/": App, + "/books": App, +}; diff --git a/app/src/vite-env.d.ts b/app/src/vite-env.d.ts new file mode 100644 index 0000000..4078e74 --- /dev/null +++ b/app/src/vite-env.d.ts @@ -0,0 +1,2 @@ +/// +/// diff --git a/app/svelte.config.js b/app/svelte.config.js new file mode 100644 index 0000000..b0683fd --- /dev/null +++ b/app/svelte.config.js @@ -0,0 +1,7 @@ +import { vitePreprocess } from '@sveltejs/vite-plugin-svelte' + +export default { + // Consult https://svelte.dev/docs#compile-time-svelte-preprocess + // for more information about preprocessors + preprocess: vitePreprocess(), +} diff --git a/app/tailwind.config.cjs b/app/tailwind.config.cjs new file mode 100644 index 0000000..a944931 --- /dev/null +++ b/app/tailwind.config.cjs @@ -0,0 +1,13 @@ + +/** @type {import('tailwindcss').Config} */ +module.exports = { + content: [ + "./src/**/*.{html,js,svelte,ts}", + "./node_modules/tw-elements/dist/js/**/*.js" + ], + theme: { + extend: {}, + }, + darkMode: "class", + plugins: [require("tw-elements/dist/plugin.cjs")] +} diff --git a/app/vite.config.js b/app/vite.config.js new file mode 100644 index 0000000..d701969 --- /dev/null +++ b/app/vite.config.js @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite' +import { svelte } from '@sveltejs/vite-plugin-svelte' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [svelte()], +}) diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..2db9127 --- /dev/null +++ b/go.mod @@ -0,0 +1,23 @@ +module git.tad17.ru/itman/stem + +go 1.21.0 + +require ( + github.com/go-sql-driver/mysql v1.7.1 + github.com/gofiber/fiber/v2 v2.51.0 + github.com/jmoiron/sqlx v1.3.5 +) + +require ( + github.com/andybalholm/brotli v1.0.5 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/klauspost/compress v1.16.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mattn/go-runewidth v0.0.15 // indirect + github.com/rivo/uniseg v0.2.0 // indirect + github.com/valyala/bytebufferpool v1.0.0 // indirect + github.com/valyala/fasthttp v1.50.0 // indirect + github.com/valyala/tcplisten v1.0.0 // indirect + golang.org/x/sys v0.14.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..ff3c0f1 --- /dev/null +++ b/go.sum @@ -0,0 +1,36 @@ +github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs= +github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/gofiber/fiber/v2 v2.51.0 h1:JNACcZy5e2tGApWB2QrRpenTWn0fq0hkFm6k0C86gKQ= +github.com/gofiber/fiber/v2 v2.51.0/go.mod h1:xaQRZQJGqnKOQnbQw+ltvku3/h8QxvNi8o6JiJ7Ll0U= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= +github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= +github.com/klauspost/compress v1.16.7 h1:2mk3MPGNzKyxErAw8YaohYh69+pa4sIQSC0fPGCFR9I= +github.com/klauspost/compress v1.16.7/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/lib/pq v1.2.0 h1:LXpIM/LZ5xGFhOpXAQUIMM1HdyqzVYM13zNdjCEEcA0= +github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= +github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= +github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= +github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= +github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.50.0 h1:H7fweIlBm0rXLs2q0XbalvJ6r0CUPFWK3/bB4N13e9M= +github.com/valyala/fasthttp v1.50.0/go.mod h1:k2zXd82h/7UZc3VOdJ2WaUqt1uZ/XpXAfE9i+HBC3lA= +github.com/valyala/tcplisten v1.0.0 h1:rBHj/Xf+E1tRGZyWIWwJDiRY0zc1Js+CV5DqwacVSA8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= +golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= diff --git a/main.go b/main.go new file mode 100644 index 0000000..da36885 --- /dev/null +++ b/main.go @@ -0,0 +1,38 @@ +package main + +import ( + "fmt" + "os" + + "github.com/gofiber/fiber/v2" + "github.com/gofiber/fiber/v2/middleware/compress" + "github.com/gofiber/fiber/v2/middleware/cors" + "github.com/gofiber/fiber/v2/middleware/favicon" + "github.com/gofiber/fiber/v2/middleware/logger" +) + +func main() { + fmt.Printf("stem v1.0.2\n") + + // инициализация fiber + app := fiber.New() + app.Use(logger.New()) + app.Use(cors.New()) + app.Use(favicon.New()) + app.Use(compress.New()) + + initRouter(app) + + err := app.Listen(":4321") + checkError("run fiber", err) +} + +// ============================ разные утилиты ========================== + +// Проверяет наличие ошибки +func checkError(src string, err error) { + if err != nil { + fmt.Printf("(%s): %s\n", src, err) + os.Exit(1) + } +} diff --git a/router.go b/router.go new file mode 100644 index 0000000..b6852f9 --- /dev/null +++ b/router.go @@ -0,0 +1,38 @@ +package main + +import ( + "git.tad17.ru/itman/stem/stemdb" + "github.com/gofiber/fiber/v2" + "github.com/jmoiron/sqlx" +) + +func initRouter(app *fiber.App) { + db := stemdb.Connect() + + app.Static("/", "app/dist") + app.Static("/assets", "app/dist/assets", fiber.Static{ + Compress: true, + }) + app.Static("/fonts", "app/dist/fonts", fiber.Static{ + Compress: true, + }) + + app.Get("/test", testPage) + app.Get("/books", list_books(db)) +} + +func testPage(c *fiber.Ctx) error { + return c.SendString("простая проверка") +} + +func list_books(db *sqlx.DB) fiber.Handler { + return func(c *fiber.Ctx) error { + deleted := c.Query("deleted") + selected := c.Query("selected") + books, err := stemdb.ListAllBooks(deleted, selected) + return c.JSON(&fiber.Map{ + "success": err == nil, + "books": books, + }) + } +} diff --git a/stem.bmpr b/stem.bmpr new file mode 100644 index 0000000000000000000000000000000000000000..e92fa704133e5b1d39308e3a5a23ef2a26fe03f6 GIT binary patch literal 110592 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 literal 0 HcmV?d00001 diff --git a/stemdb/start.go b/stemdb/start.go new file mode 100644 index 0000000..4c03b59 --- /dev/null +++ b/stemdb/start.go @@ -0,0 +1,66 @@ +package stemdb + +import ( + "fmt" + "os" + + _ "github.com/go-sql-driver/mysql" + "github.com/jmoiron/sqlx" +) + +type Book struct { + ID int + Author string + Seria string + Title string + Deleted bool + Selected bool +} + +var dbx *sqlx.DB + +func Connect() *sqlx.DB { + db, err := sqlx.Open("mysql", "itman:X753951x@(xigmanas:3306)/stem") + checkError("open db", err) + dbx = db + return db +} + +// возвращает список всех книг +// возможно использование фильтров в query, типа: ?deleted=deleted&selected=not selected +func ListAllBooks(options ...string) ([]Book, error) { + cmd := ` + SELECT + id, author, seria, title, + deleted, selected + FROM + book + ` + // блок условий + where := "" + if options != nil { + where = "WHERE 1=1" + for _, o := range options { + if o != "" { + where += fmt.Sprintf(" AND %s", o) + } + } + } + + //fmt.Printf("where: %s\n", where) + var books []Book + err := dbx.Select(&books, cmd+where) + //checkError("ListBooks", err) + return books, err +} + +// поскольку это отдельный пакет, то приходится дублировать +// ============================ разные утилиты ========================== + +// Проверяет наличие ошибки +func checkError(src string, err error) { + if err != nil { + fmt.Printf("[db] (%s): %s\n", src, err) + os.Exit(1) + } +}