From 241c12ffae3c5efc137d95b8c3d2d8e0d0662719 Mon Sep 17 00:00:00 2001 From: Gijsdeman Date: Mon, 16 Oct 2023 16:01:25 +0200 Subject: [PATCH 001/252] Initial commit --- .env | 2 + .eslintrc.cjs | 39 + .gitignore | 28 + .prettierrc.json | 8 + README.md | 46 + env.d.ts | 1 + index.html | 13 + package-lock.json | 4903 ++++++++++++++++++++ package.json | 52 + public/favicon.ico | Bin 0 -> 4286 bytes src/App.vue | 8 + src/api/Client.ts | 1117 +++++ src/assets/base.css | 73 + src/assets/img/AVICO.svg | 1 + src/assets/img/bier.png | Bin 0 -> 174887 bytes src/assets/img/gewis-branding.svg | 24 + src/assets/logo.svg | 1 + src/assets/main.css | 40 + src/components/CopyrightBanner.vue | 37 + src/components/TopNavbar.vue | 183 + src/components/icons/IconCommunity.vue | 7 + src/components/icons/IconDocumentation.vue | 7 + src/components/icons/IconEcosystem.vue | 7 + src/components/icons/IconSupport.vue | 7 + src/components/icons/IconTooling.vue | 19 + src/layout/CopyrightBanner.vue | 39 + src/layout/DashboardLayout.vue | 15 + src/layout/PublicLayout.vue | 10 + src/locales/en.json | 51 + src/locales/index.ts | 9 + src/locales/nl.json | 24 + src/main.ts | 57 + src/router/index.ts | 52 + src/styles/BasePage.css | 39 + src/utils/formatterUtils.ts | 26 + src/utils/imageUtils.ts | 12 + src/utils/validation-schema.ts | 12 + src/views/HomeView.vue | 24 + src/views/LoginView.vue | 100 + tsconfig.app.json | 12 + tsconfig.json | 11 + tsconfig.node.json | 15 + vite.config.ts | 16 + 43 files changed, 7147 insertions(+) create mode 100644 .env create mode 100644 .eslintrc.cjs create mode 100644 .gitignore create mode 100644 .prettierrc.json create mode 100644 README.md create mode 100644 env.d.ts create mode 100644 index.html create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/api/Client.ts create mode 100644 src/assets/base.css create mode 100644 src/assets/img/AVICO.svg create mode 100644 src/assets/img/bier.png create mode 100644 src/assets/img/gewis-branding.svg create mode 100644 src/assets/logo.svg create mode 100644 src/assets/main.css create mode 100644 src/components/CopyrightBanner.vue create mode 100644 src/components/TopNavbar.vue create mode 100644 src/components/icons/IconCommunity.vue create mode 100644 src/components/icons/IconDocumentation.vue create mode 100644 src/components/icons/IconEcosystem.vue create mode 100644 src/components/icons/IconSupport.vue create mode 100644 src/components/icons/IconTooling.vue create mode 100644 src/layout/CopyrightBanner.vue create mode 100644 src/layout/DashboardLayout.vue create mode 100644 src/layout/PublicLayout.vue create mode 100644 src/locales/en.json create mode 100644 src/locales/index.ts create mode 100644 src/locales/nl.json create mode 100644 src/main.ts create mode 100644 src/router/index.ts create mode 100644 src/styles/BasePage.css create mode 100644 src/utils/formatterUtils.ts create mode 100644 src/utils/imageUtils.ts create mode 100644 src/utils/validation-schema.ts create mode 100644 src/views/HomeView.vue create mode 100644 src/views/LoginView.vue create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.env b/.env new file mode 100644 index 00000000..cfa5959a --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +VITE_APP_API_BASE=https://sudosos.test.gewis.nl/api/v1 +VITE_APP_GEWIS_TOKEN=sudosos diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 00000000..04043ebb --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,39 @@ +/* eslint-env node */ +require('@rushstack/eslint-patch/modern-module-resolution'); + +module.exports = { + root: true, + plugins: ['import'], + 'extends': [ + 'plugin:vue/vue3-essential', + 'eslint:recommended', + '@vue/eslint-config-typescript', + '@vue/eslint-config-prettier/skip-formatting', + 'plugin:@intlify/vue-i18n/recommended' + ], + + ignorePatterns: ["/src/components/icons/*.vue"], + rules: { + 'max-len': ['warn', { "code": 120 } ], + 'semi': ['error', 'always'], + 'object-curly-spacing': ['error', 'always'], + "vue/component-api-style": ["error", + ["script-setup", "composition"] + ], + "vue/block-lang": ["error", + { + "script": { + "lang": "ts" + } + } + ], + }, + parserOptions: { + ecmaVersion: 'latest', + }, + settings: { + "vue-i18n": { + "localeDir": "/src/locales", + } + } +}; diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..38adffa6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.prettierrc.json b/.prettierrc.json new file mode 100644 index 00000000..e56064e9 --- /dev/null +++ b/.prettierrc.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/prettierrc", + "semi": true, + "tabWidth": 2, + "singleQuote": true, + "printWidth": 100, + "trailingComma": "none" +} diff --git a/README.md b/README.md new file mode 100644 index 00000000..1f993f25 --- /dev/null +++ b/README.md @@ -0,0 +1,46 @@ +# sudosos-frontend-vue3 + +This template should help get you started developing with Vue 3 in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin). + +## Type Support for `.vue` Imports in TS + +TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types. + +If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps: + +1. Disable the built-in TypeScript Extension + 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette + 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)` +2. Reload the VSCode window by running `Developer: Reload Window` from the command palette. + +## Customize configuration + +See [Vite Configuration Reference](https://vitejs.dev/config/). + +## Project Setup + +```sh +npm install +``` + +### Compile and Hot-Reload for Development + +```sh +npm run dev +``` + +### Type-Check, Compile and Minify for Production + +```sh +npm run build +``` + +### Lint with [ESLint](https://eslint.org/) + +```sh +npm run lint +``` diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 00000000..11f02fe2 --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/index.html b/index.html new file mode 100644 index 00000000..a8885448 --- /dev/null +++ b/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..52d47cec --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4903 @@ +{ + "name": "narrowcasting-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "narrowcasting-frontend", + "version": "0.0.0", + "dependencies": { + "@vee-validate/yup": "^4.11.1", + "axios": "^1.5.1", + "jwt-decode": "^3.1.2", + "pinia": "^2.1.3", + "primeicons": "^6.0.1", + "primevue": "^3.30.1", + "sass": "^1.63.6", + "stripe": "^12.14.0", + "uuid": "^9.0.0", + "vee-validate": "^4.11.1", + "vue": "^3.3.4", + "vue-i18n": "^9.2.2", + "vue-router": "^4.2.2", + "yup": "^1.2.0" + }, + "devDependencies": { + "@intlify/eslint-plugin-vue-i18n": "^2.0.0", + "@rushstack/eslint-patch": "^1.2.0", + "@tsconfig/node18": "^2.0.1", + "@types/lodash": "^4.14.198", + "@types/node": "^18.16.17", + "@types/uuid": "^9.0.2", + "@vitejs/plugin-vue": "^4.2.3", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.50.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-vue": "^9.11.0", + "lodash": "^4.17.21", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "typescript": "~5.0.4", + "vite": "^4.3.9", + "vue-tsc": "^1.6.5" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz", + "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.9.1.tgz", + "integrity": "sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.4.1.tgz", + "integrity": "sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.4.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.51.0.tgz", + "integrity": "sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.11", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.11.tgz", + "integrity": "sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==", + "dev": true, + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.1", + "debug": "^4.1.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", + "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", + "dev": true + }, + "node_modules/@intlify/core-base": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.5.0.tgz", + "integrity": "sha512-y3ufM1RJbI/DSmJf3lYs9ACq3S/iRvaSsE3rPIk0MGH7fp+JxU6rdryv/EYcwfcr3Y1aHFlCBir6S391hRZ57w==", + "dependencies": { + "@intlify/message-compiler": "9.5.0", + "@intlify/shared": "9.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/eslint-plugin-vue-i18n": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@intlify/eslint-plugin-vue-i18n/-/eslint-plugin-vue-i18n-2.0.0.tgz", + "integrity": "sha512-ECBD0TvQNa56XKyuM6FPIGAAl7MP6ODcgjBQJrzucNxcTb8fYTWmZ+xgBuvmvAtA0iE0D4Wp18UMild2N0bGyw==", + "dev": true, + "dependencies": { + "@eslint/eslintrc": "^1.2.0", + "@intlify/core-base": "^9.1.9", + "@intlify/message-compiler": "^9.1.9", + "debug": "^4.3.1", + "glob": "^8.0.0", + "ignore": "^5.0.5", + "is-language-code": "^3.1.0", + "js-yaml": "^4.0.0", + "json5": "^2.1.3", + "jsonc-eslint-parser": "^2.0.0", + "lodash": "^4.17.11", + "parse5": "^7.0.0", + "semver": "^7.3.4", + "vue-eslint-parser": "^9.0.0", + "yaml-eslint-parser": "^1.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.5.0.tgz", + "integrity": "sha512-CAhVNfEZcOVFg0/5MNyt+OFjvs4J/ARjCj2b+54/FvFP0EDJI5lIqMTSDBE7k0atMROSP0SvWCkwu/AZ5xkK1g==", + "dependencies": { + "@intlify/shared": "9.5.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.5.0.tgz", + "integrity": "sha512-tAxV14LMXZDZbu32XzLMTsowNlgJNmLwWHYzvMUl6L8gvQeoYiZONjY7AUsqZW8TOZDX9lfvF6adPkk9FSRdDA==", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "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/@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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", + "integrity": "sha512-6i/8UoL0P5y4leBIGzvkZdS85RDMG9y1ihZzmTZQ5LdHUYmZ7pKFoj8X0236s3lusPs1Fa5HTQUpwI+UfTcmeA==", + "dev": true + }, + "node_modules/@tsconfig/node18": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tsconfig/node18/-/node18-2.0.1.tgz", + "integrity": "sha512-UqdfvuJK0SArA2CxhKWwwAWfnVSXiYe63bVpMutc27vpngCntGUZQETO24pEJ46zU6XM+7SpqYoMgcO3bM11Ew==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.13", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", + "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.14.199", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.199.tgz", + "integrity": "sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==", + "dev": true + }, + "node_modules/@types/node": { + "version": "18.18.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.18.5.tgz", + "integrity": "sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==" + }, + "node_modules/@types/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.5.tgz", + "integrity": "sha512-xfHdwa1FMJ082prjSJpoEI57GZITiQz10r3vEJCHa2khEFQjKy91aWKz6+zybzssCvXUwE1LQWgWVwZ4nYUvHQ==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", + "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", + "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", + "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@vee-validate/yup": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/@vee-validate/yup/-/yup-4.11.8.tgz", + "integrity": "sha512-TUmL8UeUu5Iirth8XRg33VYyMYumt15ZMF4Ni5tjMHVluVcysSGdHIMxTJSwTN8BkMGs2/JR/28IM8eJGHnBQw==", + "dependencies": { + "type-fest": "^4.3.1", + "vee-validate": "4.11.8", + "yup": "^1.2.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.0.tgz", + "integrity": "sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.4.tgz", + "integrity": "sha512-Na69qA6uwVIdA0rHuOc2W3pHtVQQO8hCNim7FOaKNpRJh0oAFnu5r9i7Oopo5C4cnELZkPNjTrbmpcCTiW+CMQ==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.10.4" + } + }, + "node_modules/@volar/source-map": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.4.tgz", + "integrity": "sha512-RxZdUEL+pV8p+SMqnhVjzy5zpb1QRZTlcwSk4bdcBO7yOu4rtEWqDGahVCEj4CcXour+0yJUMrMczfSCpP9Uxg==", + "dev": true, + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.4.tgz", + "integrity": "sha512-BCCUEBASBEMCrz7qmNSi2hBEWYsXD0doaktRKpmmhvb6XntM2sAWYu6gbyK/MluLDgluGLFiFRpWgobgzUqolg==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.10.4" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz", + "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==", + "dependencies": { + "@babel/parser": "^7.21.3", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz", + "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==", + "dependencies": { + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz", + "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-ssr": "3.3.4", + "@vue/reactivity-transform": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0", + "postcss": "^8.1.10", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz", + "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/eslint-config-prettier": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-prettier/-/eslint-config-prettier-7.1.0.tgz", + "integrity": "sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==", + "dev": true, + "dependencies": { + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^4.0.0" + }, + "peerDependencies": { + "eslint": ">= 7.28.0", + "prettier": ">= 2.0.0" + } + }, + "node_modules/@vue/eslint-config-typescript": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", + "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "^5.59.1", + "@typescript-eslint/parser": "^5.59.1", + "vue-eslint-parser": "^9.1.1" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", + "eslint-plugin-vue": "^9.0.0", + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.19", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.19.tgz", + "integrity": "sha512-nt3dodGs97UM6fnxeQBazO50yYCKBK53waFWB3qMbLmR6eL3aUryZgQtZoBe1pye17Wl8fs9HysV3si6xMgndQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "~1.10.4", + "@volar/source-map": "~1.10.4", + "@vue/compiler-dom": "^3.3.0", + "@vue/reactivity": "^3.3.0", + "@vue/shared": "^3.3.0", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz", + "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==", + "dependencies": { + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz", + "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==", + "dependencies": { + "@babel/parser": "^7.20.15", + "@vue/compiler-core": "3.3.4", + "@vue/shared": "3.3.4", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.0" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz", + "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==", + "dependencies": { + "@vue/reactivity": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz", + "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==", + "dependencies": { + "@vue/runtime-core": "3.3.4", + "@vue/shared": "3.3.4", + "csstype": "^3.1.1" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz", + "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==", + "dependencies": { + "@vue/compiler-ssr": "3.3.4", + "@vue/shared": "3.3.4" + }, + "peerDependencies": { + "vue": "3.3.4" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz", + "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==" + }, + "node_modules/@vue/tsconfig": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@vue/tsconfig/-/tsconfig-0.4.0.tgz", + "integrity": "sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==", + "dev": true + }, + "node_modules/@vue/typescript": { + "version": "1.8.19", + "resolved": "https://registry.npmjs.org/@vue/typescript/-/typescript-1.8.19.tgz", + "integrity": "sha512-k/SHeeQROUgqsxyHQ8Cs3Zz5TnX57p7BcBDVYR2E0c61QL2DJ2G8CsaBremmNGuGE6o1R5D50IHIxFmroMz8iw==", + "dev": true, + "dependencies": { + "@volar/typescript": "~1.10.4", + "@vue/language-core": "1.8.19" + } + }, + "node_modules/acorn": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", + "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", + "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", + "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", + "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.5.1.tgz", + "integrity": "sha512-Q28iYCWzNHjAm+yEAot5QaAMxhMghWLFVf7rRdwhUI+c2jix2DUXjAHXVi+s1ibs3mjPO/cCgbA++3BjD0vP/A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "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==", + "dev": true + }, + "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/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "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/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "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/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==", + "dev": true, + "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==", + "dev": true + }, + "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/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "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==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "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==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "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/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.2.tgz", + "integrity": "sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.1", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.51.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.51.0.tgz", + "integrity": "sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.2", + "@eslint/js": "8.51.0", + "@humanwhocodes/config-array": "^0.11.11", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.10.0.tgz", + "integrity": "sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", + "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.28.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.28.1.tgz", + "integrity": "sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.findlastindex": "^1.2.2", + "array.prototype.flat": "^1.3.1", + "array.prototype.flatmap": "^1.3.1", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.7", + "eslint-module-utils": "^2.8.0", + "has": "^1.0.3", + "is-core-module": "^2.13.0", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.6", + "object.groupby": "^1.0.0", + "object.values": "^1.1.6", + "semver": "^6.3.1", + "tsconfig-paths": "^3.14.2" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz", + "integrity": "sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "eslint": ">=7.28.0", + "prettier": ">=2.0.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue": { + "version": "9.17.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.17.0.tgz", + "integrity": "sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.13", + "semver": "^7.5.4", + "vue-eslint-parser": "^9.3.1", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/@eslint/eslintrc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.2.tgz", + "integrity": "sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", + "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "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/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.1.tgz", + "integrity": "sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", + "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "dev": true + }, + "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/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "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/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "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/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/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==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/globals": { + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz", + "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/internal-slot": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", + "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz", + "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "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-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-language-code": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-language-code/-/is-language-code-3.1.0.tgz", + "integrity": "sha512-zJdQ3QTeLye+iphMeK3wks+vXSRFKh68/Pnlw7aOfApFSEIOhYa8P9vwwa6QrImNNBMJTiL1PpYF0f4BxDuEgA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.14.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", + "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.11" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.3.0.tgz", + "integrity": "sha512-9xZPKVYp9DxnM3sd1yAsh/d59iIaswDkai8oTxbursfKYbg/ibjX0IzFt35+VZ8iEW453TVTXztnRvYUQlAfUQ==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jwt-decode": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/jwt-decode/-/jwt-decode-3.1.2.tgz", + "integrity": "sha512-UfpWE/VZn0iP50d8cz9NrZLM9lSWhcJ+0Gt/nm4by88UL+J1SiKN8/5dkjMmbEzwL2CAe+67GsegCbIKtbp75A==" + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "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==", + "dev": true, + "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": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "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/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "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/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", + "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", + "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" + } + }, + "node_modules/object.values": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", + "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", + "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "dev": true, + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dev": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pinia": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.6.tgz", + "integrity": "sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/primeicons": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/primeicons/-/primeicons-6.0.1.tgz", + "integrity": "sha512-KDeO94CbWI4pKsPnYpA1FPjo79EsY9I+M8ywoPBSf9XMXoe/0crjbUK7jcQEDHuc0ZMRIZsxH3TYLv4TUtHmAA==" + }, + "node_modules/primevue": { + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/primevue/-/primevue-3.36.0.tgz", + "integrity": "sha512-si+pcbh+Y2by8cn4UrPFkC+ncS5fcv3ShKbTGINOsloKParRbSiqgBsqI8QmVkmutSLyABe6v5Kutjdenw2JFw==", + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/property-expr": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.5.tgz", + "integrity": "sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==" + }, + "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/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "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/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "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/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", + "dev": true + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", + "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "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/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "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==", + "dev": true, + "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/safe-array-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", + "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sass": { + "version": "1.69.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.3.tgz", + "integrity": "sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==", + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", + "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "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/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", + "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "dev": true + }, + "node_modules/string.prototype.padend": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stripe": { + "version": "12.18.0", + "resolved": "https://registry.npmjs.org/stripe/-/stripe-12.18.0.tgz", + "integrity": "sha512-cYjgBM2SY/dTm8Lr6eMyyONaHTZHA/QjHxFUIW5WH8FevSRIGAVtXEmBkUXF1fsqe7QvvRgQSGSJZmjDacegGg==", + "dependencies": { + "@types/node": ">=8.1.0", + "qs": "^6.11.0" + }, + "engines": { + "node": ">=12.*" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, + "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/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, + "node_modules/tsconfig-paths": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", + "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.4.0.tgz", + "integrity": "sha512-HT3RRs7sTfY22KuPQJkD/XjbTbxgP2Je5HPt6H6JEGvcjHd5Lqru75EbrP3tb4FYjNJ+DjLp+MNQTFQU0mhXNw==", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.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==", + "dev": true + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vee-validate": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/vee-validate/-/vee-validate-4.11.8.tgz", + "integrity": "sha512-ZuVpw0axWYBM3aVTD/bm94hcWHumqeUgNjptOqfBT0gyqyHaGYCrm0tSD/0bygEbWUDwEPJOQaEKaUGM82j8TQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "type-fest": "^4.3.1" + }, + "peerDependencies": { + "vue": "^3.3.4" + } + }, + "node_modules/vite": { + "version": "4.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.11.tgz", + "integrity": "sha512-ksNZJlkcU9b0lBwAGZGGaZHCMqHsc8OpgtoYhsQ4/I2v5cnpmmmqe5pM4nv/4Hn6G/2GhTdj0DhZh2e+Er1q5A==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "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/vue": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz", + "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==", + "dependencies": { + "@vue/compiler-dom": "3.3.4", + "@vue/compiler-sfc": "3.3.4", + "@vue/runtime-dom": "3.3.4", + "@vue/server-renderer": "3.3.4", + "@vue/shared": "3.3.4" + } + }, + "node_modules/vue-eslint-parser": { + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", + "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vue-i18n": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-9.5.0.tgz", + "integrity": "sha512-NiI3Ph1qMstNf7uhYh8trQBOBFLxeJgcOxBq51pCcZ28Vs18Y7BDS58r8HGDKCYgXdLUYqPDXdKatIF4bvBVZg==", + "dependencies": { + "@intlify/core-base": "9.5.0", + "@intlify/shared": "9.5.0", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.14.tgz", + "integrity": "sha512-zyA5Y3ArvVG0NacJDkkzJuPQDF8RFeRlzV2vLeSnhSpieO6LK2OVbdLPi5MPPs09Ii+gMO8nY4S3iKQxBxDmWQ==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.19", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.19.tgz", + "integrity": "sha512-tacMQLQ0CXAfbhRycCL5sWIy1qujXaIEtP1hIQpzHWOUuICbtTj9gJyFf91PvzG5KCNIkA5Eg7k2Fmgt28l5DQ==", + "dev": true, + "dependencies": { + "@vue/language-core": "1.8.19", + "@vue/typescript": "1.8.19", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.11.tgz", + "integrity": "sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz", + "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", + "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "lodash": "^4.17.21", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yup": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.3.2.tgz", + "integrity": "sha512-6KCM971iQtJ+/KUaHdrhVr2LDkfhBtFPRnsG1P8F4q3uUVQ2RfEM9xekpha9aA4GXWJevjM10eDcPQ1FfWlmaQ==", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup/node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..84b4fd52 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "narrowcasting-frontend", + "version": "0.0.0", + "private": true, + "scripts": { + "dev": "vite", + "build": "run-p type-check build-only", + "preview": "vite preview", + "build-only": "vite build", + "type-check": "vue-tsc --noEmit -p tsconfig.app.json --composite false", + "lint": "eslint . --ext .vue,.js,.jsx,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore", + "lint-fix": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore --fix", + "format": "prettier --write src/" + }, + "dependencies": { + "@vee-validate/yup": "^4.11.1", + "jwt-decode": "^3.1.2", + "pinia": "^2.1.3", + "primeicons": "^6.0.1", + "primevue": "^3.30.1", + "sass": "^1.63.6", + "stripe": "^12.14.0", + "uuid": "^9.0.0", + "vee-validate": "^4.11.1", + "vue": "^3.3.4", + "vue-i18n": "^9.2.2", + "vue-router": "^4.2.2", + "yup": "^1.2.0", + "axios": "^1.5.1" + }, + "devDependencies": { + "@intlify/eslint-plugin-vue-i18n": "^2.0.0", + "@rushstack/eslint-patch": "^1.2.0", + "@tsconfig/node18": "^2.0.1", + "@types/lodash": "^4.14.198", + "@types/node": "^18.16.17", + "@types/uuid": "^9.0.2", + "@vitejs/plugin-vue": "^4.2.3", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "@vue/tsconfig": "^0.4.0", + "eslint": "^8.50.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-vue": "^9.11.0", + "lodash": "^4.17.21", + "npm-run-all": "^4.1.5", + "prettier": "^2.8.8", + "typescript": "~5.0.4", + "vite": "^4.3.9", + "vue-tsc": "^1.6.5" + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..df36fcfb72584e00488330b560ebcf34a41c64c2 GIT binary patch literal 4286 zcmds*O-Phc6o&64GDVCEQHxsW(p4>LW*W<827=Unuo8sGpRux(DN@jWP-e29Wl%wj zY84_aq9}^Am9-cWTD5GGEo#+5Fi2wX_P*bo+xO!)p*7B;iKlbFd(U~_d(U?#hLj56 zPhFkj-|A6~Qk#@g^#D^U0XT1cu=c-vu1+SElX9NR;kzAUV(q0|dl0|%h|dI$%VICy zJnu2^L*Te9JrJMGh%-P79CL0}dq92RGU6gI{v2~|)p}sG5x0U*z<8U;Ij*hB9z?ei z@g6Xq-pDoPl=MANPiR7%172VA%r)kevtV-_5H*QJKFmd;8yA$98zCxBZYXTNZ#QFk2(TX0;Y2dt&WitL#$96|gJY=3xX zpCoi|YNzgO3R`f@IiEeSmKrPSf#h#Qd<$%Ej^RIeeYfsxhPMOG`S`Pz8q``=511zm zAm)MX5AV^5xIWPyEu7u>qYs?pn$I4nL9J!=K=SGlKLXpE<5x+2cDTXq?brj?n6sp= zphe9;_JHf40^9~}9i08r{XM$7HB!`{Ys~TK0kx<}ZQng`UPvH*11|q7&l9?@FQz;8 zx!=3<4seY*%=OlbCbcae?5^V_}*K>Uo6ZWV8mTyE^B=DKy7-sdLYkR5Z?paTgK-zyIkKjIcpyO z{+uIt&YSa_$QnN_@t~L014dyK(fOOo+W*MIxbA6Ndgr=Y!f#Tokqv}n<7-9qfHkc3 z=>a|HWqcX8fzQCT=dqVbogRq!-S>H%yA{1w#2Pn;=e>JiEj7Hl;zdt-2f+j2%DeVD zsW0Ab)ZK@0cIW%W7z}H{&~yGhn~D;aiP4=;m-HCo`BEI+Kd6 z={Xwx{TKxD#iCLfl2vQGDitKtN>z|-AdCN|$jTFDg0m3O`WLD4_s#$S literal 0 HcmV?d00001 diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 00000000..2838123d --- /dev/null +++ b/src/App.vue @@ -0,0 +1,8 @@ + + + diff --git a/src/api/Client.ts b/src/api/Client.ts new file mode 100644 index 00000000..ff3866ff --- /dev/null +++ b/src/api/Client.ts @@ -0,0 +1,1117 @@ +//---------------------- +// +// Generated using the NSwag toolchain v13.20.0.0 (NJsonSchema v10.9.0.0 (Newtonsoft.Json v13.0.0.0)) (http://NSwag.org) +// +//---------------------- + +/* tslint:disable */ +/* eslint-disable */ +// ReSharper disable InconsistentNaming + +export class Client { + private http: { fetch(url: RequestInfo, init?: RequestInit): Promise }; + private baseUrl: string; + protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined; + + constructor(baseUrl?: string, http?: { fetch(url: RequestInfo, init?: RequestInit): Promise }) { + this.http = http ? http : window as any; + this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : "/"; + } + + /** + * @return Ok + */ + getAudioHandlers(): Promise { + let url_ = this.baseUrl + "/handler/audio"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processGetAudioHandlers(_response); + }); + } + + protected processGetAudioHandlers(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + if (Array.isArray(resultData200)) { + result200 = [] as any; + for (let item of resultData200) + result200!.push(Anonymous.fromJS(item)); + } + else { + result200 = null; + } + return result200; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return No content + */ + setAudioHandler(id: number, body: Body): Promise { + let url_ = this.baseUrl + "/handler/audio/{id}"; + if (id === undefined || id === null) + throw new Error("The parameter 'id' must be defined."); + url_ = url_.replace("{id}", encodeURIComponent("" + id)); + url_ = url_.replace(/[?&]$/, ""); + + const content_ = JSON.stringify(body); + + let options_: RequestInit = { + body: content_, + method: "POST", + headers: { + "Content-Type": "application/json", + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processSetAudioHandler(_response); + }); + } + + protected processSetAudioHandler(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 204) { + return response.text().then((_responseText) => { + return; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return Ok + */ + getAudios(): Promise { + let url_ = this.baseUrl + "/audio"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processGetAudios(_response); + }); + } + + protected processGetAudios(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + if (Array.isArray(resultData200)) { + result200 = [] as any; + for (let item of resultData200) + result200!.push(AudioResponse.fromJS(item)); + } + else { + result200 = null; + } + return result200; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return Ok + */ + createAudio(body: AudioCreateParams): Promise { + let url_ = this.baseUrl + "/audio"; + url_ = url_.replace(/[?&]$/, ""); + + const content_ = JSON.stringify(body); + + let options_: RequestInit = { + body: content_, + method: "POST", + headers: { + "Content-Type": "application/json", + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processCreateAudio(_response); + }); + } + + protected processCreateAudio(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + result200 = AudioResponse.fromJS(resultData200); + return result200; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return No content + */ + spotifyLogin(): Promise { + let url_ = this.baseUrl + "/spotify/login"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processSpotifyLogin(_response); + }); + } + + protected processSpotifyLogin(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 204) { + return response.text().then((_responseText) => { + return; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @param code (optional) + * @param error (optional) + * @return Ok + */ + spotifyLoginCallback(state: string, code: string | undefined, error: string | undefined): Promise { + let url_ = this.baseUrl + "/spotify/callback?"; + if (state === undefined || state === null) + throw new Error("The parameter 'state' must be defined and cannot be null."); + else + url_ += "state=" + encodeURIComponent("" + state) + "&"; + if (code === null) + throw new Error("The parameter 'code' cannot be null."); + else if (code !== undefined) + url_ += "code=" + encodeURIComponent("" + code) + "&"; + if (error === null) + throw new Error("The parameter 'error' cannot be null."); + else if (error !== undefined) + url_ += "error=" + encodeURIComponent("" + error) + "&"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processSpotifyLoginCallback(_response); + }); + } + + protected processSpotifyLoginCallback(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + result200 = resultData200 !== undefined ? resultData200 : null; + + return result200; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return Ok + */ + getCurrentSpotifyUser(): Promise { + let url_ = this.baseUrl + "/spotify/user"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processGetCurrentSpotifyUser(_response); + }); + } + + protected processGetCurrentSpotifyUser(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + result200 = SpotifyUserResponse.fromJS(resultData200); + return result200; + }); + } else if (status === 204) { + return response.text().then((_responseText) => { + return throwException("No user active", status, _responseText, _headers); + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return Ok + */ + getAllSpotifyUsers(): Promise { + let url_ = this.baseUrl + "/spotify/users"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processGetAllSpotifyUsers(_response); + }); + } + + protected processGetAllSpotifyUsers(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + if (Array.isArray(resultData200)) { + result200 = [] as any; + for (let item of resultData200) + result200!.push(SpotifyUserResponse.fromJS(item)); + } + else { + result200 = null; + } + return result200; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return No content + */ + deleteSpotifyUser(id: number): Promise { + let url_ = this.baseUrl + "/spotify/users/{id}"; + if (id === undefined || id === null) + throw new Error("The parameter 'id' must be defined."); + url_ = url_.replace("{id}", encodeURIComponent("" + id)); + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "DELETE", + headers: { + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processDeleteSpotifyUser(_response); + }); + } + + protected processDeleteSpotifyUser(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 204) { + return response.text().then((_responseText) => { + return; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return Ok + */ + getSpotifyProfile(): Promise { + let url_ = this.baseUrl + "/spotify/profile"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "GET", + headers: { + "Accept": "application/json" + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processGetSpotifyProfile(_response); + }); + } + + protected processGetSpotifyProfile(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 200) { + return response.text().then((_responseText) => { + let result200: any = null; + let resultData200 = _responseText === "" ? null : JSON.parse(_responseText, this.jsonParseReviver); + result200 = UserProfile.fromJS(resultData200); + return result200; + }); + } else if (status === 204) { + return response.text().then((_responseText) => { + return throwException("No user active", status, _responseText, _headers); + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } + + /** + * @return No content + */ + authMock(): Promise { + let url_ = this.baseUrl + "/auth/mock"; + url_ = url_.replace(/[?&]$/, ""); + + let options_: RequestInit = { + method: "POST", + headers: { + } + }; + + return this.http.fetch(url_, options_).then((_response: Response) => { + return this.processAuthMock(_response); + }); + } + + protected processAuthMock(response: Response): Promise { + const status = response.status; + let _headers: any = {}; if (response.headers && response.headers.forEach) { response.headers.forEach((v: any, k: any) => _headers[k] = v); }; + if (status === 204) { + return response.text().then((_responseText) => { + return; + }); + } else if (status !== 200 && status !== 204) { + return response.text().then((_responseText) => { + return throwException("An unexpected server error occurred.", status, _responseText, _headers); + }); + } + return Promise.resolve(null as any); + } +} + +export class Audio implements IAudio { + id!: number; + createdAt!: Date; + updatedAt!: Date; + currentHandler?: string; + name!: string; + + constructor(data?: IAudio) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.id = _data["id"]; + this.createdAt = _data["createdAt"] ? new Date(_data["createdAt"].toString()) : undefined; + this.updatedAt = _data["updatedAt"] ? new Date(_data["updatedAt"].toString()) : undefined; + this.currentHandler = _data["currentHandler"]; + this.name = _data["name"]; + } + } + + static fromJS(data: any): Audio { + data = typeof data === 'object' ? data : {}; + let result = new Audio(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["id"] = this.id; + data["createdAt"] = this.createdAt ? this.createdAt.toISOString() : undefined; + data["updatedAt"] = this.updatedAt ? this.updatedAt.toISOString() : undefined; + data["currentHandler"] = this.currentHandler; + data["name"] = this.name; + return data; + } +} + +export interface IAudio { + id: number; + createdAt: Date; + updatedAt: Date; + currentHandler?: string; + name: string; +} + +export class AudioResponse implements IAudioResponse { + name!: string; + id!: number; + createdAt!: Date; + updatedAt!: Date; + + constructor(data?: IAudioResponse) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.name = _data["name"]; + this.id = _data["id"]; + this.createdAt = _data["createdAt"] ? new Date(_data["createdAt"].toString()) : undefined; + this.updatedAt = _data["updatedAt"] ? new Date(_data["updatedAt"].toString()) : undefined; + } + } + + static fromJS(data: any): AudioResponse { + data = typeof data === 'object' ? data : {}; + let result = new AudioResponse(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["name"] = this.name; + data["id"] = this.id; + data["createdAt"] = this.createdAt ? this.createdAt.toISOString() : undefined; + data["updatedAt"] = this.updatedAt ? this.updatedAt.toISOString() : undefined; + return data; + } +} + +export interface IAudioResponse { + name: string; + id: number; + createdAt: Date; + updatedAt: Date; +} + +export class AudioCreateParams implements IAudioCreateParams { + name!: string; + + constructor(data?: IAudioCreateParams) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.name = _data["name"]; + } + } + + static fromJS(data: any): AudioCreateParams { + data = typeof data === 'object' ? data : {}; + let result = new AudioCreateParams(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["name"] = this.name; + return data; + } +} + +export interface IAudioCreateParams { + name: string; +} + +export class ExternalUrls implements IExternalUrls { + spotify!: string; + + constructor(data?: IExternalUrls) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.spotify = _data["spotify"]; + } + } + + static fromJS(data: any): ExternalUrls { + data = typeof data === 'object' ? data : {}; + let result = new ExternalUrls(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["spotify"] = this.spotify; + return data; + } +} + +export interface IExternalUrls { + spotify: string; +} + +export class Followers implements IFollowers { + href!: string | undefined; + total!: number; + + constructor(data?: IFollowers) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.href = _data["href"]; + this.total = _data["total"]; + } + } + + static fromJS(data: any): Followers { + data = typeof data === 'object' ? data : {}; + let result = new Followers(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["href"] = this.href; + data["total"] = this.total; + return data; + } +} + +export interface IFollowers { + href: string | undefined; + total: number; +} + +export class Image implements IImage { + url!: string; + height!: number; + width!: number; + + constructor(data?: IImage) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.url = _data["url"]; + this.height = _data["height"]; + this.width = _data["width"]; + } + } + + static fromJS(data: any): Image { + data = typeof data === 'object' ? data : {}; + let result = new Image(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["url"] = this.url; + data["height"] = this.height; + data["width"] = this.width; + return data; + } +} + +export interface IImage { + url: string; + height: number; + width: number; +} + +export class UserProfile implements IUserProfile { + display_name!: string; + email!: string; + external_urls!: ExternalUrls; + followers!: Followers; + href!: string; + id!: string; + images!: Image[]; + type!: string; + uri!: string; + country!: string; + explicit_content!: Explicit_content; + product!: string; + + constructor(data?: IUserProfile) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + if (!data) { + this.external_urls = new ExternalUrls(); + this.followers = new Followers(); + this.images = []; + this.explicit_content = new Explicit_content(); + } + } + + init(_data?: any) { + if (_data) { + this.display_name = _data["display_name"]; + this.email = _data["email"]; + this.external_urls = _data["external_urls"] ? ExternalUrls.fromJS(_data["external_urls"]) : new ExternalUrls(); + this.followers = _data["followers"] ? Followers.fromJS(_data["followers"]) : new Followers(); + this.href = _data["href"]; + this.id = _data["id"]; + if (Array.isArray(_data["images"])) { + this.images = [] as any; + for (let item of _data["images"]) + this.images!.push(Image.fromJS(item)); + } + this.type = _data["type"]; + this.uri = _data["uri"]; + this.country = _data["country"]; + this.explicit_content = _data["explicit_content"] ? Explicit_content.fromJS(_data["explicit_content"]) : new Explicit_content(); + this.product = _data["product"]; + } + } + + static fromJS(data: any): UserProfile { + data = typeof data === 'object' ? data : {}; + let result = new UserProfile(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["display_name"] = this.display_name; + data["email"] = this.email; + data["external_urls"] = this.external_urls ? this.external_urls.toJSON() : undefined; + data["followers"] = this.followers ? this.followers.toJSON() : undefined; + data["href"] = this.href; + data["id"] = this.id; + if (Array.isArray(this.images)) { + data["images"] = []; + for (let item of this.images) + data["images"].push(item.toJSON()); + } + data["type"] = this.type; + data["uri"] = this.uri; + data["country"] = this.country; + data["explicit_content"] = this.explicit_content ? this.explicit_content.toJSON() : undefined; + data["product"] = this.product; + return data; + } +} + +export interface IUserProfile { + display_name: string; + email: string; + external_urls: ExternalUrls; + followers: Followers; + href: string; + id: string; + images: Image[]; + type: string; + uri: string; + country: string; + explicit_content: Explicit_content; + product: string; +} + +export class SpotifyUserResponse implements ISpotifyUserResponse { + id!: number; + createdAt!: Date; + updatedAt!: Date; + name!: string; + spotifyId!: string; + active!: boolean; + + constructor(data?: ISpotifyUserResponse) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.id = _data["id"]; + this.createdAt = _data["createdAt"] ? new Date(_data["createdAt"].toString()) : undefined; + this.updatedAt = _data["updatedAt"] ? new Date(_data["updatedAt"].toString()) : undefined; + this.name = _data["name"]; + this.spotifyId = _data["spotifyId"]; + this.active = _data["active"]; + } + } + + static fromJS(data: any): SpotifyUserResponse { + data = typeof data === 'object' ? data : {}; + let result = new SpotifyUserResponse(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["id"] = this.id; + data["createdAt"] = this.createdAt ? this.createdAt.toISOString() : undefined; + data["updatedAt"] = this.updatedAt ? this.updatedAt.toISOString() : undefined; + data["name"] = this.name; + data["spotifyId"] = this.spotifyId; + data["active"] = this.active; + return data; + } +} + +export interface ISpotifyUserResponse { + id: number; + createdAt: Date; + updatedAt: Date; + name: string; + spotifyId: string; + active: boolean; +} + +export class Body implements IBody { + name!: string; + + [key: string]: any; + + constructor(data?: IBody) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + for (var property in _data) { + if (_data.hasOwnProperty(property)) + this[property] = _data[property]; + } + this.name = _data["name"]; + } + } + + static fromJS(data: any): Body { + data = typeof data === 'object' ? data : {}; + let result = new Body(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + for (var property in this) { + if (this.hasOwnProperty(property)) + data[property] = this[property]; + } + data["name"] = this.name; + return data; + } +} + +export interface IBody { + name: string; + + [key: string]: any; +} + +export class Anonymous implements IAnonymous { + entities!: Audio[]; + id!: string; + name!: string; + + [key: string]: any; + + constructor(data?: IAnonymous) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + if (!data) { + this.entities = []; + } + } + + init(_data?: any) { + if (_data) { + for (var property in _data) { + if (_data.hasOwnProperty(property)) + this[property] = _data[property]; + } + if (Array.isArray(_data["entities"])) { + this.entities = [] as any; + for (let item of _data["entities"]) + this.entities!.push(Audio.fromJS(item)); + } + this.id = _data["id"]; + this.name = _data["name"]; + } + } + + static fromJS(data: any): Anonymous { + data = typeof data === 'object' ? data : {}; + let result = new Anonymous(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + for (var property in this) { + if (this.hasOwnProperty(property)) + data[property] = this[property]; + } + if (Array.isArray(this.entities)) { + data["entities"] = []; + for (let item of this.entities) + data["entities"].push(item.toJSON()); + } + data["id"] = this.id; + data["name"] = this.name; + return data; + } +} + +export interface IAnonymous { + entities: Audio[]; + id: string; + name: string; + + [key: string]: any; +} + +export class Anonymous2 implements IAnonymous2 { + + [key: string]: any; + + constructor(data?: IAnonymous2) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + for (var property in _data) { + if (_data.hasOwnProperty(property)) + this[property] = _data[property]; + } + } + } + + static fromJS(data: any): Anonymous2 { + data = typeof data === 'object' ? data : {}; + let result = new Anonymous2(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + for (var property in this) { + if (this.hasOwnProperty(property)) + data[property] = this[property]; + } + return data; + } +} + +export interface IAnonymous2 { + + [key: string]: any; +} + +export class Explicit_content implements IExplicit_content { + filter_locked!: boolean; + filter_enabled!: boolean; + + [key: string]: any; + + constructor(data?: IExplicit_content) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + for (var property in _data) { + if (_data.hasOwnProperty(property)) + this[property] = _data[property]; + } + this.filter_locked = _data["filter_locked"]; + this.filter_enabled = _data["filter_enabled"]; + } + } + + static fromJS(data: any): Explicit_content { + data = typeof data === 'object' ? data : {}; + let result = new Explicit_content(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + for (var property in this) { + if (this.hasOwnProperty(property)) + data[property] = this[property]; + } + data["filter_locked"] = this.filter_locked; + data["filter_enabled"] = this.filter_enabled; + return data; + } +} + +export interface IExplicit_content { + filter_locked: boolean; + filter_enabled: boolean; + + [key: string]: any; +} + +export class ApiException extends Error { + message: string; + status: number; + response: string; + headers: { [key: string]: any; }; + result: any; + + constructor(message: string, status: number, response: string, headers: { [key: string]: any; }, result: any) { + super(); + + this.message = message; + this.status = status; + this.response = response; + this.headers = headers; + this.result = result; + } + + protected isApiException = true; + + static isApiException(obj: any): obj is ApiException { + return obj.isApiException === true; + } +} + +function throwException(message: string, status: number, response: string, headers: { [key: string]: any; }, result?: any): any { + if (result !== null && result !== undefined) + throw result; + else + throw new ApiException(message, status, response, headers, null); +} \ No newline at end of file diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 00000000..8329e7bc --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,73 @@ +/* color palette from */ +:root { + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-light-1); + + --section-gap: 160px; +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: color 0.5s, background-color 0.5s; + line-height: 1.6; + font-family: Inter, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, + Cantarell, 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} diff --git a/src/assets/img/AVICO.svg b/src/assets/img/AVICO.svg new file mode 100644 index 00000000..c7eb67f4 --- /dev/null +++ b/src/assets/img/AVICO.svg @@ -0,0 +1 @@ +CENTURION MARATHON* DER SV GEWIS * \ No newline at end of file diff --git a/src/assets/img/bier.png b/src/assets/img/bier.png new file mode 100644 index 0000000000000000000000000000000000000000..907831b6d335ad18793ef981f1b2ae541a7e014a GIT binary patch literal 174887 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�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≪et%hR+XjX*Zjr`+31JwXn)P9 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 B6$$_V literal 0 HcmV?d00001 diff --git a/src/assets/img/gewis-branding.svg b/src/assets/img/gewis-branding.svg new file mode 100644 index 00000000..cba3c6b4 --- /dev/null +++ b/src/assets/img/gewis-branding.svg @@ -0,0 +1,24 @@ + + + + + + + + diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 00000000..75656603 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 00000000..c5b778c6 --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,40 @@ +@import './base.css'; +@import url('https://fonts.googleapis.com/css?family=Lato:400,400i,700,700i&display=swap'); +@import url('https://fonts.googleapis.com/css?family=Raleway:500,500i,700,700i&display=swap'); + +#app { + + font-weight: normal; +} + +a, +.green { + text-decoration: none; + color: hsla(160, 100%, 37%, 1); + transition: 0.4s; +} + +@media (hover: hover) { + a:hover { + background-color: hsla(160, 100%, 37%, 0.2); + } +} + +@media (min-width: 1024px) { + + #app { + display: flex; + flex-direction: column; + margin: 0; + padding: 0; + } +} + +.page-title { + font-weight: 500; + font-family: Raleway, sans-serif; +} + +:deep(.p-button-label){ + text-transform: uppercase!important; +} diff --git a/src/components/CopyrightBanner.vue b/src/components/CopyrightBanner.vue new file mode 100644 index 00000000..5da88003 --- /dev/null +++ b/src/components/CopyrightBanner.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/components/TopNavbar.vue b/src/components/TopNavbar.vue new file mode 100644 index 00000000..266fdc47 --- /dev/null +++ b/src/components/TopNavbar.vue @@ -0,0 +1,183 @@ + + + + + diff --git a/src/components/icons/IconCommunity.vue b/src/components/icons/IconCommunity.vue new file mode 100644 index 00000000..2dc8b055 --- /dev/null +++ b/src/components/icons/IconCommunity.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconDocumentation.vue b/src/components/icons/IconDocumentation.vue new file mode 100644 index 00000000..6d4791cf --- /dev/null +++ b/src/components/icons/IconDocumentation.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconEcosystem.vue b/src/components/icons/IconEcosystem.vue new file mode 100644 index 00000000..c3a4f078 --- /dev/null +++ b/src/components/icons/IconEcosystem.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconSupport.vue b/src/components/icons/IconSupport.vue new file mode 100644 index 00000000..7452834d --- /dev/null +++ b/src/components/icons/IconSupport.vue @@ -0,0 +1,7 @@ + diff --git a/src/components/icons/IconTooling.vue b/src/components/icons/IconTooling.vue new file mode 100644 index 00000000..660598d7 --- /dev/null +++ b/src/components/icons/IconTooling.vue @@ -0,0 +1,19 @@ + + diff --git a/src/layout/CopyrightBanner.vue b/src/layout/CopyrightBanner.vue new file mode 100644 index 00000000..aeacfd03 --- /dev/null +++ b/src/layout/CopyrightBanner.vue @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/src/layout/DashboardLayout.vue b/src/layout/DashboardLayout.vue new file mode 100644 index 00000000..a89013b0 --- /dev/null +++ b/src/layout/DashboardLayout.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/src/layout/PublicLayout.vue b/src/layout/PublicLayout.vue new file mode 100644 index 00000000..f46015e0 --- /dev/null +++ b/src/layout/PublicLayout.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/src/locales/en.json b/src/locales/en.json new file mode 100644 index 00000000..2c988183 --- /dev/null +++ b/src/locales/en.json @@ -0,0 +1,51 @@ +{ + "login": { + "Narrowcasting": "Narrowcast", + "Narrowcasting Login": "Narrowcasting Login", + "Login via GEWIS": "Login via GEWIS", + "Login": "Login", + "Username": "Username", + "Enter username": "Enter username", + "Password": "Password", + "Enter password": "Enter password", + "Password reset": "Reset password (External accounts only)", + "Back to login": "Go back to login", + "Email": "Email", + "Enter email": "Enter email", + "Reset": "Reset password", + "Email sent": "If there exists an account on this email address, an email has been sent to {email} with instructions on how to reset your password.", + "Set new password": "Set new password", + "New password": "New password", + "Confirm password": "Confirm new password", + "Enter password again": "Enter password again", + "Reset the password for": "Reset the password for {email}", + "Passwords not equal": "Passwords are not equal", + "Password not strong": "Password needs to be longer than 8 characters and needs a lower- and uppercase letter, number and a special character", + "copyright": "© 2023 GEWIS", + "separator": " | " + }, + "app": { + "Home": "home" + }, + "formatters": { + "Monday": "Monday", + "Tuesday": "Tuesday", + "Wednesday": "Wednesday", + "Thursday": "Thursday", + "Friday": "Friday", + "Saturday": "Saturday", + "Sunday": "Sunday" + }, + "home": { + "Overview": "Overview" + }, + "apiError": { + "message": "Error message", + "Something went wrong": "Something went wrong", + "400": "There is something wrong with the request you are trying to make", + "401": "You don't have the rights to access this data", + "403": "You cannot access this data", + "404": "This data does not seem to exist", + "500": "Something is going wrong, please contact the Narrowcast team" + } +} diff --git a/src/locales/index.ts b/src/locales/index.ts new file mode 100644 index 00000000..98146425 --- /dev/null +++ b/src/locales/index.ts @@ -0,0 +1,9 @@ +import English from '@/locales/en.json'; +import Dutch from '@/locales/nl.json'; + +const languages = { + en: English, + nl: Dutch, +}; + +export default languages; diff --git a/src/locales/nl.json b/src/locales/nl.json new file mode 100644 index 00000000..7e427203 --- /dev/null +++ b/src/locales/nl.json @@ -0,0 +1,24 @@ +{ + "login": { + "SudoSOS Login": "SudoSOS Login", + "Login via GEWIS": "Login via GEWIS", + "Login": "Login", + "Username": "Username", + "Enter username": "Enter username", + "Password": "Password", + "Enter password": "Enter password", + "Password reset": "Reset password (External accounts only)", + "Back to login": "Go back to login", + "Email": "Email", + "Enter email": "Enter email", + "Reset": "Reset password", + "Email sent": "If there exists an account on this email address, an email has been sent to {email} with instructions on how to reset your password.", + "Set new password": "Set new password", + "New password": "New password", + "Confirm password": "Confirm new password", + "Enter password again": "Enter password again", + "Reset the password for": "Reset the password for {email}", + "Passwords not equal": "Passwords are not equal", + "Password not strong": "Password needs to be longer than 8 characters and needs a lower- and uppercase letter, number and a special character" + } +} diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 00000000..1c902f2e --- /dev/null +++ b/src/main.ts @@ -0,0 +1,57 @@ +/* eslint vue/multi-word-component-names: 0 */ +/* eslint vue/no-reserved-component-names: 0 */ +import './assets/main.css'; + +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; +import { createI18n } from 'vue-i18n'; + +import App from './App.vue'; +import router from './router'; +import PrimeVue from 'primevue/config'; +import Button from "primevue/button"; +import "primevue/resources/themes/bootstrap4-light-blue/theme.css"; +import InputText from "primevue/inputtext"; +import Menubar from "primevue/menubar"; +import Panel from "primevue/panel"; +import DataTable from "primevue/datatable"; +import InputNumber from "primevue/inputnumber"; +import Dialog from "primevue/dialog"; +import 'primeicons/primeicons.css'; +import languages from "@/locales"; +import Dropdown from "primevue/dropdown"; +import Checkbox from "primevue/checkbox"; +import TabView from "primevue/tabview"; +import ScrollPanel from "primevue/scrollpanel"; +import FileUpload from "primevue/fileupload"; +import ProgressSpinner from "primevue/progressspinner"; + +const app = createApp(App); + +const messages = Object.assign(languages); +const i18n = createI18n({ + locale: 'en', + fallbackLocale: 'en', + messages, +}); +app.use(createPinia()); +app.use(router); +app.use(PrimeVue); +app.use(i18n); + +app.component('Button', Button); +app.component('InputText', InputText); +app.component('Menubar', Menubar); +app.component('Panel', Panel); +app.component('DataTable', DataTable); +app.component('InputNumber', InputNumber); +app.component('Dialog', Dialog); +app.component('Dropdown', Dropdown); +app.component('Checkbox', Checkbox); +app.component('TabView', TabView); +app.component('ScrollPanel', ScrollPanel); +app.component('FileUpload', FileUpload); +app.component('InputNumber', InputNumber); +app.component('Spinner', ProgressSpinner); + +app.mount('#app'); diff --git a/src/router/index.ts b/src/router/index.ts new file mode 100644 index 00000000..01cfd0c6 --- /dev/null +++ b/src/router/index.ts @@ -0,0 +1,52 @@ +import { createRouter, createWebHistory } from 'vue-router'; +import DashboardLayout from "@/layout/DashboardLayout.vue"; +import HomeView from "@/views/HomeView.vue"; +import LoginView from "@/views/LoginView.vue"; +import PublicLayout from "@/layout/PublicLayout.vue"; + +const router = createRouter({ + history: createWebHistory(), + routes: [ + { + path: '', + component: PublicLayout, + children: [ + { + path: '', + component: LoginView, + name: 'login' + } + ] + }, + { + path: '', + component: DashboardLayout, + meta: { requiresAuth: true }, + children: [ + { + path: '/', + component: HomeView, + name: 'home' + }, + ] + } + ] +}); + +router.beforeEach((to, from, next) => { + // const isAuthenticated = apiService.isAuthenticated() + const isAuthenticated = false; + + if (to.meta?.requiresAuth && !isAuthenticated) { + // If the route requires authentication and the user is not authenticated, redirect to login + next({ name: 'login' }); + } else if (!to.meta?.requiresAuth && isAuthenticated) { + // If the route doesn't require authentication and the user is authenticated, redirect to home + next({ name: 'home' }); + } else { + // Allow navigation to proceed + next(); + } +}); + +export default router; diff --git a/src/styles/BasePage.css b/src/styles/BasePage.css new file mode 100644 index 00000000..a6037c52 --- /dev/null +++ b/src/styles/BasePage.css @@ -0,0 +1,39 @@ +@import url('../assets/main.css'); + +.page-title { + font-weight: 500; + font-family: Raleway, sans-serif !important; + color: black; + font-size: 2.5rem; + margin-bottom: 1.5rem; +} + +.page-container { + margin-top: 4rem; + margin-left: auto; + margin-right: auto; + width: 100%; + padding-left: 15px; + padding-right: 15px; + margin-bottom: 80px; +} + +@media (min-width: 992px) { + .page-container { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .page-container { + max-width: 1140px; + } +} + +.content-wrapper { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +/*TODO: Fix more for different media sizes*/ diff --git a/src/utils/formatterUtils.ts b/src/utils/formatterUtils.ts new file mode 100644 index 00000000..60a3a2a3 --- /dev/null +++ b/src/utils/formatterUtils.ts @@ -0,0 +1,26 @@ +export function formatDateTime(date: Date): string { + + const daysOfWeek: Array = [ + "Sunday", + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday" + ]; + + const day = parseTime(date.getDate()); + const monthIndex = parseTime(date.getMonth()); + const year = date.getFullYear().toString(); + const dayOfWeek = daysOfWeek[date.getDay()]; + return `${day}-${monthIndex}-${year} (${dayOfWeek})`; +} + +function parseTime(value: number): string { + return value.toString().padStart(2, '0'); +} + +export function formatPrice(cents: number): string { + return (cents / 100).toLocaleString('en', { style: 'currency', currency: 'EUR' }); +} diff --git a/src/utils/imageUtils.ts b/src/utils/imageUtils.ts new file mode 100644 index 00000000..10e8002e --- /dev/null +++ b/src/utils/imageUtils.ts @@ -0,0 +1,12 @@ +import type { BannerResponse, ProductResponse } from "@sudosos/sudosos-client"; + +export function getProductImageSrc(product: ProductResponse): string { + if (!product.image) { + return 'https://imgur.com/CS0aauU.png'; + } else { + return `${import.meta.env.VITE_APP_IMAGE_BASE}products/${product.image}`; + } +} +export function getBannerImageSrc(banner: BannerResponse): string { + return `${import.meta.env.VITE_LIVE_IMAGE_BASE}banners/${banner.image}`; +} diff --git a/src/utils/validation-schema.ts b/src/utils/validation-schema.ts new file mode 100644 index 00000000..1793eb3b --- /dev/null +++ b/src/utils/validation-schema.ts @@ -0,0 +1,12 @@ +import { toTypedSchema } from "@vee-validate/yup"; +import * as yup from "yup"; + +export const userDetailsSchema = toTypedSchema( + yup.object({ + firstName: yup.string().required(), + lastName: yup.string().required(), + email: yup.string().email(), + userType: yup.string().required(), + isActive: yup.boolean().required().default(true), + }) +); diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue new file mode 100644 index 00000000..f1500115 --- /dev/null +++ b/src/views/HomeView.vue @@ -0,0 +1,24 @@ + + + + + diff --git a/src/views/LoginView.vue b/src/views/LoginView.vue new file mode 100644 index 00000000..9a14ce0d --- /dev/null +++ b/src/views/LoginView.vue @@ -0,0 +1,100 @@ + + + + + \ No newline at end of file diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 00000000..d7651173 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,12 @@ +{ + "extends": "@vue/tsconfig/tsconfig.dom.json", + "include": ["env.d.ts", "src/**/*", "src/**/*.vue", "src/utils/*.ts"], + "exclude": ["src/**/__tests__/*"], + "compilerOptions": { + "composite": true, + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + }, + } +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..66b5e570 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.node.json" + }, + { + "path": "./tsconfig.app.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 00000000..bb67dfcb --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,15 @@ +{ + "extends": "@tsconfig/node18/tsconfig.json", + "include": [ + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" + ], + "compilerOptions": { + "composite": true, + "module": "ESNext", + "types": ["node"] + } +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 00000000..85e54778 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { fileURLToPath, URL } from 'node:url'; + +import { defineConfig } from 'vite'; +import vue from '@vitejs/plugin-vue'; + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [ + vue(), + ], + resolve: { + alias: { + '@': fileURLToPath(new URL('./src', import.meta.url)) + } + } +}); From 94fff7e2fd887321a09bf2ae2cee7cdf3c6a33ea Mon Sep 17 00:00:00 2001 From: Gijs de Man Date: Sat, 21 Oct 2023 20:54:18 +0200 Subject: [PATCH 002/252] Make room responsible overview --- package.json | 1 - src/components/TopNavbar.vue | 14 ++++ src/locales/en.json | 9 +++ src/locales/nl.json | 9 +++ src/router/index.ts | 18 ++++- src/views/RoomresponsibleView.vue | 129 ++++++++++++++++++++++++++++++ 6 files changed, 178 insertions(+), 2 deletions(-) create mode 100644 src/views/RoomresponsibleView.vue diff --git a/package.json b/package.json index 84b4fd52..b9add46d 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,6 @@ "primeicons": "^6.0.1", "primevue": "^3.30.1", "sass": "^1.63.6", - "stripe": "^12.14.0", "uuid": "^9.0.0", "vee-validate": "^4.11.1", "vue": "^3.3.4", diff --git a/src/components/TopNavbar.vue b/src/components/TopNavbar.vue index 266fdc47..4bd86bb0 100644 --- a/src/components/TopNavbar.vue +++ b/src/components/TopNavbar.vue @@ -34,6 +34,20 @@ const leftItems = ref([ label: 'Balance', // to: '/balance', }, + { + label: () => "t('Infoscreen')", + to: '/infoscreen', + items: [ + { + label: () => "t('Settings')", + to: '/infoscreen/settings', + }, + { + label: () => "t('Room Responsibles')", + to: '/infoscreen/roomresponsibles' + } + ] + }, ]); const rightItems = ref([ diff --git a/src/locales/en.json b/src/locales/en.json index 2c988183..c51dabed 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -47,5 +47,14 @@ "403": "You cannot access this data", "404": "This data does not seem to exist", "500": "Something is going wrong, please contact the Narrowcast team" + }, + "infoscreen": { + "Infoscreen": "Infoscherm", + "Settings": "Settings", + "Room Responsibles": "Room Responsibles", + "Name": "name", + "Since": "since", + "Expires": "expires", + "Keyword search": "Keyword search" } } diff --git a/src/locales/nl.json b/src/locales/nl.json index 7e427203..8287785d 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -20,5 +20,14 @@ "Reset the password for": "Reset the password for {email}", "Passwords not equal": "Passwords are not equal", "Password not strong": "Password needs to be longer than 8 characters and needs a lower- and uppercase letter, number and a special character" + }, + "infoscreen": { + "Infoscreen": "Infoscherm", + "Settings": "Instellingen", + "Room Responsibles": "Openhouders", + "Name": "naam", + "Since": "vanaf", + "Expires": "verloopt", + "Keyword search": "Trefwoord zoeken" } } diff --git a/src/router/index.ts b/src/router/index.ts index 01cfd0c6..1162cc67 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -3,6 +3,7 @@ import DashboardLayout from "@/layout/DashboardLayout.vue"; import HomeView from "@/views/HomeView.vue"; import LoginView from "@/views/LoginView.vue"; import PublicLayout from "@/layout/PublicLayout.vue"; +import RoomresponsibleView from "@/views/RoomresponsibleView.vue"; const router = createRouter({ history: createWebHistory(), @@ -28,6 +29,21 @@ const router = createRouter({ component: HomeView, name: 'home' }, + { + path: '/infoscreen', + children: [ + { + path: '/settings', + component: RoomresponsibleView, + name: 'infoscreenSettings' + }, + { + path: '/roomresponsibles', + component: RoomresponsibleView, + name: 'infoscreenRoomresposibles' + } + ] + } ] } ] @@ -35,7 +51,7 @@ const router = createRouter({ router.beforeEach((to, from, next) => { // const isAuthenticated = apiService.isAuthenticated() - const isAuthenticated = false; + const isAuthenticated = true; if (to.meta?.requiresAuth && !isAuthenticated) { // If the route requires authentication and the user is not authenticated, redirect to login diff --git a/src/views/RoomresponsibleView.vue b/src/views/RoomresponsibleView.vue new file mode 100644 index 00000000..3c59e48a --- /dev/null +++ b/src/views/RoomresponsibleView.vue @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + From fc0f09cb1eebe42893be0bdef088bd45fda7e21d Mon Sep 17 00:00:00 2001 From: Samuel Date: Sat, 21 Oct 2023 20:58:35 +0200 Subject: [PATCH 003/252] Added bootstrap, a concept for the subscribers view, and fixed some css. --- package-lock.json | 31 +++++ package.json | 5 +- src/assets/base.css | 2 +- src/assets/main.css | 5 +- src/components/CardComponent.vue | 86 +++++++++++++ src/components/SubscribersOverview.vue | 25 ++++ src/components/TopNavbar.vue | 168 ++++++++----------------- src/main.ts | 1 + src/router/index.ts | 11 +- src/stores/subscriber.store.ts | 30 +++++ src/styles/BasePage.css | 5 +- src/views/DashboardView.vue | 31 +++++ src/views/HomeView.vue | 24 ---- vite.config.ts | 9 ++ 14 files changed, 281 insertions(+), 152 deletions(-) create mode 100644 src/components/CardComponent.vue create mode 100644 src/components/SubscribersOverview.vue create mode 100644 src/stores/subscriber.store.ts create mode 100644 src/views/DashboardView.vue delete mode 100644 src/views/HomeView.vue diff --git a/package-lock.json b/package-lock.json index 52d47cec..62a715ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@vee-validate/yup": "^4.11.1", "axios": "^1.5.1", + "bootstrap": "^5.3.2", "jwt-decode": "^3.1.2", "pinia": "^2.1.3", "primeicons": "^6.0.1", @@ -628,6 +629,17 @@ "node": ">= 8" } }, + "node_modules/@popperjs/core": { + "version": "2.11.8", + "resolved": "https://registry.openticket.tech/@popperjs%2fcore/-/core-2.11.8.tgz", + "integrity": "sha512-P1st0aksCrn9sGZhp8GMYwBnQsbvAWsZAX44oXNNvLHGqAOcoVxmjZiohstwQ7SqKnbR47akdNi+uleWD8+g6A==", + "license": "MIT", + "peer": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, "node_modules/@rushstack/eslint-patch": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.5.1.tgz", @@ -1365,6 +1377,25 @@ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", "dev": true }, + "node_modules/bootstrap": { + "version": "5.3.2", + "resolved": "https://registry.openticket.tech/bootstrap/-/bootstrap-5.3.2.tgz", + "integrity": "sha512-D32nmNWiQHo94BKHLmOrdjlL05q1c8oxbtBphQFb9Z5to6eGRDCm0QgeaZ4zFBHzfg2++rqa2JkqCcxDy0sH0g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/twbs" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/bootstrap" + } + ], + "license": "MIT", + "peerDependencies": { + "@popperjs/core": "^2.11.8" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", diff --git a/package.json b/package.json index 84b4fd52..11ca8243 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,8 @@ }, "dependencies": { "@vee-validate/yup": "^4.11.1", + "axios": "^1.5.1", + "bootstrap": "^5.3.2", "jwt-decode": "^3.1.2", "pinia": "^2.1.3", "primeicons": "^6.0.1", @@ -25,8 +27,7 @@ "vue": "^3.3.4", "vue-i18n": "^9.2.2", "vue-router": "^4.2.2", - "yup": "^1.2.0", - "axios": "^1.5.1" + "yup": "^1.2.0" }, "devDependencies": { "@intlify/eslint-plugin-vue-i18n": "^2.0.0", diff --git a/src/assets/base.css b/src/assets/base.css index 8329e7bc..21c833fd 100644 --- a/src/assets/base.css +++ b/src/assets/base.css @@ -60,7 +60,7 @@ body { min-height: 100vh; - color: var(--color-text); + /*color: var(--color-text);*/ background: var(--color-background); transition: color 0.5s, background-color 0.5s; line-height: 1.6; diff --git a/src/assets/main.css b/src/assets/main.css index c5b778c6..5762bd9a 100644 --- a/src/assets/main.css +++ b/src/assets/main.css @@ -3,7 +3,6 @@ @import url('https://fonts.googleapis.com/css?family=Raleway:500,500i,700,700i&display=swap'); #app { - font-weight: normal; } @@ -14,6 +13,10 @@ a, transition: 0.4s; } +.red-bg { + background-color: #d40000; +} + @media (hover: hover) { a:hover { background-color: hsla(160, 100%, 37%, 0.2); diff --git a/src/components/CardComponent.vue b/src/components/CardComponent.vue new file mode 100644 index 00000000..d3c7c73d --- /dev/null +++ b/src/components/CardComponent.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/components/SubscribersOverview.vue b/src/components/SubscribersOverview.vue new file mode 100644 index 00000000..f94c4f0f --- /dev/null +++ b/src/components/SubscribersOverview.vue @@ -0,0 +1,25 @@ + + + + + \ No newline at end of file diff --git a/src/components/TopNavbar.vue b/src/components/TopNavbar.vue index 266fdc47..02b290e5 100644 --- a/src/components/TopNavbar.vue +++ b/src/components/TopNavbar.vue @@ -1,16 +1,16 @@ - + diff --git a/src/components/lights/effects/LightsGroupToggleButton.vue b/src/components/lights/effects/LightsGroupToggleButton.vue index 7d504b46..2baf80b2 100644 --- a/src/components/lights/effects/LightsGroupToggleButton.vue +++ b/src/components/lights/effects/LightsGroupToggleButton.vue @@ -18,13 +18,13 @@ defineProps<{ > + diff --git a/src/components/lights/effects/other/StrobeButton.vue b/src/components/lights/effects/other/StrobeButton.vue index 1eac8486..438a3273 100644 --- a/src/components/lights/effects/other/StrobeButton.vue +++ b/src/components/lights/effects/other/StrobeButton.vue @@ -1,14 +1,14 @@ - + diff --git a/src/components/lights/effects/props/SelectorBoolean.vue b/src/components/lights/effects/props/SelectorBoolean.vue index 3c0bacf2..470a0ea6 100644 --- a/src/components/lights/effects/props/SelectorBoolean.vue +++ b/src/components/lights/effects/props/SelectorBoolean.vue @@ -1,30 +1,22 @@ - + diff --git a/src/components/lights/effects/props/SelectorLightsColor.vue b/src/components/lights/effects/props/SelectorLightsColor.vue index 2f6dd17e..6e17b994 100644 --- a/src/components/lights/effects/props/SelectorLightsColor.vue +++ b/src/components/lights/effects/props/SelectorLightsColor.vue @@ -3,7 +3,8 @@

