From 49af9263e37bdfae71dde4e8cf7160b35f7f5ae0 Mon Sep 17 00:00:00 2001 From: Mika Bomm Date: Fri, 5 Jul 2024 11:49:29 +0200 Subject: [PATCH] init web commit --- web/.browserslistrc | 4 + web/.editorconfig | 5 + web/.gitignore | 22 + web/README.md | 81 ++ web/components.d.ts | 12 + web/index.html | 16 + web/package.json | 27 + web/pnpm-lock.yaml | 1287 +++++++++++++++++++++++++++++ web/public/favicon.ico | Bin 0 -> 15406 bytes web/src/App.vue | 11 + web/src/assets/logo.png | Bin 0 -> 11955 bytes web/src/assets/logo.svg | 6 + web/src/components/HelloWorld.vue | 157 ++++ web/src/components/README.md | 35 + web/src/main.ts | 20 + web/src/plugins/README.md | 3 + web/src/plugins/index.ts | 15 + web/src/plugins/vuetify.ts | 19 + web/src/vite-env.d.ts | 7 + web/tsconfig.json | 31 + web/tsconfig.node.json | 9 + web/vite.config.mts | 47 ++ 22 files changed, 1814 insertions(+) create mode 100644 web/.browserslistrc create mode 100644 web/.editorconfig create mode 100644 web/.gitignore create mode 100644 web/README.md create mode 100644 web/components.d.ts create mode 100644 web/index.html create mode 100644 web/package.json create mode 100644 web/pnpm-lock.yaml create mode 100644 web/public/favicon.ico create mode 100644 web/src/App.vue create mode 100644 web/src/assets/logo.png create mode 100644 web/src/assets/logo.svg create mode 100644 web/src/components/HelloWorld.vue create mode 100644 web/src/components/README.md create mode 100644 web/src/main.ts create mode 100644 web/src/plugins/README.md create mode 100644 web/src/plugins/index.ts create mode 100644 web/src/plugins/vuetify.ts create mode 100644 web/src/vite-env.d.ts create mode 100644 web/tsconfig.json create mode 100644 web/tsconfig.node.json create mode 100644 web/vite.config.mts diff --git a/web/.browserslistrc b/web/.browserslistrc new file mode 100644 index 0000000..dc3bc09 --- /dev/null +++ b/web/.browserslistrc @@ -0,0 +1,4 @@ +> 1% +last 2 versions +not dead +not ie 11 diff --git a/web/.editorconfig b/web/.editorconfig new file mode 100644 index 0000000..7053c49 --- /dev/null +++ b/web/.editorconfig @@ -0,0 +1,5 @@ +[*.{js,jsx,ts,tsx,vue}] +indent_style = space +indent_size = 2 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 0000000..11f5d71 --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,22 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/web/README.md b/web/README.md new file mode 100644 index 0000000..0519646 --- /dev/null +++ b/web/README.md @@ -0,0 +1,81 @@ +# Vuetify (Default) + +This is the official scaffolding tool for Vuetify, designed to give you a head start in building your new Vuetify application. It sets up a base template with all the necessary configurations and standard directory structure, enabling you to begin development without the hassle of setting up the project from scratch. + +## ❗️ Important Links + +- 📄 [Docs](https://vuetifyjs.com/) +- 🚨 [Issues](https://issues.vuetifyjs.com/) +- 🏬 [Store](https://store.vuetifyjs.com/) +- 🎮 [Playground](https://play.vuetifyjs.com/) +- 💬 [Discord](https://community.vuetifyjs.com) + +## 💿 Install + +Set up your project using your preferred package manager. Use the corresponding command to install the dependencies: + +| Package Manager | Command | +|---------------------------------------------------------------|----------------| +| [yarn](https://yarnpkg.com/getting-started) | `yarn install` | +| [npm](https://docs.npmjs.com/cli/v7/commands/npm-install) | `npm install` | +| [pnpm](https://pnpm.io/installation) | `pnpm install` | +| [bun](https://bun.sh/#getting-started) | `bun install` | + +After completing the installation, your environment is ready for Vuetify development. + +## ✨ Features + +- 🖼️ **Optimized Front-End Stack**: Leverage the latest Vue 3 and Vuetify 3 for a modern, reactive UI development experience. [Vue 3](https://v3.vuejs.org/) | [Vuetify 3](https://vuetifyjs.com/en/) +- 🗃️ **State Management**: Integrated with [Pinia](https://pinia.vuejs.org/), the intuitive, modular state management solution for Vue. +- 🚦 **Routing and Layouts**: Utilizes Vue Router for SPA navigation and vite-plugin-vue-layouts for organizing Vue file layouts. [Vue Router](https://router.vuejs.org/) | [vite-plugin-vue-layouts](https://github.com/JohnCampionJr/vite-plugin-vue-layouts) +- 💻 **Enhanced Development Experience**: Benefit from TypeScript's static type checking and the ESLint plugin suite for Vue, ensuring code quality and consistency. [TypeScript](https://www.typescriptlang.org/) | [ESLint Plugin Vue](https://eslint.vuejs.org/) +- ⚡ **Next-Gen Tooling**: Powered by Vite, experience fast cold starts and instant HMR (Hot Module Replacement). [Vite](https://vitejs.dev/) +- 🧩 **Automated Component Importing**: Streamline your workflow with unplugin-vue-components, automatically importing components as you use them. [unplugin-vue-components](https://github.com/antfu/unplugin-vue-components) +- 🛠️ **Strongly-Typed Vue**: Use vue-tsc for type-checking your Vue components, and enjoy a robust development experience. [vue-tsc](https://github.com/johnsoncodehk/volar/tree/master/packages/vue-tsc) + +These features are curated to provide a seamless development experience from setup to deployment, ensuring that your Vuetify application is both powerful and maintainable. + +## 💡 Usage + +This section covers how to start the development server and build your project for production. + +### Starting the Development Server + +To start the development server with hot-reload, run the following command. The server will be accessible at [http://localhost:3000](http://localhost:3000): + +```bash +yarn dev +``` + +(Repeat for npm, pnpm, and bun with respective commands.) + +> Add NODE_OPTIONS='--no-warnings' to suppress the JSON import warnings that happen as part of the Vuetify import mapping. If you are on Node [v21.3.0](https://nodejs.org/en/blog/release/v21.3.0) or higher, you can change this to NODE_OPTIONS='--disable-warning=5401'. If you don't mind the warning, you can remove this from your package.json dev script. + +### Building for Production + +To build your project for production, use: + +```bash +yarn build +``` + +(Repeat for npm, pnpm, and bun with respective commands.) + +Once the build process is completed, your application will be ready for deployment in a production environment. + +## 💪 Support Vuetify Development + +This project is built with [Vuetify](https://vuetifyjs.com/en/), a UI Library with a comprehensive collection of Vue components. Vuetify is an MIT licensed Open Source project that has been made possible due to the generous contributions by our [sponsors and backers](https://vuetifyjs.com/introduction/sponsors-and-backers/). If you are interested in supporting this project, please consider: + +- [Requesting Enterprise Support](https://support.vuetifyjs.com/) +- [Sponsoring John on Github](https://github.com/users/johnleider/sponsorship) +- [Sponsoring Kael on Github](https://github.com/users/kaelwd/sponsorship) +- [Supporting the team on Open Collective](https://opencollective.com/vuetify) +- [Becoming a sponsor on Patreon](https://www.patreon.com/vuetify) +- [Becoming a subscriber on Tidelift](https://tidelift.com/subscription/npm/vuetify) +- [Making a one-time donation with Paypal](https://paypal.me/vuetify) + +## 📑 License +[MIT](http://opensource.org/licenses/MIT) + +Copyright (c) 2016-present Vuetify, LLC diff --git a/web/components.d.ts b/web/components.d.ts new file mode 100644 index 0000000..eb860ff --- /dev/null +++ b/web/components.d.ts @@ -0,0 +1,12 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +declare module 'vue' { + export interface GlobalComponents { + HelloWorld: typeof import('./src/components/HelloWorld.vue')['default'] + } +} diff --git a/web/index.html b/web/index.html new file mode 100644 index 0000000..44eb85d --- /dev/null +++ b/web/index.html @@ -0,0 +1,16 @@ + + + + + + + + Welcome to Vuetify 3 + + + +
+ + + + diff --git a/web/package.json b/web/package.json new file mode 100644 index 0000000..b57f7a7 --- /dev/null +++ b/web/package.json @@ -0,0 +1,27 @@ +{ + "name": "web", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@mdi/font": "6.2.95", + "roboto-fontface": "*", + "vue": "^3.4.21", + "vuetify": "^3.5.8" + }, + "devDependencies": { + "@babel/types": "^7.24.0", + "@types/node": "^20.11.25", + "@vitejs/plugin-vue": "^5.0.4", + "sass": "^1.71.1", + "typescript": "^5.4.2", + "unplugin-fonts": "^1.1.1", + "unplugin-vue-components": "^0.26.0", + "vite": "^5.1.5", + "vite-plugin-vuetify": "^2.0.3", + "vue-tsc": "^2.0.6" + } +} diff --git a/web/pnpm-lock.yaml b/web/pnpm-lock.yaml new file mode 100644 index 0000000..8ddb0fd --- /dev/null +++ b/web/pnpm-lock.yaml @@ -0,0 +1,1287 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@mdi/font': + specifier: 6.2.95 + version: 6.2.95 + roboto-fontface: + specifier: '*' + version: 0.10.0 + vue: + specifier: ^3.4.21 + version: 3.4.31(typescript@5.5.3) + vuetify: + specifier: ^3.5.8 + version: 3.6.11(typescript@5.5.3)(vite-plugin-vuetify@2.0.3)(vue@3.4.31(typescript@5.5.3)) + devDependencies: + '@babel/types': + specifier: ^7.24.0 + version: 7.24.7 + '@types/node': + specifier: ^20.11.25 + version: 20.14.9 + '@vitejs/plugin-vue': + specifier: ^5.0.4 + version: 5.0.5(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6))(vue@3.4.31(typescript@5.5.3)) + sass: + specifier: ^1.71.1 + version: 1.77.6 + typescript: + specifier: ^5.4.2 + version: 5.5.3 + unplugin-fonts: + specifier: ^1.1.1 + version: 1.1.1(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6)) + unplugin-vue-components: + specifier: ^0.26.0 + version: 0.26.0(@babel/parser@7.24.7)(rollup@4.18.0)(vue@3.4.31(typescript@5.5.3)) + vite: + specifier: ^5.1.5 + version: 5.3.3(@types/node@20.14.9)(sass@1.77.6) + vite-plugin-vuetify: + specifier: ^2.0.3 + version: 2.0.3(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6))(vue@3.4.31(typescript@5.5.3))(vuetify@3.6.11) + vue-tsc: + specifier: ^2.0.6 + version: 2.0.26(typescript@5.5.3) + +packages: + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@babel/helper-string-parser@7.24.7': + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.24.7': + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@mdi/font@6.2.95': + resolution: {integrity: sha512-0RKkhabkFZP3ALwKqrjhdKdhydQpoydIjX6cvjIwLyjADCsE0pG68YkGY+S3qnfdErmhS4m8adwvgrAFXp2AYQ==} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@rollup/pluginutils@5.1.0': + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/node@20.14.9': + resolution: {integrity: sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==} + + '@vitejs/plugin-vue@5.0.5': + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 + vue: ^3.2.25 + + '@volar/language-core@2.4.0-alpha.15': + resolution: {integrity: sha512-mt8z4Fm2WxfQYoQHPcKVjLQV6PgPqyKLbkCVY2cr5RSaamqCHjhKEpsFX66aL4D/7oYguuaUw9Bx03Vt0TpIIA==} + + '@volar/source-map@2.4.0-alpha.15': + resolution: {integrity: sha512-8Htngw5TmBY4L3ClDqBGyfLhsB8EmoEXUH1xydyEtEoK0O6NX5ur4Jw8jgvscTlwzizyl/wsN1vn0cQXVbbXYg==} + + '@volar/typescript@2.4.0-alpha.15': + resolution: {integrity: sha512-U3StRBbDuxV6Woa4hvGS4kz3XcOzrWUKgFdEFN+ba1x3eaYg7+ytau8ul05xgA+UNGLXXsKur7fTUhDFyISk0w==} + + '@vue/compiler-core@3.4.31': + resolution: {integrity: sha512-skOiodXWTV3DxfDhB4rOf3OGalpITLlgCeOwb+Y9GJpfQ8ErigdBUHomBzvG78JoVE8MJoQsb+qhZiHfKeNeEg==} + + '@vue/compiler-dom@3.4.31': + resolution: {integrity: sha512-wK424WMXsG1IGMyDGyLqB+TbmEBFM78hIsOJ9QwUVLGrcSk0ak6zYty7Pj8ftm7nEtdU/DGQxAXp0/lM/2cEpQ==} + + '@vue/compiler-sfc@3.4.31': + resolution: {integrity: sha512-einJxqEw8IIJxzmnxmJBuK2usI+lJonl53foq+9etB2HAzlPjAS/wa7r0uUpXw5ByX3/0uswVSrjNb17vJm1kQ==} + + '@vue/compiler-ssr@3.4.31': + resolution: {integrity: sha512-RtefmITAje3fJ8FSg1gwgDhdKhZVntIVbwupdyZDSifZTRMiWxWehAOTCc8/KZDnBOcYQ4/9VWxsTbd3wT0hAA==} + + '@vue/language-core@2.0.26': + resolution: {integrity: sha512-/lt6SfQ3O1yDAhPsnLv9iSUgXd1dMHqUm/t3RctfqjuwQf1LnftZ414X3UBn6aXT4MiwXWtbNJ4Z0NZWwDWgJQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.4.31': + resolution: {integrity: sha512-VGkTani8SOoVkZNds1PfJ/T1SlAIOf8E58PGAhIOUDYPC4GAmFA2u/E14TDAFcf3vVDKunc4QqCe/SHr8xC65Q==} + + '@vue/runtime-core@3.4.31': + resolution: {integrity: sha512-LDkztxeUPazxG/p8c5JDDKPfkCDBkkiNLVNf7XZIUnJ+66GVGkP+TIh34+8LtPisZ+HMWl2zqhIw0xN5MwU1cw==} + + '@vue/runtime-dom@3.4.31': + resolution: {integrity: sha512-2Auws3mB7+lHhTFCg8E9ZWopA6Q6L455EcU7bzcQ4x6Dn4cCPuqj6S2oBZgN2a8vJRS/LSYYxwFFq2Hlx3Fsaw==} + + '@vue/server-renderer@3.4.31': + resolution: {integrity: sha512-D5BLbdvrlR9PE3by9GaUp1gQXlCNadIZytMIb8H2h3FMWJd4oUfkUTEH2wAr3qxoRz25uxbTcbqd3WKlm9EHQA==} + peerDependencies: + vue: 3.4.31 + + '@vue/shared@3.4.31': + resolution: {integrity: sha512-Yp3wtJk//8cO4NItOPpi3QkLExAr/aLBGZMmTtW9WpdwBCJpRM6zj9WgWktXAl8IDIozwNMByT45JP3tO3ACWA==} + + '@vuetify/loader-shared@2.0.3': + resolution: {integrity: sha512-Ss3GC7eJYkp2SF6xVzsT7FAruEmdihmn4OCk2+UocREerlXKWgOKKzTN5PN3ZVN5q05jHHrsNhTuWbhN61Bpdg==} + peerDependencies: + vue: ^3.0.0 + vuetify: ^3.0.0 + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + + brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + + computeds@0.0.1: + resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + + fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + immutable@4.3.6: + resolution: {integrity: sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==} + + is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + + is-core-module@2.14.0: + resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + engines: {node: '>= 0.4'} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + local-pkg@0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + + magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + engines: {node: '>=8.6'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + postcss@8.4.39: + resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + engines: {node: ^10 || ^12 || >=14} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + + resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + roboto-fontface@0.10.0: + resolution: {integrity: sha512-OlwfYEgA2RdboZohpldlvJ1xngOins5d7ejqnIBWr9KaMxsnBqotpptRXTyfNRLnFpqzX6sTDt+X+a+6udnU8g==} + + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + sass@1.77.6: + resolution: {integrity: sha512-ByXE1oLD79GVq9Ht1PeHWCPMPB8XHpBuz1r85oByKHjZY6qV6rWnQovQzXJXuQ/XyE1Oj3iPk3lo28uzaRA2/Q==} + engines: {node: '>=14.0.0'} + hasBin: true + + semver@7.6.2: + resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + engines: {node: '>=10'} + hasBin: true + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + typescript@5.5.3: + resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + unplugin-fonts@1.1.1: + resolution: {integrity: sha512-/Aw/rL9D2aslGGM0vi+2R2aG508RSwawLnnBuo+JDSqYc4cHJO1R1phllhN6GysEhBp/6a4B6+vSFPVapWyAAw==} + peerDependencies: + '@nuxt/kit': ^3.0.0 + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@nuxt/kit': + optional: true + + unplugin-vue-components@0.26.0: + resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + engines: {node: '>=14.0.0'} + + upath@2.0.1: + resolution: {integrity: sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==} + engines: {node: '>=4'} + + vite-plugin-vuetify@2.0.3: + resolution: {integrity: sha512-HbYajgGgb/noaVKNRhnnXIiQZrNXfNIeanUGAwXgOxL6h/KULS40Uf51Kyz8hNmdegF+DwjgXXI/8J1PNS83xw==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: '>=5' + vue: ^3.0.0 + vuetify: ^3.0.0 + + vite@5.3.3: + resolution: {integrity: sha512-NPQdeCU0Dv2z5fu+ULotpuq5yfCS1BzKUIPhNbP3YBfAMGJXbt2nS+sbTFu+qchaqWTD+H3JK++nRwr6XIcp6A==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + 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 + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vue-template-compiler@2.7.16: + resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==} + + vue-tsc@2.0.26: + resolution: {integrity: sha512-tOhuwy2bIXbMhz82ef37qeiaQHMXKQkD6mOF6CCPl3/uYtST3l6fdNyfMxipudrQTxTfXVPlgJdMENBFfC1CfQ==} + hasBin: true + peerDependencies: + typescript: '>=5.0.0' + + vue@3.4.31: + resolution: {integrity: sha512-njqRrOy7W3YLAlVqSKpBebtZpDVg21FPoaq1I7f/+qqBThK9ChAIjkRWgeP6Eat+8C+iia4P3OYqpATP21BCoQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + vuetify@3.6.11: + resolution: {integrity: sha512-DMreVZ6+WCVnvRoFVPGtC+Kc4afx+etcTLgX2AqUj6lQ4RrEx0TlQoNAW1oKPH4eViv2wfdvQ3xb/Yw1c86cTw==} + engines: {node: ^12.20 || >=14.13} + peerDependencies: + typescript: '>=4.7' + vite-plugin-vuetify: '>=1.0.0' + vue: ^3.3.0 + vue-i18n: ^9.0.0 + webpack-plugin-vuetify: '>=2.0.0' + peerDependenciesMeta: + typescript: + optional: true + vite-plugin-vuetify: + optional: true + vue-i18n: + optional: true + webpack-plugin-vuetify: + optional: true + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.2: + resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==} + +snapshots: + + '@antfu/utils@0.7.10': {} + + '@babel/helper-string-parser@7.24.7': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/parser@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/types@7.24.7': + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@mdi/font@6.2.95': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + + '@rollup/pluginutils@5.1.0(rollup@4.18.0)': + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + optionalDependencies: + rollup: 4.18.0 + + '@rollup/rollup-android-arm-eabi@4.18.0': + optional: true + + '@rollup/rollup-android-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-x64@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.18.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.18.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.18.0': + optional: true + + '@types/estree@1.0.5': {} + + '@types/node@20.14.9': + dependencies: + undici-types: 5.26.5 + + '@vitejs/plugin-vue@5.0.5(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6))(vue@3.4.31(typescript@5.5.3))': + dependencies: + vite: 5.3.3(@types/node@20.14.9)(sass@1.77.6) + vue: 3.4.31(typescript@5.5.3) + + '@volar/language-core@2.4.0-alpha.15': + dependencies: + '@volar/source-map': 2.4.0-alpha.15 + + '@volar/source-map@2.4.0-alpha.15': {} + + '@volar/typescript@2.4.0-alpha.15': + dependencies: + '@volar/language-core': 2.4.0-alpha.15 + path-browserify: 1.0.1 + vscode-uri: 3.0.8 + + '@vue/compiler-core@3.4.31': + dependencies: + '@babel/parser': 7.24.7 + '@vue/shared': 3.4.31 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + + '@vue/compiler-dom@3.4.31': + dependencies: + '@vue/compiler-core': 3.4.31 + '@vue/shared': 3.4.31 + + '@vue/compiler-sfc@3.4.31': + dependencies: + '@babel/parser': 7.24.7 + '@vue/compiler-core': 3.4.31 + '@vue/compiler-dom': 3.4.31 + '@vue/compiler-ssr': 3.4.31 + '@vue/shared': 3.4.31 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.39 + source-map-js: 1.2.0 + + '@vue/compiler-ssr@3.4.31': + dependencies: + '@vue/compiler-dom': 3.4.31 + '@vue/shared': 3.4.31 + + '@vue/language-core@2.0.26(typescript@5.5.3)': + dependencies: + '@volar/language-core': 2.4.0-alpha.15 + '@vue/compiler-dom': 3.4.31 + '@vue/shared': 3.4.31 + computeds: 0.0.1 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + vue-template-compiler: 2.7.16 + optionalDependencies: + typescript: 5.5.3 + + '@vue/reactivity@3.4.31': + dependencies: + '@vue/shared': 3.4.31 + + '@vue/runtime-core@3.4.31': + dependencies: + '@vue/reactivity': 3.4.31 + '@vue/shared': 3.4.31 + + '@vue/runtime-dom@3.4.31': + dependencies: + '@vue/reactivity': 3.4.31 + '@vue/runtime-core': 3.4.31 + '@vue/shared': 3.4.31 + csstype: 3.1.3 + + '@vue/server-renderer@3.4.31(vue@3.4.31(typescript@5.5.3))': + dependencies: + '@vue/compiler-ssr': 3.4.31 + '@vue/shared': 3.4.31 + vue: 3.4.31(typescript@5.5.3) + + '@vue/shared@3.4.31': {} + + '@vuetify/loader-shared@2.0.3(vue@3.4.31(typescript@5.5.3))(vuetify@3.6.11(typescript@5.5.3)(vite-plugin-vuetify@2.0.3)(vue@3.4.31(typescript@5.5.3)))': + dependencies: + upath: 2.0.1 + vue: 3.4.31(typescript@5.5.3) + vuetify: 3.6.11(typescript@5.5.3)(vite-plugin-vuetify@2.0.3)(vue@3.4.31(typescript@5.5.3)) + + acorn@8.12.1: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + balanced-match@1.0.2: {} + + binary-extensions@2.3.0: {} + + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + chokidar@3.6.0: + dependencies: + anymatch: 3.1.3 + braces: 3.0.3 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + + computeds@0.0.1: {} + + csstype@3.1.3: {} + + de-indent@1.0.2: {} + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + entities@4.5.0: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + estree-walker@2.0.2: {} + + fast-glob@3.3.2: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.7 + + fastq@1.17.1: + dependencies: + reusify: 1.0.4 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + immutable@4.3.6: {} + + is-binary-path@2.1.0: + dependencies: + binary-extensions: 2.3.0 + + is-core-module@2.14.0: + dependencies: + hasown: 2.0.2 + + is-extglob@2.1.1: {} + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-number@7.0.0: {} + + local-pkg@0.4.3: {} + + magic-string@0.30.10: + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + merge2@1.4.1: {} + + micromatch@4.0.7: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + + ms@2.1.2: {} + + muggle-string@0.4.1: {} + + nanoid@3.3.7: {} + + normalize-path@3.0.0: {} + + path-browserify@1.0.1: {} + + path-parse@1.0.7: {} + + picocolors@1.0.1: {} + + picomatch@2.3.1: {} + + postcss@8.4.39: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + queue-microtask@1.2.3: {} + + readdirp@3.6.0: + dependencies: + picomatch: 2.3.1 + + resolve@1.22.8: + dependencies: + is-core-module: 2.14.0 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + reusify@1.0.4: {} + + roboto-fontface@0.10.0: {} + + rollup@4.18.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + sass@1.77.6: + dependencies: + chokidar: 3.6.0 + immutable: 4.3.6 + source-map-js: 1.2.0 + + semver@7.6.2: {} + + source-map-js@1.2.0: {} + + supports-preserve-symlinks-flag@1.0.0: {} + + to-fast-properties@2.0.0: {} + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + typescript@5.5.3: {} + + undici-types@5.26.5: {} + + unplugin-fonts@1.1.1(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6)): + dependencies: + fast-glob: 3.3.2 + unplugin: 1.11.0 + vite: 5.3.3(@types/node@20.14.9)(sass@1.77.6) + + unplugin-vue-components@0.26.0(@babel/parser@7.24.7)(rollup@4.18.0)(vue@3.4.31(typescript@5.5.3)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.0(rollup@4.18.0) + chokidar: 3.6.0 + debug: 4.3.5 + fast-glob: 3.3.2 + local-pkg: 0.4.3 + magic-string: 0.30.10 + minimatch: 9.0.5 + resolve: 1.22.8 + unplugin: 1.11.0 + vue: 3.4.31(typescript@5.5.3) + optionalDependencies: + '@babel/parser': 7.24.7 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin@1.11.0: + dependencies: + acorn: 8.12.1 + chokidar: 3.6.0 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.2 + + upath@2.0.1: {} + + vite-plugin-vuetify@2.0.3(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6))(vue@3.4.31(typescript@5.5.3))(vuetify@3.6.11): + dependencies: + '@vuetify/loader-shared': 2.0.3(vue@3.4.31(typescript@5.5.3))(vuetify@3.6.11(typescript@5.5.3)(vite-plugin-vuetify@2.0.3)(vue@3.4.31(typescript@5.5.3))) + debug: 4.3.5 + upath: 2.0.1 + vite: 5.3.3(@types/node@20.14.9)(sass@1.77.6) + vue: 3.4.31(typescript@5.5.3) + vuetify: 3.6.11(typescript@5.5.3)(vite-plugin-vuetify@2.0.3)(vue@3.4.31(typescript@5.5.3)) + transitivePeerDependencies: + - supports-color + + vite@5.3.3(@types/node@20.14.9)(sass@1.77.6): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.39 + rollup: 4.18.0 + optionalDependencies: + '@types/node': 20.14.9 + fsevents: 2.3.3 + sass: 1.77.6 + + vscode-uri@3.0.8: {} + + vue-template-compiler@2.7.16: + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + vue-tsc@2.0.26(typescript@5.5.3): + dependencies: + '@volar/typescript': 2.4.0-alpha.15 + '@vue/language-core': 2.0.26(typescript@5.5.3) + semver: 7.6.2 + typescript: 5.5.3 + + vue@3.4.31(typescript@5.5.3): + dependencies: + '@vue/compiler-dom': 3.4.31 + '@vue/compiler-sfc': 3.4.31 + '@vue/runtime-dom': 3.4.31 + '@vue/server-renderer': 3.4.31(vue@3.4.31(typescript@5.5.3)) + '@vue/shared': 3.4.31 + optionalDependencies: + typescript: 5.5.3 + + vuetify@3.6.11(typescript@5.5.3)(vite-plugin-vuetify@2.0.3)(vue@3.4.31(typescript@5.5.3)): + dependencies: + vue: 3.4.31(typescript@5.5.3) + optionalDependencies: + typescript: 5.5.3 + vite-plugin-vuetify: 2.0.3(vite@5.3.3(@types/node@20.14.9)(sass@1.77.6))(vue@3.4.31(typescript@5.5.3))(vuetify@3.6.11) + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.2: {} diff --git a/web/public/favicon.ico b/web/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..8fb9f91b3aab4eec0c76ffc5342528033c61e247 GIT binary patch literal 15406 zcmZQzU}Rus5D);-3Je)63=C!r3=9ei5Wa>W1H(KP1_lEI2tPxOf#H}a1A_(w1A_oa z9Roz1VF19M6fyD3Rbt}gTD?DAe9o0h@j2w^-~!o?}ZZazh9?`7?WrQ_k|{r~T-v-y8_-9NDY|8*~1|NpPkMbG|kU|@oo z@&Df1WUyY4{>w99`v3huR&8}KT`UNs|4ko4KPW7}PZdoD>HmLw8{hxC>t4Y1-&y88xT=H#9IENR!z2X)>z*Z_~wI{GTMm_y5)!^Z$3(wPWBb)7$@_XlVa`utxE0 zfw1Pc>7wlzc&4y9$PELDLFJ4B0|SG@0G2ZY>3@3I4Jvy;m>zavvtxg{Sj^>eu^4P} zv=-YLE6%+?UHr+Va`7ks7m0Jz+CFsi52lMZgYrM94E#Dxv>9EVmi+x05()>>CBA{| z2jLf8;@`ecmjGoqT3QP?dw;sbYLLA!e7zc6kF16(pdsT>s)YT)bVMBna>MaliT~eb zi2eIMT?ACz(9HH#p$yCi(#6k%>_o?)dg$wPu?zoKF)-800SD5=($MXN@$WZ*;{a5b zr_;jz{RsjB2ht>7!R$k)FP1^<|2AFh)&G7_tCYH~IFK&hhHfV^|45bu$nW6x$hT>t z{nWLcf#E=^geS6n*w~;n0BQq#n=bn6=S*Qx6-ZTQ97vbgip^e_*uxe?TjKk4(QVYQ z{QtQgyZ^RI_T&Gt3Kfw4GiieS z2h$~9!t6w*L3IHn{t@x;ZJJmSNFS;A|Ls+x|L?AQ|Nl$}$o~KTk5+AjnXwN~IRI-< z!`$(8y6A_`)5XPLdWog~-&s2o+;%vXYMAbrH* z|F_l~{J*#E4~G56s;~Ut-@pPgXCIb&02CL`zWkQqm_CFPOZ0U&ogXvSr~7^trp3etxQ|39{h^Z&hd_fhPJ_j^EnCn!Ez zJr!og{!~ai2xK=1-^Xje*n|IlGMq5I==A?PYim*L2KoQiivRzQ)u4yL@Bc@ubU^w+ z?Z5-+5|2T4gYW~SG7u5=h%os&U91+Q4;}x%y;kP`-L+pZ><78wd_TJVApRbh8T&KD zqCs|p@ME0u4{^iyX<}c#O%jrU>4nk%@2*>d)ozgew^#rFf3g{5CmOB^0O<$y0S=^# z9|PI{vIk-hHoqf@Edl9+;r|cTS%Ul6AiHqk+pGTnKhue3fAyXJw{zJ+<{U_sFg=(q z@fS;f7E4|b`}b{zm?cObs2}|Q?z&Sr{f_RQ>kIz>KiBvF|H&qpTPi^2fbiKOvH3`T z#AYv&nCK}`UmtA$`S}9>$;JB{ctCc8@c)?%tnd2;1c=4||1&Ux^o`w4BB)|Y z7#$}Wxrt!t`SOKlwLaO;kl0K9=NEiQz>}F*4 zp-hSYpg!35>0%$h&Jg#dwR=c0A6i#kMRqSX_Tx549DJWHer>SSX^=55i8^fVMHjnL z0dYU5FZy+=SOYER1c(iP(7K0%=@Jjo-HMHWA|H~5K<@uGUGxzd>m-PE7E$Vsh01Uq zOp}-lTDO7Cz35_~a`Y8q9OUn}>7tYIjXM$L2nrPKPZc#dkS_5W-JQ7jpgjDb1t|?p z6MOS@s<0^qPM}EZzEm;y1L+c9ak&?p_>CHIP(1)2Z}~c1Y{&me4B)XMiX20R=EIqC zg8S1YH(+xoE-`3Z0`C5A)5ZRLohFh-hV@j@axhce??Af5J6!HX7eA3F{{O>7^szwE zJM@|-2Cu!@HVGczo71GY4rYiiMRzAIK4^Uv`r4Xr)5U&%ohH`!f0Y*5b2`LE#{V;u zl>eV;FaE#30p6$DohBs*>Z{;#GrBmAvETke|%{r|s;`TzArv;LoGc=7*O zts$}*`_se=4x~%`Mt3VVJ}3`E>HySq^mV%UTw2y?|L?5!{C{KN5Ab@e<5e5~pGjkd z`C)&8sKkMEi9^`ji!KIR--hW2@ti?@6;N`}?3^8kB;sB`~fm|0r*`jB^&6L8q?vYgg{J*od2|n+6whI*Q$oLLu%^%E6 za5~Bm>%cugE?0On#Y?0suy7P90rxA zX%g2!?!<-fHX_Aj!ez2crh;Dv2Q;;8KE~)hYyKAHV-(B|!#r@dlEdT#MT7CTg z;R->R9s9Gu<>_Ty?!Qt=g!`w9efl;{BnoCGDfIt4>%{)wUAr5_?V#|#G#wV^==9hB z$E!1t)6t;}$>0O&5?I%zTq-BZ{r|sD7u!wFxY7SRYt#SVUH22i{h)bD(0T#v_~id% z)zYwV0`)ETr%SBB76+hqC^(Hk)-gcK9atTJLW9~y889=6q5t3CD)ImBx|bMk2ZjHw z<^TVmXhaWt2>)o+A5eLUY{%|2aoq!Hhw>i_@G!PZ+t*DavN#n=CbE7f4;Uun={JD4Haj@~vRHvPcj==*fB z`TrXTw@?4yUgQ4%&bl`^-4F7^mD&IQAFqXkIjY-XV(b22LCinzNte*tpC*1A7WN>T z$ovZqe~=%(P7{0cW4f3-EL^bB|L?Bi|9@xQN`h+!?yUO%AAS7{vOkVjfB1i_8onk4 zT&Jar=Yre~!$g&zsCnbxx9OrQ|Kll7|36so`Ts6bT?GnjT=?eF|KPm`$nHjEZ~wo) z0Y2sr%F72bB#y(}4_lWB3R@EJcU5cJCou?rvP$Os{u3t~g|GpzqdlKbzj{r?{n4_Mn2)u1}< z+5a<$I5?9g#RVN-|Mzh++3x@MZMt|n$jvbP|Lz)-|M%8ECC%;Y{-dbBHt#=pO&@4K z%<(! + + + + + + + + diff --git a/web/src/assets/logo.png b/web/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5f23ae7bff64954cf3537377a9f99306baf083d GIT binary patch literal 11955 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 + + + + + diff --git a/web/src/components/HelloWorld.vue b/web/src/components/HelloWorld.vue new file mode 100644 index 0000000..9eb8594 --- /dev/null +++ b/web/src/components/HelloWorld.vue @@ -0,0 +1,157 @@ + + + diff --git a/web/src/components/README.md b/web/src/components/README.md new file mode 100644 index 0000000..d1dc92f --- /dev/null +++ b/web/src/components/README.md @@ -0,0 +1,35 @@ +# Components + +Vue template files in this folder are automatically imported. + +## 🚀 Usage + +Importing is handled by [unplugin-vue-components](https://github.com/unplugin/unplugin-vue-components). This plugin automatically imports `.vue` files created in the `src/components` directory, and registers them as global components. This means that you can use any component in your application without having to manually import it. + +The following example assumes a component located at `src/components/MyComponent.vue`: + +```vue + + + +``` + +When your template is rendered, the component's import will automatically be inlined, which renders to this: + +```vue + + + +``` diff --git a/web/src/main.ts b/web/src/main.ts new file mode 100644 index 0000000..c8fc172 --- /dev/null +++ b/web/src/main.ts @@ -0,0 +1,20 @@ +/** + * main.ts + * + * Bootstraps Vuetify and other plugins then mounts the App` + */ + +// Plugins +import { registerPlugins } from '@/plugins' + +// Components +import App from './App.vue' + +// Composables +import { createApp } from 'vue' + +const app = createApp(App) + +registerPlugins(app) + +app.mount('#app') diff --git a/web/src/plugins/README.md b/web/src/plugins/README.md new file mode 100644 index 0000000..62201c7 --- /dev/null +++ b/web/src/plugins/README.md @@ -0,0 +1,3 @@ +# Plugins + +Plugins are a way to extend the functionality of your Vue application. Use this folder for registering plugins that you want to use globally. diff --git a/web/src/plugins/index.ts b/web/src/plugins/index.ts new file mode 100644 index 0000000..818042a --- /dev/null +++ b/web/src/plugins/index.ts @@ -0,0 +1,15 @@ +/** + * plugins/index.ts + * + * Automatically included in `./src/main.ts` + */ + +// Plugins +import vuetify from './vuetify' + +// Types +import type { App } from 'vue' + +export function registerPlugins (app: App) { + app.use(vuetify) +} diff --git a/web/src/plugins/vuetify.ts b/web/src/plugins/vuetify.ts new file mode 100644 index 0000000..7652788 --- /dev/null +++ b/web/src/plugins/vuetify.ts @@ -0,0 +1,19 @@ +/** + * plugins/vuetify.ts + * + * Framework documentation: https://vuetifyjs.com` + */ + +// Styles +import '@mdi/font/css/materialdesignicons.css' +import 'vuetify/styles' + +// Composables +import { createVuetify } from 'vuetify' + +// https://vuetifyjs.com/en/introduction/why-vuetify/#feature-guides +export default createVuetify({ + theme: { + defaultTheme: 'dark', + }, +}) diff --git a/web/src/vite-env.d.ts b/web/src/vite-env.d.ts new file mode 100644 index 0000000..323c78a --- /dev/null +++ b/web/src/vite-env.d.ts @@ -0,0 +1,7 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent<{}, {}, any> + export default component +} diff --git a/web/tsconfig.json b/web/tsconfig.json new file mode 100644 index 0000000..c5ed714 --- /dev/null +++ b/web/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ESNext", + "jsx": "preserve", + "lib": ["DOM", "ESNext"], + "baseUrl": ".", + "module": "ESNext", + "moduleResolution": "bundler", + "paths": { + "@/*": ["src/*"] + }, + "resolveJsonModule": true, + "types": [ + "vite/client" + ], + "allowJs": true, + "strict": true, + "strictNullChecks": true, + "noUnusedLocals": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "isolatedModules": true, + "skipLibCheck": true + }, + "include": [ + "src/**/*", + "src/**/*.vue" + ], + "exclude": ["dist", "node_modules", "cypress"], + "references": [{ "path": "./tsconfig.node.json" }], +} diff --git a/web/tsconfig.node.json b/web/tsconfig.node.json new file mode 100644 index 0000000..348f346 --- /dev/null +++ b/web/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.mts"] +} diff --git a/web/vite.config.mts b/web/vite.config.mts new file mode 100644 index 0000000..b8d760e --- /dev/null +++ b/web/vite.config.mts @@ -0,0 +1,47 @@ +// Plugins +import Components from 'unplugin-vue-components/vite' +import Vue from '@vitejs/plugin-vue' +import Vuetify, { transformAssetUrls } from 'vite-plugin-vuetify' +import ViteFonts from 'unplugin-fonts/vite' + +// Utilities +import { defineConfig } from 'vite' +import { fileURLToPath, URL } from 'node:url' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + Vue({ + template: { transformAssetUrls }, + }), + // https://github.com/vuetifyjs/vuetify-loader/tree/master/packages/vite-plugin#readme + Vuetify(), + Components(), + ViteFonts({ + google: { + families: [{ + name: 'Roboto', + styles: 'wght@100;300;400;500;700;900', + }], + }, + }), + ], + define: { 'process.env': {} }, + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)), + }, + extensions: [ + '.js', + '.json', + '.jsx', + '.mjs', + '.ts', + '.tsx', + '.vue', + ], + }, + server: { + port: 3000, + }, +})