Color*

(); const emit = defineEmits<{ - colorsUpdated: [colors: RgbColor[]] + colorsUpdated: [colors: RgbColor[]]; }>(); const colors: string[] = Object.values(RgbColor); @@ -51,5 +52,4 @@ const handleColorClick = (color: RgbColor) => { }; - + diff --git a/src/components/lights/effects/props/SelectorRatioSlider.vue b/src/components/lights/effects/props/SelectorRatioSlider.vue index 8e31b169..8f0a6cd3 100644 --- a/src/components/lights/effects/props/SelectorRatioSlider.vue +++ b/src/components/lights/effects/props/SelectorRatioSlider.vue @@ -54,6 +54,4 @@ const onChange = (newValue: number) => { }; - + diff --git a/src/entity/lights/index.ts b/src/entity/lights/index.ts index 42648675..bb6d76d7 100644 --- a/src/entity/lights/index.ts +++ b/src/entity/lights/index.ts @@ -1 +1 @@ -export { SelectedLightsGroup } from './SelectedLightsGroup'; +export { type SelectedLightsGroup } from './SelectedLightsGroup'; diff --git a/src/layout/CardComponent.vue b/src/layout/CardComponent.vue index 0c7984ae..3d459a3e 100644 --- a/src/layout/CardComponent.vue +++ b/src/layout/CardComponent.vue @@ -5,31 +5,33 @@ diff --git a/src/layout/CopyrightBanner.vue b/src/layout/CopyrightBanner.vue index fc797b6d..0ebff482 100644 --- a/src/layout/CopyrightBanner.vue +++ b/src/layout/CopyrightBanner.vue @@ -1,13 +1,12 @@ - + + diff --git a/src/layout/PublicLayout.vue b/src/layout/PublicLayout.vue index f46015e0..9627fa04 100644 --- a/src/layout/PublicLayout.vue +++ b/src/layout/PublicLayout.vue @@ -1,10 +1,7 @@ - + - + diff --git a/src/layout/TopNavbar.vue b/src/layout/TopNavbar.vue index 9ec9f847..55bdade3 100644 --- a/src/layout/TopNavbar.vue +++ b/src/layout/TopNavbar.vue @@ -5,7 +5,13 @@ - + diff --git a/src/main.ts b/src/main.ts index a09ea1b7..ff8e43f4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -8,24 +8,24 @@ import { createPinia } from 'pinia'; import App from './App.vue'; import router from './router'; import PrimeVue from 'primevue/config'; -import Button from "primevue/button"; -import InputText from "primevue/inputtext"; -import Menubar from "primevue/menubar"; -import Panel from "primevue/panel"; -import DataTable from "primevue/datatable"; -import InputNumber from "primevue/inputnumber"; -import Dialog from "primevue/dialog"; +import Button from 'primevue/button'; +import InputText from 'primevue/inputtext'; +import Menubar from 'primevue/menubar'; +import Panel from 'primevue/panel'; +import DataTable from 'primevue/datatable'; +import InputNumber from 'primevue/inputnumber'; +import Dialog from 'primevue/dialog'; import 'primeicons/primeicons.css'; -import Dropdown from "primevue/dropdown"; -import Checkbox from "primevue/checkbox"; -import TabView from "primevue/tabview"; -import ScrollPanel from "primevue/scrollpanel"; -import FileUpload from "primevue/fileupload"; -import ProgressSpinner from "primevue/progressspinner"; +import Dropdown from 'primevue/dropdown'; +import Checkbox from 'primevue/checkbox'; +import TabView from 'primevue/tabview'; +import ScrollPanel from 'primevue/scrollpanel'; +import FileUpload from 'primevue/fileupload'; +import ProgressSpinner from 'primevue/progressspinner'; import { useAuthStore } from '@/stores/auth.store'; import SelectButton from 'primevue/selectbutton'; import ToggleButton from 'primevue/togglebutton'; -import "./styles/themes/sudosos-light/theme.scss"; +import './styles/themes/sudosos-light/theme.scss'; import Card from 'primevue/card'; import { useHandlersStore } from '@/stores/handlers.store'; import { useColorStore } from '@/stores/color.store'; diff --git a/src/router/index.ts b/src/router/index.ts index 00cc9af8..953adea6 100644 --- a/src/router/index.ts +++ b/src/router/index.ts @@ -1,18 +1,18 @@ import { createRouter, createWebHistory } from 'vue-router'; -import DashboardLayout from "@/layout/DashboardLayout.vue"; -import AuthView from "@/views/AuthView.vue"; -import DashboardView from "@/views/DashboardView.vue"; -import RoomresponsibleView from "@/views/Infoscreen/RoomresponsibleView.vue"; -import SettingsView from "@/views/Infoscreen/SettingsView.vue"; -import PageNotFoundView from "@/views/PageNotFoundView.vue"; -import { useAuthStore } from "@/stores/auth.store"; -import UnauthorizedView from "@/views/UnauthorizedView.vue"; +import DashboardLayout from '@/layout/DashboardLayout.vue'; +import AuthView from '@/views/AuthView.vue'; +import DashboardView from '@/views/DashboardView.vue'; +import RoomresponsibleView from '@/views/Infoscreen/RoomresponsibleView.vue'; +import SettingsView from '@/views/Infoscreen/SettingsView.vue'; +import PageNotFoundView from '@/views/PageNotFoundView.vue'; +import { useAuthStore } from '@/stores/auth.store'; +import UnauthorizedView from '@/views/UnauthorizedView.vue'; import EffectsControllerWrapper from '@/views/Lights/EffectsControllerWrapper.vue'; declare module 'vue-router' { interface RouteMeta { // must be declared by every route - requiresAuth?: boolean + requiresAuth?: boolean; } } @@ -31,16 +31,15 @@ const router = createRouter({ path: 'callback', component: AuthView, name: 'authCallback' - }, + } ] }, { path: '/unauthorized', component: UnauthorizedView, name: 'unauthorized' - }, - ], - + } + ] }, { path: '', @@ -64,8 +63,8 @@ const router = createRouter({ path: 'roomresponsibles', component: RoomresponsibleView, name: 'infoscreenRoomresposibles' - }, - ], + } + ] }, { path: '/lights', @@ -73,11 +72,11 @@ const router = createRouter({ { path: 'effectsController', component: EffectsControllerWrapper, - name: 'lightsEffectsController', - }, - ], - }, - ], + name: 'lightsEffectsController' + } + ] + } + ] }, { path: '/:pathMatch(.*)*', @@ -89,7 +88,6 @@ const router = createRouter({ }); router.beforeEach((to, from, next) => { - const authStore = useAuthStore(); const authenticated = authStore.isAuthenticated(); const hasRights = authStore.roles && authStore.roles.length > 0; diff --git a/src/stores/auth.store.ts b/src/stores/auth.store.ts index d8b38303..e949599d 100644 --- a/src/stores/auth.store.ts +++ b/src/stores/auth.store.ts @@ -3,15 +3,16 @@ import { Client, OIDCParameters, User } from '@/api/Client'; import { handleError } from '@/utils/errorHandler'; interface AuthStore { - name: string | null, - roles: string[], + name: string | null; + roles: string[]; } export const useAuthStore = defineStore('auth', { - state: () => ({ - name: null, - roles: [], - }) as AuthStore, + state: () => + ({ + name: null, + roles: [] + }) as AuthStore, getters: { getName(): string | null { return this.name; @@ -22,7 +23,8 @@ export const useAuthStore = defineStore('auth', { }, actions: { async init(): Promise { - await (new Client()).getInformation() + await new Client() + .getInformation() .then((res: User) => { this.name = res.name; this.roles = res.roles; @@ -30,7 +32,8 @@ export const useAuthStore = defineStore('auth', { .catch(handleError); }, async OIDCLogin(oidcParameters: OIDCParameters, client: Client): Promise { - await client.authOIDC(oidcParameters) + await client + .authOIDC(oidcParameters) .then((res: User) => { this.name = res.name; this.roles = res.roles; @@ -40,5 +43,5 @@ export const useAuthStore = defineStore('auth', { isAuthenticated(): boolean { return this.name !== undefined && this.roles.length > 0; } - }, + } }); diff --git a/src/stores/color.store.ts b/src/stores/color.store.ts index 50031188..543b9875 100644 --- a/src/stores/color.store.ts +++ b/src/stores/color.store.ts @@ -8,7 +8,7 @@ interface ColorStore { export const useColorStore = defineStore('color', { state: (): ColorStore => ({ - colors: [], + colors: [] }), actions: { async init(): Promise { @@ -19,5 +19,5 @@ export const useColorStore = defineStore('color', { if (!color) return ''; return color.spec.hex; } - }, + } }); diff --git a/src/stores/effects-controller.store.ts b/src/stores/effects-controller.store.ts index 4316cc6d..025191aa 100644 --- a/src/stores/effects-controller.store.ts +++ b/src/stores/effects-controller.store.ts @@ -4,7 +4,7 @@ import { Client, LightsGroup } from '@/api/Client'; interface PushedEffects { timestamp: Date; - lightGroupIds: number[], + lightGroupIds: number[]; effects: LightsEffectsCreateParams[]; } @@ -18,10 +18,9 @@ export const useEffectsControllerStore = defineStore('effectsController', { state: (): EffectsControllerStore => ({ selectedLightsGroupIds: [], chosenEffects: [], - pastPushedEffects: [], + pastPushedEffects: [] }), - getters: { - }, + getters: {}, actions: { toggleLightsGroup(id: number) { const index = this.selectedLightsGroupIds.findIndex((g) => g === id); @@ -48,27 +47,33 @@ export const useEffectsControllerStore = defineStore('effectsController', { }, async sendEffects() { const client = new Client(); - await Promise.all(this.selectedLightsGroupIds.map((id) => { - return client.applyLightsEffect(id, this.chosenEffects); - })); + await Promise.all( + this.selectedLightsGroupIds.map((id) => { + return client.applyLightsEffect(id, this.chosenEffects); + }) + ); this.pastPushedEffects.unshift({ effects: this.chosenEffects, lightGroupIds: this.selectedLightsGroupIds, - timestamp: new Date(), + timestamp: new Date() }); this.chosenEffects = []; }, async enableStrobe() { const client = new Client(); - await Promise.all(this.selectedLightsGroupIds.map((id) => { - return client.enableStrobeOnLightsGroup(id, undefined); - })); + await Promise.all( + this.selectedLightsGroupIds.map((id) => { + return client.enableStrobeOnLightsGroup(id, undefined); + }) + ); }, async disableStrobe() { const client = new Client(); - await Promise.all(this.selectedLightsGroupIds.map((id) => { - return client.disableStrobeOnLightsGroup(id); - })); + await Promise.all( + this.selectedLightsGroupIds.map((id) => { + return client.disableStrobeOnLightsGroup(id); + }) + ); } - }, + } }); diff --git a/src/stores/handlers.store.ts b/src/stores/handlers.store.ts index 4b25c2ef..ae4c5482 100644 --- a/src/stores/handlers.store.ts +++ b/src/stores/handlers.store.ts @@ -4,35 +4,40 @@ import { Client, HandlerResponse_Audio_, HandlerResponse_LightsGroup_, - HandlerResponse_Screen_, LightsGroup, Screen + HandlerResponse_Screen_, + LightsGroup, + Screen } from '@/api/Client'; import { handleError } from '@/utils/errorHandler'; interface HandlersStore { audioHandlers: HandlerResponse_Audio_[]; lightsHandlers: HandlerResponse_LightsGroup_[]; - screenHandlers: HandlerResponse_Screen_[], + screenHandlers: HandlerResponse_Screen_[]; } export const useHandlersStore = defineStore('handlers', { - state: (): HandlersStore => ({ - audioHandlers: [], - lightsHandlers: [], - screenHandlers: [], - } as HandlersStore), - getters: { - }, + state: (): HandlersStore => + ({ + audioHandlers: [], + lightsHandlers: [], + screenHandlers: [] + }) as HandlersStore, + getters: {}, actions: { async init(): Promise { const client = new Client(); - await client.getAudioHandlers() - .then((handlers) => this.audioHandlers = handlers) + await client + .getAudioHandlers() + .then((handlers) => (this.audioHandlers = handlers)) .catch(handleError); - await client.getLightsHandlers() - .then((handlers) => this.lightsHandlers = handlers) + await client + .getLightsHandlers() + .then((handlers) => (this.lightsHandlers = handlers)) .catch(handleError); - await client.getScreenHandlers() - .then((handlers) => this.screenHandlers = handlers) + await client + .getScreenHandlers() + .then((handlers) => (this.screenHandlers = handlers)) .catch(handleError); }, getRegisteredAudios(handlerName?: string): Audio[] { @@ -52,6 +57,6 @@ export const useHandlersStore = defineStore('handlers', { const handler = this.screenHandlers.find((h) => h.name === handlerName); if (!handler) return []; return handler.entities; - }, + } } }); diff --git a/src/stores/subscriber.store.ts b/src/stores/subscriber.store.ts index e64db95f..772a104e 100644 --- a/src/stores/subscriber.store.ts +++ b/src/stores/subscriber.store.ts @@ -1,50 +1,49 @@ import { defineStore } from 'pinia'; interface Subscriber { - name: string, - id: string - active: boolean, - lastSeen: Date, + name: string; + id: string; + active: boolean; + lastSeen: Date; } interface SubscriberStore { - subscribers: Subscriber[], - selected?: Subscriber, + subscribers: Subscriber[]; + selected?: Subscriber; } export const useSubscriberStore = defineStore('subscriber', { - state: () => ({ - subscribers: [] as Subscriber[], - selected: undefined, + state: () => + ({ + subscribers: [] as Subscriber[], + selected: undefined }) as SubscriberStore, - getters: { - + getters: {}, + actions: { + async setSelected(id: string) { + this.selected = this.subscribers.find((s) => s.id === id); }, - actions: { - async setSelected(id: string) { - this.selected = this.subscribers.find((s) => s.id === id); + async fetchSubscribers() { + this.subscribers = [ + { + name: 'PCGEWISB', + id: '358162f8-7038-11ee-9e67-c7a5748223c9', + active: true, + lastSeen: new Date() + }, + { + name: 'PCGEWISC', + id: '44c2c072-7038-11ee-84f8-fb8026ef535e', + active: true, + lastSeen: new Date() }, - async fetchSubscribers() { - this.subscribers = [ - { - name: "PCGEWISB", - id: "358162f8-7038-11ee-9e67-c7a5748223c9", - active: true, - lastSeen: new Date(), - }, - { - name: "PCGEWISC", - id: "44c2c072-7038-11ee-84f8-fb8026ef535e", - active: true, - lastSeen: new Date(), - }, - { - name: "PCGEWISA", - id: "540ccd52-7047-11ee-8bb2-9f053a1e1516", - active: false, - lastSeen: new Date("2023-10-20T15:35:58.000Z"), - } - ]; + { + name: 'PCGEWISA', + id: '540ccd52-7047-11ee-8bb2-9f053a1e1516', + active: false, + lastSeen: new Date('2023-10-20T15:35:58.000Z') } - }, + ]; + } + } }); diff --git a/src/styles/BasePage.scss b/src/styles/BasePage.scss index 018290ac..b5d2e33c 100644 --- a/src/styles/BasePage.scss +++ b/src/styles/BasePage.scss @@ -51,6 +51,5 @@ } } - /*TODO: Fix more for different media sizes*/ /*See: https://github.com/sudosos-frontend-vue3/issues/29 */ diff --git a/src/styles/Modal.css b/src/styles/Modal.css index bde84699..740919db 100644 --- a/src/styles/Modal.css +++ b/src/styles/Modal.css @@ -1,35 +1,37 @@ p { - margin:0; + margin: 0; } -.transaction-row, .product-row { - margin:0; - display: flex; - width: 100%; +.transaction-row, +.product-row { + margin: 0; + display: flex; + width: 100%; } -.transaction-left-column{ - width: 40%; +.transaction-left-column { + width: 40%; } -.transaction-left-column > p, .product-row-left-column > p { - font-weight:bold!important; +.transaction-left-column > p, +.product-row-left-column > p { + font-weight: bold !important; } -.transaction-right-column{ - width: 50%; +.transaction-right-column { + width: 50%; } .product-row-left-column { - width: 60%; + width: 60%; } -.product-row-right-column{ - width: 60%; - text-align: right; +.product-row-right-column { + width: 60%; + text-align: right; } .product-row-total { - width: 100%; - border-top: 1px solid; - text-align: right; -} \ No newline at end of file + width: 100%; + border-top: 1px solid; + text-align: right; +} diff --git a/src/styles/primevue-base/_colors.scss b/src/styles/primevue-base/_colors.scss index de705905..f9837026 100644 --- a/src/styles/primevue-base/_colors.scss +++ b/src/styles/primevue-base/_colors.scss @@ -1,18 +1,17 @@ :root { - @if variable-exists(colors) { - @each $name, $color in $colors { - @for $i from 0 through 5 { - @if ($i == 0) { - --#{$name}-50:#{tint($color, (5 - $i) * 19%)}; - } - @else { - --#{$name}-#{$i * 100}:#{tint($color, (5 - $i) * 19%)}; - } - } - - @for $i from 1 through 4 { - --#{$name}-#{($i + 5) * 100}:#{shade($color, $i * 15%)}; - } + @if variable-exists(colors) { + @each $name, $color in $colors { + @for $i from 0 through 5 { + @if ($i == 0) { + --#{$name}-50: #{tint($color, (5 - $i) * 19%)}; + } @else { + --#{$name}-#{$i * 100}: #{tint($color, (5 - $i) * 19%)}; } + } + + @for $i from 1 through 4 { + --#{$name}-#{($i + 5) * 100}: #{shade($color, $i * 15%)}; + } } -} \ No newline at end of file + } +} diff --git a/src/styles/primevue-base/_common.scss b/src/styles/primevue-base/_common.scss index 2aa486d1..5566eac7 100644 --- a/src/styles/primevue-base/_common.scss +++ b/src/styles/primevue-base/_common.scss @@ -1,75 +1,76 @@ * { - box-sizing: border-box; + box-sizing: border-box; } .p-component { - font-family: $fontFamily; - font-feature-settings: var(--font-feature-settings, normal); - font-size: $fontSize; - font-weight: $fontWeight; + font-family: $fontFamily; + font-feature-settings: var(--font-feature-settings, normal); + font-size: $fontSize; + font-weight: $fontWeight; } .p-component-overlay { - background-color: $maskBg; - transition-duration: $transitionDuration; + background-color: $maskBg; + transition-duration: $transitionDuration; } -.p-disabled, .p-component:disabled { - opacity: $disabledOpacity; +.p-disabled, +.p-component:disabled { + opacity: $disabledOpacity; } .p-error { - color: $errorColor; + color: $errorColor; } .p-text-secondary { - color: $textSecondaryColor; + color: $textSecondaryColor; } .pi { - font-size: $primeIconFontSize; + font-size: $primeIconFontSize; } .p-icon { - width: $primeIconFontSize; - height: $primeIconFontSize; + width: $primeIconFontSize; + height: $primeIconFontSize; } .p-link { - font-family: var(--font-family); - font-feature-settings: var(--font-feature-settings, normal); - font-size: $fontSize; - border-radius: $borderRadius; + font-family: var(--font-family); + font-feature-settings: var(--font-feature-settings, normal); + font-size: $fontSize; + border-radius: $borderRadius; - &:focus-visible { - @include focused(); - } + &:focus-visible { + @include focused(); + } } .p-component-overlay-enter { - animation: p-component-overlay-enter-animation 150ms forwards; + animation: p-component-overlay-enter-animation 150ms forwards; } .p-component-overlay-leave { - animation: p-component-overlay-leave-animation 150ms forwards; + animation: p-component-overlay-leave-animation 150ms forwards; } .p-component-overlay { - @keyframes p-component-overlay-enter-animation { - from { - background-color: transparent; - } - to { - background-color: var(--maskbg); - } + @keyframes p-component-overlay-enter-animation { + from { + background-color: transparent; + } + to { + background-color: var(--maskbg); } + } - @keyframes p-component-overlay-leave-animation { - from { - background-color: var(--maskbg); - } - to { - background-color: transparent; - } + @keyframes p-component-overlay-leave-animation { + from { + background-color: var(--maskbg); + } + to { + background-color: transparent; } + } } diff --git a/src/styles/primevue-base/_components.scss b/src/styles/primevue-base/_components.scss index cc76ab94..881f4d53 100644 --- a/src/styles/primevue-base/_components.scss +++ b/src/styles/primevue-base/_components.scss @@ -4,100 +4,100 @@ @import './components/input/_editor'; @layer primevue { - @import '_common'; + @import '_common'; - //Input - @import './components/input/_autocomplete'; - @import './components/input/_calendar'; - @import './components/input/_cascadeselect'; - @import './components/input/_checkbox'; - @import './components/input/_chips'; - @import './components/input/_colorpicker'; - @import './components/input/_dropdown'; - @import './components/input/_inputgroup'; - @import './components/input/_inputnumber'; - @import './components/input/_inputswitch'; - @import './components/input/_inputtext'; - @import './components/input/_listbox'; - @import './components/input/_multiselect'; - @import './components/input/_password'; - @import './components/input/_radiobutton'; - @import './components/input/_rating'; - @import './components/input/_selectbutton'; - @import './components/input/_slider'; - @import './components/input/_treeselect'; - @import './components/input/_togglebutton'; + //Input + @import './components/input/_autocomplete'; + @import './components/input/_calendar'; + @import './components/input/_cascadeselect'; + @import './components/input/_checkbox'; + @import './components/input/_chips'; + @import './components/input/_colorpicker'; + @import './components/input/_dropdown'; + @import './components/input/_inputgroup'; + @import './components/input/_inputnumber'; + @import './components/input/_inputswitch'; + @import './components/input/_inputtext'; + @import './components/input/_listbox'; + @import './components/input/_multiselect'; + @import './components/input/_password'; + @import './components/input/_radiobutton'; + @import './components/input/_rating'; + @import './components/input/_selectbutton'; + @import './components/input/_slider'; + @import './components/input/_treeselect'; + @import './components/input/_togglebutton'; - //Button - @import './components/button/_button'; - @import './components/button/_speeddial'; - @import './components/button/_splitbutton'; + //Button + @import './components/button/_button'; + @import './components/button/_speeddial'; + @import './components/button/_splitbutton'; - //Data - @import './components/data/_carousel'; - @import './components/data/_datatable'; - @import './components/data/_dataview'; - @import './components/data/_filter'; - @import './components/data/_orderlist'; - @import './components/data/_organizationchart'; - @import './components/data/_paginator'; - @import './components/data/_picklist'; - @import './components/data/_timeline'; - @import './components/data/_tree'; - @import './components/data/_treetable'; + //Data + @import './components/data/_carousel'; + @import './components/data/_datatable'; + @import './components/data/_dataview'; + @import './components/data/_filter'; + @import './components/data/_orderlist'; + @import './components/data/_organizationchart'; + @import './components/data/_paginator'; + @import './components/data/_picklist'; + @import './components/data/_timeline'; + @import './components/data/_tree'; + @import './components/data/_treetable'; - //Panel - @import './components/panel/_accordion'; - @import './components/panel/_card'; - @import './components/panel/_fieldset'; - @import './components/panel/_divider'; - @import './components/panel/_panel'; - @import './components/panel/_scrollpanel'; - @import './components/panel/_splitter'; - @import './components/panel/_tabview'; - @import './components/panel/_toolbar'; + //Panel + @import './components/panel/_accordion'; + @import './components/panel/_card'; + @import './components/panel/_fieldset'; + @import './components/panel/_divider'; + @import './components/panel/_panel'; + @import './components/panel/_scrollpanel'; + @import './components/panel/_splitter'; + @import './components/panel/_tabview'; + @import './components/panel/_toolbar'; - //Overlay - @import './components/overlay/_confirmpopup'; - @import './components/overlay/_dialog'; - @import './components/overlay/_overlaypanel'; - @import './components/overlay/_sidebar'; - @import './components/overlay/_tooltip'; + //Overlay + @import './components/overlay/_confirmpopup'; + @import './components/overlay/_dialog'; + @import './components/overlay/_overlaypanel'; + @import './components/overlay/_sidebar'; + @import './components/overlay/_tooltip'; - //File - @import './components/file/_fileupload'; + //File + @import './components/file/_fileupload'; - //Menu - @import './components/menu/_breadcrumb'; - @import './components/menu/_contextmenu'; - @import './components/menu/_dock'; - @import './components/menu/_megamenu'; - @import './components/menu/_menu'; - @import './components/menu/_menubar'; - @import './components/menu/_panelmenu'; - @import './components/menu/_steps'; - @import './components/menu/_tabmenu'; - @import './components/menu/_tieredmenu'; + //Menu + @import './components/menu/_breadcrumb'; + @import './components/menu/_contextmenu'; + @import './components/menu/_dock'; + @import './components/menu/_megamenu'; + @import './components/menu/_menu'; + @import './components/menu/_menubar'; + @import './components/menu/_panelmenu'; + @import './components/menu/_steps'; + @import './components/menu/_tabmenu'; + @import './components/menu/_tieredmenu'; - //Messages - @import './components/messages/_inlinemessage'; - @import './components/messages/_message'; - @import 'components/messages/toast'; + //Messages + @import './components/messages/_inlinemessage'; + @import './components/messages/_message'; + @import 'components/messages/toast'; - //MultiMedia - @import './components/multimedia/_galleria'; - @import './components/multimedia/_image'; + //MultiMedia + @import './components/multimedia/_galleria'; + @import './components/multimedia/_image'; - //Misc - @import './components/misc/_avatar'; - @import './components/misc/_badge'; - @import './components/misc/_blockui'; - @import './components/misc/_chip'; - @import './components/misc/_inplace'; - @import './components/misc/_progressbar'; - @import './components/misc/_progressspinner'; - @import './components/misc/_scrolltop'; - @import './components/misc/_skeleton'; - @import './components/misc/_tag'; - @import './components/misc/_terminal'; -} \ No newline at end of file + //Misc + @import './components/misc/_avatar'; + @import './components/misc/_badge'; + @import './components/misc/_blockui'; + @import './components/misc/_chip'; + @import './components/misc/_inplace'; + @import './components/misc/_progressbar'; + @import './components/misc/_progressspinner'; + @import './components/misc/_scrolltop'; + @import './components/misc/_skeleton'; + @import './components/misc/_tag'; + @import './components/misc/_terminal'; +} diff --git a/src/styles/primevue-base/_mixins.scss b/src/styles/primevue-base/_mixins.scss index 912f9760..4a546640 100644 --- a/src/styles/primevue-base/_mixins.scss +++ b/src/styles/primevue-base/_mixins.scss @@ -1,534 +1,556 @@ @mixin icon-override($icon) { - &:before { - content: $icon; - } + &:before { + content: $icon; + } } @mixin focused() { - outline: $focusOutline; - outline-offset: $focusOutlineOffset; - box-shadow: $focusShadow; + outline: $focusOutline; + outline-offset: $focusOutlineOffset; + box-shadow: $focusShadow; } @mixin focused-inset() { - outline: $focusOutline; - outline-offset: $focusOutlineOffset; - box-shadow: inset $focusShadow; + outline: $focusOutline; + outline-offset: $focusOutlineOffset; + box-shadow: inset $focusShadow; } @mixin focused-input() { - @include focused(); - border-color: $inputFocusBorderColor; + @include focused(); + border-color: $inputFocusBorderColor; } @mixin focused-listitem() { - outline: $focusOutline; - outline-offset: $focusOutlineOffset; - box-shadow: $inputListItemFocusShadow; + outline: $focusOutline; + outline-offset: $focusOutlineOffset; + box-shadow: $inputListItemFocusShadow; } @mixin invalid-input() { - border-color: $inputErrorBorderColor; + border-color: $inputErrorBorderColor; } @mixin submenuitem { - > .p-menuitem-content { - color: $submenuTextColor; - transition: $listItemTransition; - border-radius: $menuitemBorderRadius; - - - .p-menuitem-link { - color: $submenuitemTextColor; - padding: $menuitemPadding; - user-select: none; - - .p-menuitem-text { - color: $submenuitemTextColor; - font-family: $fontFamily; - font-weight: 500; - - } - - .p-menuitem-icon { - color: $submenuitemIconColor; - margin-right: $inlineSpacing; - } - - .p-submenu-icon { - color: $submenuitemIconColor; - } - } + > .p-menuitem-content { + color: $submenuTextColor; + transition: $listItemTransition; + border-radius: $menuitemBorderRadius; + + .p-menuitem-link { + color: $submenuitemTextColor; + padding: $menuitemPadding; + user-select: none; + + .p-menuitem-text { + color: $submenuitemTextColor; + font-family: $fontFamily; + font-weight: 500; + } + + .p-menuitem-icon { + color: $submenuitemIconColor; + margin-right: $inlineSpacing; + } + + .p-submenu-icon { + color: $submenuitemIconColor; + } } + } - &.p-highlight { - > .p-menuitem-content { - color: $submenuitemTextActiveColor; - background: $submenuitemActiveBg; - - .p-menuitem-link { - .p-menuitem-text { - color: $submenuitemTextActiveColor; - } + &.p-highlight { + > .p-menuitem-content { + color: $submenuitemTextActiveColor; + background: $submenuitemActiveBg; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $submenuitemIconActiveColor; - } - } + .p-menuitem-link { + .p-menuitem-text { + color: $submenuitemTextActiveColor; } - &.p-focus { - > .p-menuitem-content { - background: $submenuitemActiveFocusBg; - } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $submenuitemIconActiveColor; } + } } - &:not(.p-highlight):not(.p-disabled) { - &.p-focus { - > .p-menuitem-content { - color: $submenuitemTextFocusColor; + &.p-focus { + > .p-menuitem-content { + background: $submenuitemActiveFocusBg; + } + } + } - .p-menuitem-link { - color: $submenuitemTextFocusColor; + &:not(.p-highlight):not(.p-disabled) { + &.p-focus { + > .p-menuitem-content { + color: $submenuitemTextFocusColor; - .p-menuitem-text { - color: $submenuitemTextFocusColor; - } + .p-menuitem-link { + color: $submenuitemTextFocusColor; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $submenuitemIconFocusColor; - } - } - } - } + .p-menuitem-text { + color: $submenuitemTextFocusColor; + } - > .p-menuitem-content { - &:hover { - color: $submenuitemTextHoverColor; - - .p-menuitem-link { - .p-menuitem-text { - color: $submenuitemTextHoverColor; - transition: $listItemTransition; - } - - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $submenuitemIconHoverColor; - transition: $listItemTransition; - } - } - } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $submenuitemIconFocusColor; + } } + } } -} -@mixin menuitem { + > .p-menuitem-content { - color: $menuitemTextColor; - transition: $listItemTransition; - border-radius: $menuitemBorderRadius; + &:hover { + color: $submenuitemTextHoverColor; .p-menuitem-link { - color: $menuitemTextColor; - padding: $menuitemPadding; - user-select: none; - - .p-menuitem-text { - color: $menuitemTextColor; - font-family: $fontFamily; - font-weight: 500; - } - .p-menuitem-icon { - color: $menuitemIconColor; - margin-right: $inlineSpacing; - } - - .p-submenu-icon { - color: $menuitemIconColor; - } + .p-menuitem-text { + color: $submenuitemTextHoverColor; + transition: $listItemTransition; + } + + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $submenuitemIconHoverColor; + transition: $listItemTransition; + } } + } } + } +} +@mixin menuitem { + > .p-menuitem-content { + color: $menuitemTextColor; + transition: $listItemTransition; + border-radius: $menuitemBorderRadius; - &.p-highlight { - > .p-menuitem-content { - color: $menuitemTextActiveColor; - background: $menuitemActiveBg; + .p-menuitem-link { + color: $menuitemTextColor; + padding: $menuitemPadding; + user-select: none; - .p-menuitem-link { - .p-menuitem-text { - color: $menuitemTextActiveColor; - } + .p-menuitem-text { + color: $menuitemTextColor; + font-family: $fontFamily; + font-weight: 500; + } + .p-menuitem-icon { + color: $menuitemIconColor; + margin-right: $inlineSpacing; + } + + .p-submenu-icon { + color: $menuitemIconColor; + } + } + } + + &.p-highlight { + > .p-menuitem-content { + color: $menuitemTextActiveColor; + background: $menuitemActiveBg; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $menuitemIconActiveColor; - } - } + .p-menuitem-link { + .p-menuitem-text { + color: $menuitemTextActiveColor; } - &.p-focus { - > .p-menuitem-content { - background: $menuitemActiveFocusBg; - } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $menuitemIconActiveColor; } + } } - &:not(.p-highlight):not(.p-disabled) { - &.p-focus { - > .p-menuitem-content { - color: $menuitemTextFocusColor; - background: $menuitemFocusBg; + &.p-focus { + > .p-menuitem-content { + background: $menuitemActiveFocusBg; + } + } + } - .p-menuitem-link { - color: $menuitemTextFocusColor; + &:not(.p-highlight):not(.p-disabled) { + &.p-focus { + > .p-menuitem-content { + color: $menuitemTextFocusColor; + background: $menuitemFocusBg; - .p-menuitem-text { - color: $menuitemTextFocusColor; - } + .p-menuitem-link { + color: $menuitemTextFocusColor; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $menuitemIconFocusColor; - } - } - } - } + .p-menuitem-text { + color: $menuitemTextFocusColor; + } - > .p-menuitem-content { - &:hover { - color: $menuitemTextHoverColor; - background: $menuitemHoverBg; - - .p-menuitem-link { - padding: $menuitemPadding; - .p-menuitem-text { - color: $menuitemTextHoverColor; - transition: $listItemTransition; - } - - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $menuitemIconHoverColor; - transition: $listItemTransition; - } - } - } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $menuitemIconFocusColor; + } } + } } -} -@mixin mobilemenuitem { > .p-menuitem-content { - color: $menuitemTextColor; - transition: $listItemTransition; - border-radius: $menuitemBorderRadius; + &:hover { + color: $menuitemTextHoverColor; + background: $menuitemHoverBg; .p-menuitem-link { - color: $menuitemTextColor; - padding: $mobilemenuitemPadding; - user-select: none; - - .p-menuitem-text { - color: $menuitemTextColor; - font-family: $fontFamily; - font-weight: 500; - } - - .p-menuitem-icon { - color: $menuitemIconColor; - margin-right: $inlineSpacing; - } - - .p-submenu-icon { - color: $menuitemIconColor; - } + padding: $menuitemPadding; + .p-menuitem-text { + color: $menuitemTextHoverColor; + transition: $listItemTransition; + } + + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $menuitemIconHoverColor; + transition: $listItemTransition; + } } - + } } + } +} - &.p-highlight { - > .p-menuitem-content { - color: $menuitemTextActiveColor; - background: $menuitemActiveBg; - - .p-menuitem-link { - padding: $mobilemenuitemPadding; - .p-menuitem-text { - color: $menuitemTextActiveColor; - } - - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $menuitemIconActiveColor; - } - } - } +@mixin mobilemenuitem { + > .p-menuitem-content { + color: $menuitemTextColor; + transition: $listItemTransition; + border-radius: $menuitemBorderRadius; - &.p-focus { - > .p-menuitem-content { - background: transparent; - } - } + .p-menuitem-link { + color: $menuitemTextColor; + padding: $mobilemenuitemPadding; + user-select: none; + + .p-menuitem-text { + color: $menuitemTextColor; + font-family: $fontFamily; + font-weight: 500; + } + + .p-menuitem-icon { + color: $menuitemIconColor; + margin-right: $inlineSpacing; + } + + .p-submenu-icon { + color: $menuitemIconColor; + } } + } + + &.p-highlight { + > .p-menuitem-content { + color: $menuitemTextActiveColor; + background: $menuitemActiveBg; - &:not(.p-highlight):not(.p-disabled) { - &.p-focus { - > .p-menuitem-content { - color: $menuitemTextFocusColor; - background: transparent; - - .p-menuitem-link { - color: $menuitemTextFocusColor; - padding: $mobilemenuitemPadding; - - .p-menuitem-text { - color: $menuitemTextFocusColor; - } - - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $menuitemIconFocusColor; - } - } - } + .p-menuitem-link { + padding: $mobilemenuitemPadding; + .p-menuitem-text { + color: $menuitemTextActiveColor; } - > .p-menuitem-content { - &:hover { - color: $menuitemTextHoverColor; - background: transparent; - - .p-menuitem-link { - .p-menuitem-text { - color: $menuitemTextHoverColor; - transition: $listItemTransition; - } - - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $menuitemIconHoverColor; - transition: $listItemTransition; - } - } - } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $menuitemIconActiveColor; } + } } -} -@mixin mobilesubmenuitem { - .p-menuitem-content { - color: $submenuTextColor; - transition: $listItemTransition; - border-radius: $menuitemBorderRadius; - - .p-menuitem-link { - color: $submenuitemTextColor; - padding: $mobilesubmenuitemPadding !important; - user-select: none; + &.p-focus { + > .p-menuitem-content { + background: transparent; + } + } + } - .p-menuitem-text { - color: $submenuitemTextColor; - font-family: $fontFamily; - font-weight: 500; + &:not(.p-highlight):not(.p-disabled) { + &.p-focus { + > .p-menuitem-content { + color: $menuitemTextFocusColor; + background: transparent; - } + .p-menuitem-link { + color: $menuitemTextFocusColor; + padding: $mobilemenuitemPadding; + + .p-menuitem-text { + color: $menuitemTextFocusColor; + } + + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $menuitemIconFocusColor; + } + } + } + } - .p-menuitem-icon { - color: $submenuitemIconColor; - margin-right: $inlineSpacing; - } + > .p-menuitem-content { + &:hover { + color: $menuitemTextHoverColor; + background: transparent; - .p-submenu-icon { - color: $submenuitemIconColor; - } + .p-menuitem-link { + .p-menuitem-text { + color: $menuitemTextHoverColor; + transition: $listItemTransition; + } + + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $menuitemIconHoverColor; + transition: $listItemTransition; + } } + } } + } +} - &.p-highlight { - > .p-menuitem-content { - color: $submenuitemTextActiveColor; - background: $submenuitemActiveBg; +@mixin mobilesubmenuitem { + .p-menuitem-content { + color: $submenuTextColor; + transition: $listItemTransition; + border-radius: $menuitemBorderRadius; + + .p-menuitem-link { + color: $submenuitemTextColor; + padding: $mobilesubmenuitemPadding !important; + user-select: none; + + .p-menuitem-text { + color: $submenuitemTextColor; + font-family: $fontFamily; + font-weight: 500; + } + + .p-menuitem-icon { + color: $submenuitemIconColor; + margin-right: $inlineSpacing; + } + + .p-submenu-icon { + color: $submenuitemIconColor; + } + } + } - .p-menuitem-link { - padding: $mobilemenuitemPadding; + &.p-highlight { + > .p-menuitem-content { + color: $submenuitemTextActiveColor; + background: $submenuitemActiveBg; - .p-menuitem-text { - color: $submenuitemTextActiveColor; - } + .p-menuitem-link { + padding: $mobilemenuitemPadding; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $submenuitemIconActiveColor; - } - } + .p-menuitem-text { + color: $submenuitemTextActiveColor; } - &.p-focus { - > .p-menuitem-content { - background: $submenuitemActiveFocusBg; - } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $submenuitemIconActiveColor; } + } } - &:not(.p-highlight):not(.p-disabled) { - &.p-focus { - > .p-menuitem-content { - color: $submenuitemTextFocusColor; - - .p-menuitem-link { - color: $submenuitemTextFocusColor; - padding: $mobilemenuitemPadding; + &.p-focus { + > .p-menuitem-content { + background: $submenuitemActiveFocusBg; + } + } + } - .p-menuitem-text { - color: $submenuitemTextFocusColor; - } + &:not(.p-highlight):not(.p-disabled) { + &.p-focus { + > .p-menuitem-content { + color: $submenuitemTextFocusColor; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $submenuitemIconFocusColor; - } - } - } + .p-menuitem-link { + color: $submenuitemTextFocusColor; + padding: $mobilemenuitemPadding; + + .p-menuitem-text { + color: $submenuitemTextFocusColor; + } + + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $submenuitemIconFocusColor; + } } + } + } - > .p-menuitem-content { - &:hover { - color: $submenuitemTextHoverColor; - - .p-menuitem-link { - padding: $mobilemenuitemPadding; - - .p-menuitem-text { - color: $submenuitemTextHoverColor; - transition: $listItemTransition; - } + > .p-menuitem-content { + &:hover { + color: $submenuitemTextHoverColor; - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $submenuitemIconHoverColor; - transition: $listItemTransition; - } - } - } + .p-menuitem-link { + padding: $mobilemenuitemPadding; + + .p-menuitem-text { + color: $submenuitemTextHoverColor; + transition: $listItemTransition; + } + + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $submenuitemIconHoverColor; + transition: $listItemTransition; + } } + } } + } } @mixin horizontal-rootmenuitem { - > .p-menuitem-content { - color: $horizontalMenuRootMenuitemTextColor; - transition: $listItemTransition; - border-radius: $horizontalMenuRootMenuitemBorderRadius; + > .p-menuitem-content { + color: $horizontalMenuRootMenuitemTextColor; + transition: $listItemTransition; + border-radius: $horizontalMenuRootMenuitemBorderRadius; - .p-menuitem-link { - padding: $horizontalMenuRootMenuitemPadding; - user-select: none; - - .p-menuitem-text { - color: $horizontalMenuRootMenuitemTextColor; - } - - .p-menuitem-icon { - color: $horizontalMenuRootMenuitemIconColor; - margin-right: $inlineSpacing; - } - .p-submenu-icon { - color: $horizontalMenuRootMenuitemIconColor; - margin-left: $inlineSpacing; - } - } + .p-menuitem-link { + padding: $horizontalMenuRootMenuitemPadding; + user-select: none; + + .p-menuitem-text { + color: $horizontalMenuRootMenuitemTextColor; + } + + .p-menuitem-icon { + color: $horizontalMenuRootMenuitemIconColor; + margin-right: $inlineSpacing; + } + .p-submenu-icon { + color: $horizontalMenuRootMenuitemIconColor; + margin-left: $inlineSpacing; + } } + } - &:not(.p-highlight):not(.p-disabled) { - > .p-menuitem-content { - &:hover { - color: $horizontalMenuRootMenuitemTextHoverColor; - background: $horizontalMenuRootMenuitemHoverBg; - - .p-menuitem-link { - .p-menuitem-text { - color: $horizontalMenuRootMenuitemTextHoverColor; - } - .p-menuitem-icon, .p-submenu-icon, .pi { - color: $horizontalMenuRootMenuitemIconHoverColor; - } - } - } + &:not(.p-highlight):not(.p-disabled) { + > .p-menuitem-content { + &:hover { + color: $horizontalMenuRootMenuitemTextHoverColor; + background: $horizontalMenuRootMenuitemHoverBg; + + .p-menuitem-link { + .p-menuitem-text { + color: $horizontalMenuRootMenuitemTextHoverColor; + } + .p-menuitem-icon, + .p-submenu-icon, + .pi { + color: $horizontalMenuRootMenuitemIconHoverColor; + } } + } } + } } @mixin placeholder { - ::-webkit-input-placeholder { - @content - } - :-moz-placeholder { - @content - } - ::-moz-placeholder { - @content - } - :-ms-input-placeholder { - @content - } + ::-webkit-input-placeholder { + @content; + } + :-moz-placeholder { + @content; + } + ::-moz-placeholder { + @content; + } + :-ms-input-placeholder { + @content; + } } @mixin scaledPadding($val, $scale) { - padding: nth($val, 1) * $scale nth($val, 2) * $scale; + padding: nth($val, 1) * $scale nth($val, 2) * $scale; } @mixin scaledFontSize($val, $scale) { - font-size: $val * $scale; + font-size: $val * $scale; } @mixin nested-submenu-indents($val, $index, $length) { - .p-submenu-list { - .p-menuitem { - .p-menuitem-content { - .p-menuitem-link { - padding-left: $val * ($index + 1); - } - } - @if $index < $length { - @include nested-submenu-indents($val, $index + 2, $length); - } + .p-submenu-list { + .p-menuitem { + .p-menuitem-content { + .p-menuitem-link { + padding-left: $val * ($index + 1); } + } + @if $index < $length { + @include nested-submenu-indents($val, $index + 2, $length); + } } + } } @mixin action-icon($enabled: true) { - width: $actionIconWidth; - height: $actionIconHeight; - color: $actionIconColor; - border: $actionIconBorder; - background: $actionIconBg; - border-radius: $actionIconBorderRadius; - transition: $actionIconTransition; - - @if $enabled { - &:enabled:hover { - @include action-icon-hover(); - } - } @else { - &:hover { - @include action-icon-hover(); - } + width: $actionIconWidth; + height: $actionIconHeight; + color: $actionIconColor; + border: $actionIconBorder; + background: $actionIconBg; + border-radius: $actionIconBorderRadius; + transition: $actionIconTransition; + + @if $enabled { + &:enabled:hover { + @include action-icon-hover(); } - - &:focus-visible { - @include focused(); + } @else { + &:hover { + @include action-icon-hover(); } + } + + &:focus-visible { + @include focused(); + } } @mixin action-icon-hover() { - color: $actionIconHoverColor; - border-color: $actionIconHoverBorderColor; - background: $actionIconHoverBg; + color: $actionIconHoverColor; + border-color: $actionIconHoverBorderColor; + background: $actionIconHoverBg; } @mixin button-states { - //
@@ -11,15 +10,11 @@ From 7fe47633fdf277f5e8d4863655730872b037cd37 Mon Sep 17 00:00:00 2001 From: Yoronex Date: Sat, 17 Feb 2024 21:42:02 +0100 Subject: [PATCH 047/252] Add all subscriber status to dashboard with handler dropdown --- src/api/Client.ts | 186 ++++-------------- .../home/LightsControllerItemComponent.vue | 40 ++++ .../home/SubscriberHandlerChangeDropdown.vue | 32 +++ .../home/SubscriberItemComponent.vue | 33 ++-- src/components/home/SubscriberItemContent.vue | 32 +++ src/components/home/SubscribersOverview.vue | 90 +++++++-- src/stores/handlers.store.ts | 56 +++++- 7 files changed, 290 insertions(+), 179 deletions(-) create mode 100644 src/components/home/LightsControllerItemComponent.vue create mode 100644 src/components/home/SubscriberHandlerChangeDropdown.vue create mode 100644 src/components/home/SubscriberItemContent.vue diff --git a/src/api/Client.ts b/src/api/Client.ts index 58864300..3a7769df 100644 --- a/src/api/Client.ts +++ b/src/api/Client.ts @@ -1266,7 +1266,7 @@ export class Client { /** * @return No content */ - setAudioHandler(id: number, body: Body2): Promise { + setAudioHandler(id: number, body: NewHandlerParams): Promise { let url_ = this.baseUrl + "/handler/audio/{id}"; if (id === undefined || id === null) throw new Error("The parameter 'id' must be defined."); @@ -1350,7 +1350,7 @@ export class Client { /** * @return No content */ - setLightsHandler(id: number, body: Body3): Promise { + setLightsHandler(id: number, body: NewHandlerParams): Promise { let url_ = this.baseUrl + "/handler/lights/{id}"; if (id === undefined || id === null) throw new Error("The parameter 'id' must be defined."); @@ -1434,7 +1434,7 @@ export class Client { /** * @return No content */ - setScreenHandler(id: number, body: Body4): Promise { + setScreenHandler(id: number, body: NewHandlerParams): Promise { let url_ = this.baseUrl + "/handler/screen/{id}"; if (id === undefined || id === null) throw new Error("The parameter 'id' must be defined."); @@ -5775,6 +5775,42 @@ export interface IHandlerResponse_AudioResponse_ { name: string; } +export class NewHandlerParams implements INewHandlerParams { + name!: string; + + constructor(data?: INewHandlerParams) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + this.name = _data["name"]; + } + } + + static fromJS(data: any): NewHandlerParams { + data = typeof data === 'object' ? data : {}; + let result = new NewHandlerParams(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + data["name"] = this.name; + return data; + } +} + +export interface INewHandlerParams { + name: string; +} + export class LightsControllerResponse implements ILightsControllerResponse { id!: number; createdAt!: Date; @@ -7345,150 +7381,6 @@ export interface IBody { [key: string]: any; } -export class Body2 implements IBody2 { - name!: string; - - [key: string]: any; - - constructor(data?: IBody2) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - for (var property in _data) { - if (_data.hasOwnProperty(property)) - this[property] = _data[property]; - } - this.name = _data["name"]; - } - } - - static fromJS(data: any): Body2 { - data = typeof data === 'object' ? data : {}; - let result = new Body2(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - for (var property in this) { - if (this.hasOwnProperty(property)) - data[property] = this[property]; - } - data["name"] = this.name; - return data; - } -} - -export interface IBody2 { - name: string; - - [key: string]: any; -} - -export class Body3 implements IBody3 { - name!: string; - - [key: string]: any; - - constructor(data?: IBody3) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - for (var property in _data) { - if (_data.hasOwnProperty(property)) - this[property] = _data[property]; - } - this.name = _data["name"]; - } - } - - static fromJS(data: any): Body3 { - data = typeof data === 'object' ? data : {}; - let result = new Body3(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - for (var property in this) { - if (this.hasOwnProperty(property)) - data[property] = this[property]; - } - data["name"] = this.name; - return data; - } -} - -export interface IBody3 { - name: string; - - [key: string]: any; -} - -export class Body4 implements IBody4 { - name!: string; - - [key: string]: any; - - constructor(data?: IBody4) { - if (data) { - for (var property in data) { - if (data.hasOwnProperty(property)) - (this)[property] = (data)[property]; - } - } - } - - init(_data?: any) { - if (_data) { - for (var property in _data) { - if (_data.hasOwnProperty(property)) - this[property] = _data[property]; - } - this.name = _data["name"]; - } - } - - static fromJS(data: any): Body4 { - data = typeof data === 'object' ? data : {}; - let result = new Body4(); - result.init(data); - return result; - } - - toJSON(data?: any) { - data = typeof data === 'object' ? data : {}; - for (var property in this) { - if (this.hasOwnProperty(property)) - data[property] = this[property]; - } - data["name"] = this.name; - return data; - } -} - -export interface IBody4 { - name: string; - - [key: string]: any; -} - export class Anonymous implements IAnonymous { [key: string]: any; diff --git a/src/components/home/LightsControllerItemComponent.vue b/src/components/home/LightsControllerItemComponent.vue new file mode 100644 index 00000000..b933e7b9 --- /dev/null +++ b/src/components/home/LightsControllerItemComponent.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/src/components/home/SubscriberHandlerChangeDropdown.vue b/src/components/home/SubscriberHandlerChangeDropdown.vue new file mode 100644 index 00000000..e1ce30ac --- /dev/null +++ b/src/components/home/SubscriberHandlerChangeDropdown.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/components/home/SubscriberItemComponent.vue b/src/components/home/SubscriberItemComponent.vue index 5184c5f5..e94da634 100644 --- a/src/components/home/SubscriberItemComponent.vue +++ b/src/components/home/SubscriberItemComponent.vue @@ -1,24 +1,29 @@ diff --git a/src/components/home/SubscriberItemContent.vue b/src/components/home/SubscriberItemContent.vue new file mode 100644 index 00000000..f9536bf1 --- /dev/null +++ b/src/components/home/SubscriberItemContent.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/components/home/SubscribersOverview.vue b/src/components/home/SubscribersOverview.vue index 78c00acb..1c0dae52 100644 --- a/src/components/home/SubscribersOverview.vue +++ b/src/components/home/SubscribersOverview.vue @@ -1,19 +1,69 @@ @@ -24,10 +74,18 @@ import { useSubscriberStore } from '@/stores/subscriber.store'; import CardComponent from '@/layout/CardComponent.vue'; import SubscriberItemComponent from '@/components/home/SubscriberItemComponent.vue'; import { computed } from 'vue'; +import { faDisplay, faLightbulb, faVolumeHigh } from '@fortawesome/free-solid-svg-icons'; +import { useHandlersStore } from '@/stores/handlers.store'; +import SubscriberItemContent from '@/components/home/SubscriberItemContent.vue'; +import LightsControllerItemComponent from '@/components/home/LightsControllerItemComponent.vue'; +import SubscriberHandlerChangeDropdown from '@/components/home/SubscriberHandlerChangeDropdown.vue'; + +const subscriberStore = storeToRefs(useSubscriberStore()); +const handlersStore = useHandlersStore(); +const controllers = computed(() => subscriberStore.lightsGroups.value + .map((g) => g.controller) + .filter((c1, index, all) => index === all.findIndex((c2) => c1.id === c2.id))); -const subscribers = storeToRefs(useSubscriberStore()); -const active = computed(() => subscribers.screens.value.filter((s) => s.socketId != null)); -const inactive = computed(() => subscribers.screens.value.filter((s) => s.socketId == null)); diff --git a/src/stores/handlers.store.ts b/src/stores/handlers.store.ts index 250b5874..687a7d9e 100644 --- a/src/stores/handlers.store.ts +++ b/src/stores/handlers.store.ts @@ -5,14 +5,19 @@ import { HandlerResponse_AudioResponse_, HandlerResponse_LightsGroupResponse_, HandlerResponse_ScreenResponse_, - LightsGroupResponse, ScreenResponse + LightsGroupResponse, NewHandlerParams, ScreenResponse } from '@/api/Client'; import { handleError } from '@/utils/errorHandler'; +export type Handler = HandlerResponse_ScreenResponse_ + | HandlerResponse_AudioResponse_ + | HandlerResponse_LightsGroupResponse_; + interface HandlersStore { audioHandlers: HandlerResponse_AudioResponse_[]; lightsHandlers: HandlerResponse_LightsGroupResponse_[]; screenHandlers: HandlerResponse_ScreenResponse_[]; + loading: boolean; } export const useHandlersStore = defineStore('handlers', { @@ -20,7 +25,8 @@ export const useHandlersStore = defineStore('handlers', { ({ audioHandlers: [], lightsHandlers: [], - screenHandlers: [] + screenHandlers: [], + loading: true, }) as HandlersStore, getters: {}, actions: { @@ -38,6 +44,52 @@ export const useHandlersStore = defineStore('handlers', { .getScreenHandlers() .then((handlers) => (this.screenHandlers = handlers)) .catch(handleError); + this.loading = false; + }, + async setAudioHandler(id: number, newHandler: string | null): Promise { + try { + this.loading = true; + + const client = new Client(); + const params = new NewHandlerParams(); + params.name = newHandler != null ? newHandler : ''; + await client.setAudioHandler(id, params); + + this.audioHandlers = await client.getAudioHandlers(); + } catch (e: any) { + handleError(e); + } + this.loading = false; + }, + async setLightsHandler(id: number, newHandler: string | null): Promise { + try { + this.loading = true; + + const client = new Client(); + const params = new NewHandlerParams(); + params.name = newHandler != null ? newHandler : ''; + await client.setLightsHandler(id, params); + + this.lightsHandlers = await client.getLightsHandlers(); + } catch (e: any) { + handleError(e); + } + this.loading = false; + }, + async setScreenHandler(id: number, newHandler: string | null): Promise { + try { + this.loading = true; + + const client = new Client(); + const params = new NewHandlerParams(); + params.name = newHandler != null ? newHandler : ''; + await client.setScreenHandler(id, params); + + this.screenHandlers = await client.getScreenHandlers(); + } catch (e: any) { + handleError(e); + } + this.loading = false; }, getRegisteredAudios(handlerName?: string): AudioResponse[] { if (!handlerName) return this.audioHandlers.map((h) => h.entities).flat(); From efe9b0a81686acd977d44569c65444ce3a2004ed Mon Sep 17 00:00:00 2001 From: Yoronex Date: Wed, 21 Feb 2024 21:41:27 +0100 Subject: [PATCH 048/252] Update client to support socket IDs list --- src/api/Client.ts | 110 +++++++++++++++--- .../home/LightsControllerItemComponent.vue | 11 +- .../home/SubscriberItemComponent.vue | 11 +- src/components/home/SubscriberItemContent.vue | 14 ++- 4 files changed, 120 insertions(+), 26 deletions(-) diff --git a/src/api/Client.ts b/src/api/Client.ts index 3a7769df..07baa047 100644 --- a/src/api/Client.ts +++ b/src/api/Client.ts @@ -5664,14 +5664,78 @@ export interface ICenturionParams { centurionName: string; } +/** Make all properties in T optional */ +export class String__ implements IString__ { + _?: string; + _audio?: string; + _screen?: string; + _lights?: string; + + [key: string]: any; + + constructor(data?: IString__) { + if (data) { + for (var property in data) { + if (data.hasOwnProperty(property)) + (this)[property] = (data)[property]; + } + } + } + + init(_data?: any) { + if (_data) { + for (var property in _data) { + if (_data.hasOwnProperty(property)) + this[property] = _data[property]; + } + this._ = _data["/"]; + this._audio = _data["/audio"]; + this._screen = _data["/screen"]; + this._lights = _data["/lights"]; + } + } + + static fromJS(data: any): String__ { + data = typeof data === 'object' ? data : {}; + let result = new String__(); + result.init(data); + return result; + } + + toJSON(data?: any) { + data = typeof data === 'object' ? data : {}; + for (var property in this) { + if (this.hasOwnProperty(property)) + data[property] = this[property]; + } + data["/"] = this._; + data["/audio"] = this._audio; + data["/screen"] = this._screen; + data["/lights"] = this._lights; + return data; + } +} + +/** Make all properties in T optional */ +export interface IString__ { + _?: string; + _audio?: string; + _screen?: string; + _lights?: string; + + [key: string]: any; +} + export class AudioResponse implements IAudioResponse { id!: number; createdAt!: Date; updatedAt!: Date; name!: string; /** ID of the socket connection if present. -Required to send events specifically and only to this entity */ - socketId?: string; +Required to send events specifically and only to this entity. +Mapping from namespace to ID, as a websocket has a different ID +for each namespace its in. */ + socketIds?: String__; constructor(data?: IAudioResponse) { if (data) { @@ -5688,7 +5752,7 @@ Required to send events specifically and only to this entity */ this.createdAt = _data["createdAt"] ? new Date(_data["createdAt"].toString()) : undefined; this.updatedAt = _data["updatedAt"] ? new Date(_data["updatedAt"].toString()) : undefined; this.name = _data["name"]; - this.socketId = _data["socketId"]; + this.socketIds = _data["socketIds"] ? String__.fromJS(_data["socketIds"]) : undefined; } } @@ -5705,7 +5769,7 @@ Required to send events specifically and only to this entity */ data["createdAt"] = this.createdAt ? this.createdAt.toISOString() : undefined; data["updatedAt"] = this.updatedAt ? this.updatedAt.toISOString() : undefined; data["name"] = this.name; - data["socketId"] = this.socketId; + data["socketIds"] = this.socketIds ? this.socketIds.toJSON() : undefined; return data; } } @@ -5716,8 +5780,10 @@ export interface IAudioResponse { updatedAt: Date; name: string; /** ID of the socket connection if present. -Required to send events specifically and only to this entity */ - socketId?: string; +Required to send events specifically and only to this entity. +Mapping from namespace to ID, as a websocket has a different ID +for each namespace its in. */ + socketIds?: String__; } export class HandlerResponse_AudioResponse_ implements IHandlerResponse_AudioResponse_ { @@ -5817,8 +5883,10 @@ export class LightsControllerResponse implements ILightsControllerResponse { updatedAt!: Date; name!: string; /** ID of the socket connection if present. -Required to send events specifically and only to this entity */ - socketId?: string; +Required to send events specifically and only to this entity. +Mapping from namespace to ID, as a websocket has a different ID +for each namespace its in. */ + socketIds?: String__; constructor(data?: ILightsControllerResponse) { if (data) { @@ -5835,7 +5903,7 @@ Required to send events specifically and only to this entity */ this.createdAt = _data["createdAt"] ? new Date(_data["createdAt"].toString()) : undefined; this.updatedAt = _data["updatedAt"] ? new Date(_data["updatedAt"].toString()) : undefined; this.name = _data["name"]; - this.socketId = _data["socketId"]; + this.socketIds = _data["socketIds"] ? String__.fromJS(_data["socketIds"]) : undefined; } } @@ -5852,7 +5920,7 @@ Required to send events specifically and only to this entity */ data["createdAt"] = this.createdAt ? this.createdAt.toISOString() : undefined; data["updatedAt"] = this.updatedAt ? this.updatedAt.toISOString() : undefined; data["name"] = this.name; - data["socketId"] = this.socketId; + data["socketIds"] = this.socketIds ? this.socketIds.toJSON() : undefined; return data; } } @@ -5863,8 +5931,10 @@ export interface ILightsControllerResponse { updatedAt: Date; name: string; /** ID of the socket connection if present. -Required to send events specifically and only to this entity */ - socketId?: string; +Required to send events specifically and only to this entity. +Mapping from namespace to ID, as a websocket has a different ID +for each namespace its in. */ + socketIds?: String__; } export class ParResponse implements IParResponse { @@ -6278,8 +6348,10 @@ export class ScreenResponse implements IScreenResponse { updatedAt!: Date; name!: string; /** ID of the socket connection if present. -Required to send events specifically and only to this entity */ - socketId?: string; +Required to send events specifically and only to this entity. +Mapping from namespace to ID, as a websocket has a different ID +for each namespace its in. */ + socketIds?: String__; constructor(data?: IScreenResponse) { if (data) { @@ -6296,7 +6368,7 @@ Required to send events specifically and only to this entity */ this.createdAt = _data["createdAt"] ? new Date(_data["createdAt"].toString()) : undefined; this.updatedAt = _data["updatedAt"] ? new Date(_data["updatedAt"].toString()) : undefined; this.name = _data["name"]; - this.socketId = _data["socketId"]; + this.socketIds = _data["socketIds"] ? String__.fromJS(_data["socketIds"]) : undefined; } } @@ -6313,7 +6385,7 @@ Required to send events specifically and only to this entity */ data["createdAt"] = this.createdAt ? this.createdAt.toISOString() : undefined; data["updatedAt"] = this.updatedAt ? this.updatedAt.toISOString() : undefined; data["name"] = this.name; - data["socketId"] = this.socketId; + data["socketIds"] = this.socketIds ? this.socketIds.toJSON() : undefined; return data; } } @@ -6324,8 +6396,10 @@ export interface IScreenResponse { updatedAt: Date; name: string; /** ID of the socket connection if present. -Required to send events specifically and only to this entity */ - socketId?: string; +Required to send events specifically and only to this entity. +Mapping from namespace to ID, as a websocket has a different ID +for each namespace its in. */ + socketIds?: String__; } export class HandlerResponse_ScreenResponse_ implements IHandlerResponse_ScreenResponse_ { diff --git a/src/components/home/LightsControllerItemComponent.vue b/src/components/home/LightsControllerItemComponent.vue index b933e7b9..2ac0864e 100644 --- a/src/components/home/LightsControllerItemComponent.vue +++ b/src/components/home/LightsControllerItemComponent.vue @@ -1,7 +1,7 @@