aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar vnugent <public@vaughnnugent.com>2023-12-13 17:58:51 -0500
committerLibravatar vnugent <public@vaughnnugent.com>2023-12-13 17:58:51 -0500
commit4b8ae76132d2342f40cec703b3d5145ea075c451 (patch)
tree62b942b6181261566cd3245ee35cd15a138aabf2
parentb564708f29cf8a709c3e3d981477b2ec8440673e (diff)
log time coming ui and lib updates
-rw-r--r--.gitignore1
-rw-r--r--front-end/.env6
-rw-r--r--front-end/package-lock.json2080
-rw-r--r--front-end/package.json8
-rw-r--r--front-end/src/App.vue23
-rw-r--r--front-end/src/bootstrap/Environment.vue44
-rw-r--r--front-end/src/bootstrap/components/ConfirmPrompt.vue6
-rw-r--r--front-end/src/bootstrap/components/Footer.vue2
-rw-r--r--front-end/src/bootstrap/components/Header.vue26
-rw-r--r--front-end/src/bootstrap/index.ts71
-rw-r--r--front-end/src/bootstrap/style/modals.scss4
-rw-r--r--front-end/src/main.ts83
-rw-r--r--front-end/src/router/index.ts7
-rw-r--r--front-end/src/store/globalState.ts30
-rw-r--r--front-end/src/store/index.ts49
-rw-r--r--front-end/src/store/mfaSettingsPlugin.ts62
-rw-r--r--front-end/src/store/pageProtectionPlugin.ts79
-rw-r--r--front-end/src/store/socialMfaPlugin.ts42
-rw-r--r--front-end/src/store/userProfile.ts82
-rw-r--r--front-end/src/views/Account/[comp].vue30
-rw-r--r--front-end/src/views/Account/components/profile/Profile.vue55
-rw-r--r--front-end/src/views/Account/components/settings/Fido.vue4
-rw-r--r--front-end/src/views/Account/components/settings/PasswordReset.vue16
-rw-r--r--front-end/src/views/Account/components/settings/Pki.vue46
-rw-r--r--front-end/src/views/Account/components/settings/Security.vue31
-rw-r--r--front-end/src/views/Account/components/settings/Settings.vue2
-rw-r--r--front-end/src/views/Account/components/settings/TotpSettings.vue40
-rw-r--r--front-end/src/views/Blog/components/Content/ContentEditor.vue48
-rw-r--r--front-end/src/views/Blog/index.vue7
-rw-r--r--front-end/src/views/Login/components/Social.vue55
-rw-r--r--front-end/src/views/Login/components/Totp.vue29
-rw-r--r--front-end/src/views/Login/components/UserPass.vue98
-rw-r--r--front-end/src/views/Login/index.vue120
-rw-r--r--front-end/src/views/Login/pki/index.vue13
-rw-r--r--front-end/src/views/Login/social/[type].vue90
-rw-r--r--front-end/src/views/[...all].vue5
-rw-r--r--front-end/src/views/index.vue6
-rw-r--r--front-end/vite.config.ts15
-rw-r--r--lib/admin/package-lock.json366
-rw-r--r--lib/admin/package.json2
-rw-r--r--lib/client/package-lock.json164
41 files changed, 2175 insertions, 1772 deletions
diff --git a/.gitignore b/.gitignore
index 71da0fe..2032197 100644
--- a/.gitignore
+++ b/.gitignore
@@ -388,3 +388,4 @@ dist-ssr
*.sw?
/back-end/*/CMNext.json
+front-end/typed-router.d.ts
diff --git a/front-end/.env b/front-end/.env
index 3dfde77..710aaa0 100644
--- a/front-end/.env
+++ b/front-end/.env
@@ -6,11 +6,7 @@ VITE_CORS_ENABLED=false
VITE_WEB_TOKEN_HEADER="X-Web-Token"
VITE_LOGIN_COOKIE_ID="li"
-#The path to the accounts plugin api
-VITE_ACCOUNTS_BASE_PATH="/account"
-
-#If true enables the PKI login method
-VITE_PKI_ENDPOINT="/account/pki"
+VITE_PKI_ENABLED=true
#The path to the blog admin api
VITE_BLOG_ADMIN_URL="/blog" \ No newline at end of file
diff --git a/front-end/package-lock.json b/front-end/package-lock.json
index 30fd317..f468576 100644
--- a/front-end/package-lock.json
+++ b/front-end/package-lock.json
@@ -18,7 +18,7 @@
"@headlessui/vue": "^1.7.12",
"@kyvg/vue3-notification": "^3.0.x",
"@vnuge/cmnext-admin": "../lib/admin",
- "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz",
+ "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/0b1acb55ae395723772251318254ba131e987107/@vnuge-vnlib.browser/release.tgz",
"@vuelidate/core": "^2.0.2",
"@vuelidate/validators": "^2.0.2",
"@vueuse/core": "^10.3.x",
@@ -29,6 +29,7 @@
"json-editor-vue": "^0.11.0",
"lodash-es": "^4.17.21",
"otpauth": "^9.1.2",
+ "pinia": "^2.1.7",
"showdown": "^2.1.0",
"universal-cookie": "^6.1.x",
"vue": "^3.2.47",
@@ -47,8 +48,8 @@
"sass": "^1.62.1",
"tailwindcss": "^3.3.2",
"typescript": "^5.0.2",
- "vite": "^4.3.5",
- "vite-plugin-pages": "^0.31.0",
+ "unplugin-vue-router": "^0.7.0",
+ "vite": "^5.0.x",
"vue-eslint-parser": "^9.3.0",
"vue-router": "^4.2.0",
"vue-tsc": "^1.4.2"
@@ -64,7 +65,7 @@
"@typescript-eslint/eslint-plugin": "^6.4.x"
},
"peerDependencies": {
- "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz",
+ "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/0b1acb55ae395723772251318254ba131e987107/@vnuge-vnlib.browser/release.tgz",
"@vueuse/core": "^10.x",
"@vueuse/router": "^10.x",
"axios": "^1.x",
@@ -107,12 +108,12 @@
}
},
"node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
+ "version": "7.23.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
+ "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
"dev": true,
"dependencies": {
- "@babel/highlight": "^7.22.13",
+ "@babel/highlight": "^7.23.4",
"chalk": "^2.4.2"
},
"engines": {
@@ -190,6 +191,15 @@
"node": ">=4"
}
},
+ "node_modules/@babel/helper-string-parser": {
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@babel/helper-validator-identifier": {
"version": "7.22.20",
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
@@ -200,9 +210,9 @@
}
},
"node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz",
+ "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==",
"dev": true,
"dependencies": {
"@babel/helper-validator-identifier": "^7.22.20",
@@ -285,9 +295,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"bin": {
"parser": "bin/babel-parser.js"
},
@@ -295,6 +305,20 @@
"node": ">=6.0.0"
}
},
+ "node_modules/@babel/types": {
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "to-fast-properties": "^2.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
"node_modules/@chenfengyuan/vue-qrcode": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/@chenfengyuan/vue-qrcode/-/vue-qrcode-2.0.0.tgz",
@@ -305,34 +329,34 @@
}
},
"node_modules/@ckeditor/ckeditor5-core": {
- "version": "40.0.0",
- "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-40.0.0.tgz",
- "integrity": "sha512-8xoSDOc9/35jEikKtYbdYmBxPop7i/JYSkkZmJYbZ8XxkjQiIMAUYOJVdNntfuLGazU+THmutieEA/x3ISme4g==",
+ "version": "40.2.0",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-40.2.0.tgz",
+ "integrity": "sha512-0fqIaN+ZhkXXA3mpBN+alycBzPMc8ruO8VrP0OnvCjowqZVS2HXC2AaXNBdxc75xGI3ScXIor7FsgFHxVJIYYQ==",
"dev": true,
"dependencies": {
- "@ckeditor/ckeditor5-engine": "40.0.0",
- "@ckeditor/ckeditor5-utils": "40.0.0",
+ "@ckeditor/ckeditor5-engine": "40.2.0",
+ "@ckeditor/ckeditor5-utils": "40.2.0",
"lodash-es": "4.17.21"
}
},
"node_modules/@ckeditor/ckeditor5-engine": {
- "version": "40.0.0",
- "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-40.0.0.tgz",
- "integrity": "sha512-zauOXFudE1B94RSziWWojdpqGprSo4rKwW3KLU6nfaz9Kq9RZkcP/TW5ADE0DxC2jWUMeItVE/3U8ES5fZ0hqQ==",
+ "version": "40.2.0",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-40.2.0.tgz",
+ "integrity": "sha512-sgboUX8Ps+LcEgywyT3BeK1nzLHjNVIiZU1qvRxR3ixzIw4w2xRNXCGfESWLW5Y5rv9+ypUCrX61oLnZU64PQQ==",
"dev": true,
"dependencies": {
- "@ckeditor/ckeditor5-utils": "40.0.0",
+ "@ckeditor/ckeditor5-utils": "40.2.0",
"lodash-es": "4.17.21"
}
},
"node_modules/@ckeditor/ckeditor5-ui": {
- "version": "40.0.0",
- "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-40.0.0.tgz",
- "integrity": "sha512-wnfC7eSqdN6i+nHTN83+PCByWeCPDgdQAXvf3HHBNdsJna6khKC8Oy/1eU8F+vR84unJMrPoaCMIx0qRvK3hCA==",
+ "version": "40.2.0",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-40.2.0.tgz",
+ "integrity": "sha512-K8oC9zrJokZD5Nl4uQjJMo8Couds0eHmfNI/go6iU4A4OAdDzph+W50QnyMed4etKnMdhvUSbnuZnPtQjnsvFA==",
"dev": true,
"dependencies": {
- "@ckeditor/ckeditor5-core": "40.0.0",
- "@ckeditor/ckeditor5-utils": "40.0.0",
+ "@ckeditor/ckeditor5-core": "40.2.0",
+ "@ckeditor/ckeditor5-utils": "40.2.0",
"color-convert": "2.0.1",
"color-parse": "1.4.2",
"lodash-es": "4.17.21",
@@ -340,29 +364,114 @@
}
},
"node_modules/@ckeditor/ckeditor5-upload": {
- "version": "40.0.0",
- "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-40.0.0.tgz",
- "integrity": "sha512-LutDg8zjhJu1UKInAyvVHIk8HyroETi61KS2PQTyiTQv/DmRvjSK32Xl83KprTxAvqZsiDdXe+Nl1kdAO8S2ag==",
+ "version": "40.2.0",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-40.2.0.tgz",
+ "integrity": "sha512-AdJSKvWEQbSSyA/DfxbCHRhFN6S4ew4kuYETO57e6AS3aOuYGLBRdu9Mub7IAQcOyy1LL6ktr9u5WEOoWS2h0w==",
"dev": true,
"dependencies": {
- "@ckeditor/ckeditor5-core": "40.0.0",
- "@ckeditor/ckeditor5-ui": "40.0.0",
- "@ckeditor/ckeditor5-utils": "40.0.0"
+ "@ckeditor/ckeditor5-core": "40.2.0",
+ "@ckeditor/ckeditor5-ui": "40.2.0",
+ "@ckeditor/ckeditor5-utils": "40.2.0"
}
},
"node_modules/@ckeditor/ckeditor5-utils": {
- "version": "40.0.0",
- "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-40.0.0.tgz",
- "integrity": "sha512-52UwkeGxrZWhbwWWfixKceWhF1kuDeJNAM57wqfB7GS8CzElOpJ3AELeD/L/ZkUEBGL9asqribEH3CzgTjWKPA==",
+ "version": "40.2.0",
+ "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-40.2.0.tgz",
+ "integrity": "sha512-f+kTJBwwk7Y/LXm8pEPxBTXVlJwQrH7Levzye9zxEDB0Jtj7+brGr87o666fPmL/ATQc5M+VPhbvnk2sOv7WKg==",
"dev": true,
"dependencies": {
"lodash-es": "4.17.21"
}
},
+ "node_modules/@codemirror/autocomplete": {
+ "version": "6.11.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.11.1.tgz",
+ "integrity": "sha512-L5UInv8Ffd6BPw0P3EF7JLYAMeEbclY7+6Q11REt8vhih8RuLreKtPy/xk8wPxs4EQgYqzI7cdgpiYwWlbS/ow==",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.17.0",
+ "@lezer/common": "^1.0.0"
+ },
+ "peerDependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/commands": {
+ "version": "6.3.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.3.2.tgz",
+ "integrity": "sha512-tjoi4MCWDNxgIpoLZ7+tezdS9OEB6pkiDKhfKx9ReJ/XBcs2G2RXIu+/FxXBlWsPTsz6C9q/r4gjzrsxpcnqCQ==",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.2.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.1.0"
+ }
+ },
+ "node_modules/@codemirror/lang-json": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.1.tgz",
+ "integrity": "sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==",
+ "dependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@lezer/json": "^1.0.0"
+ }
+ },
+ "node_modules/@codemirror/language": {
+ "version": "6.9.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.9.3.tgz",
+ "integrity": "sha512-qq48pYzoi6ldYWV/52+Z9Ou6QouVI+8YwvxFbUypI33NbjG2UeRHKENRyhwljTTiOqjQ33FjyZj6EREQ9apAOQ==",
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "@lezer/common": "^1.1.0",
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0",
+ "style-mod": "^4.0.0"
+ }
+ },
+ "node_modules/@codemirror/lint": {
+ "version": "6.4.2",
+ "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.2.tgz",
+ "integrity": "sha512-wzRkluWb1ptPKdzlsrbwwjYCPLgzU6N88YBAmlZi8WFyuiEduSd05MnJYNogzyc8rPK7pj6m95ptUApc8sHKVA==",
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "crelt": "^1.0.5"
+ }
+ },
+ "node_modules/@codemirror/search": {
+ "version": "6.5.5",
+ "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.5.tgz",
+ "integrity": "sha512-PIEN3Ke1buPod2EHbJsoQwlbpkz30qGZKcnmH1eihq9+bPQx8gelauUwLYaY4vBOuBAuEhmpDLii4rj/uO0yMA==",
+ "dependencies": {
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0",
+ "crelt": "^1.0.5"
+ }
+ },
+ "node_modules/@codemirror/state": {
+ "version": "6.3.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.3.3.tgz",
+ "integrity": "sha512-0wufKcTw2dEwEaADajjHf6hBy1sh3M6V0e+q4JKIhLuiMSe5td5HOWpUdvKth1fT1M9VYOboajoBHpkCd7PG7A=="
+ },
+ "node_modules/@codemirror/view": {
+ "version": "6.22.3",
+ "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.22.3.tgz",
+ "integrity": "sha512-rqnq+Zospwoi3x1vZ8BGV1MlRsaGljX+6qiGYmIpJ++M+LCC+wjfDaPklhwpWSgv7pr/qx29KiAKQBH5+DOn4w==",
+ "dependencies": {
+ "@codemirror/state": "^6.1.4",
+ "style-mod": "^4.1.0",
+ "w3c-keyname": "^2.2.4"
+ }
+ },
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz",
+ "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==",
"cpu": [
"arm"
],
@@ -376,9 +485,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz",
+ "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==",
"cpu": [
"arm64"
],
@@ -392,9 +501,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz",
+ "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==",
"cpu": [
"x64"
],
@@ -408,9 +517,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz",
+ "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==",
"cpu": [
"arm64"
],
@@ -424,9 +533,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz",
+ "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==",
"cpu": [
"x64"
],
@@ -440,9 +549,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz",
+ "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==",
"cpu": [
"arm64"
],
@@ -456,9 +565,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz",
+ "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==",
"cpu": [
"x64"
],
@@ -472,9 +581,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz",
+ "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==",
"cpu": [
"arm"
],
@@ -488,9 +597,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz",
+ "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==",
"cpu": [
"arm64"
],
@@ -504,9 +613,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz",
+ "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==",
"cpu": [
"ia32"
],
@@ -520,9 +629,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz",
+ "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==",
"cpu": [
"loong64"
],
@@ -536,9 +645,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz",
+ "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==",
"cpu": [
"mips64el"
],
@@ -552,9 +661,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz",
+ "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==",
"cpu": [
"ppc64"
],
@@ -568,9 +677,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz",
+ "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==",
"cpu": [
"riscv64"
],
@@ -584,9 +693,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz",
+ "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==",
"cpu": [
"s390x"
],
@@ -600,9 +709,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz",
+ "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==",
"cpu": [
"x64"
],
@@ -616,9 +725,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz",
+ "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==",
"cpu": [
"x64"
],
@@ -632,9 +741,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz",
+ "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==",
"cpu": [
"x64"
],
@@ -648,9 +757,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz",
+ "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==",
"cpu": [
"x64"
],
@@ -664,9 +773,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz",
+ "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==",
"cpu": [
"arm64"
],
@@ -680,9 +789,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz",
+ "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==",
"cpu": [
"ia32"
],
@@ -696,9 +805,9 @@
}
},
"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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz",
+ "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==",
"cpu": [
"x64"
],
@@ -734,9 +843,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dependencies": {
"ajv": "^6.12.4",
"debug": "^4.3.2",
@@ -756,9 +865,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
+ "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
@@ -769,45 +878,57 @@
"integrity": "sha512-5U2UvIYRkCMozZ388gCE73PEpa2MFgN/0t9O4a1FF7bGT/MIneQWSL1XpWZ8iMVYdh6ntxRf3iFA6slCIuFgkg=="
},
"node_modules/@fortawesome/fontawesome-common-types": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.4.2.tgz",
- "integrity": "sha512-1DgP7f+XQIJbLFCTX1V2QnxVmpLdKdzzo2k8EmvDOePfchaIGQ9eCHj2up3/jNEbZuBqel5OxiaOJf37TWauRA==",
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-6.5.1.tgz",
+ "integrity": "sha512-GkWzv+L6d2bI5f/Vk6ikJ9xtl7dfXtoRu3YGE6nq0p/FFqA1ebMOAWg3XgRyb0I6LYyYkiAo+3/KrwuBp8xG7A==",
"hasInstallScript": true,
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/fontawesome-svg-core": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.4.2.tgz",
- "integrity": "sha512-gjYDSKv3TrM2sLTOKBc5rH9ckje8Wrwgx1CxAPbN5N3Fm4prfi7NsJVWd1jklp7i5uSCVwhZS5qlhMXqLrpAIg==",
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-6.5.1.tgz",
+ "integrity": "sha512-MfRCYlQPXoLlpem+egxjfkEuP9UQswTrlCOsknus/NcMoblTH2g0jPrapbcIb04KGA7E2GZxbAccGZfWoYgsrQ==",
"hasInstallScript": true,
"dependencies": {
- "@fortawesome/fontawesome-common-types": "6.4.2"
+ "@fortawesome/fontawesome-common-types": "6.5.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-brands-svg-icons": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.4.2.tgz",
- "integrity": "sha512-LKOwJX0I7+mR/cvvf6qIiqcERbdnY+24zgpUSouySml+5w8B4BJOx8EhDR/FTKAu06W12fmUIcv6lzPSwYKGGg==",
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-6.5.1.tgz",
+ "integrity": "sha512-093l7DAkx0aEtBq66Sf19MgoZewv1zeY9/4C7vSKPO4qMwEsW/2VYTUTpBtLwfb9T2R73tXaRDPmE4UqLCYHfg==",
+ "hasInstallScript": true,
+ "dependencies": {
+ "@fortawesome/fontawesome-common-types": "6.5.1"
+ },
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/@fortawesome/free-regular-svg-icons": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-6.5.1.tgz",
+ "integrity": "sha512-m6ShXn+wvqEU69wSP84coxLbNl7sGVZb+Ca+XZq6k30SzuP3X4TfPqtycgUh9ASwlNh5OfQCd8pDIWxl+O+LlQ==",
"hasInstallScript": true,
"dependencies": {
- "@fortawesome/fontawesome-common-types": "6.4.2"
+ "@fortawesome/fontawesome-common-types": "6.5.1"
},
"engines": {
"node": ">=6"
}
},
"node_modules/@fortawesome/free-solid-svg-icons": {
- "version": "6.4.2",
- "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.4.2.tgz",
- "integrity": "sha512-sYwXurXUEQS32fZz9hVCUUv/xu49PEJEyUOsA51l6PU/qVgfbTb2glsTEaJngVVT8VqBATRIdh7XVgV1JF1LkA==",
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-6.5.1.tgz",
+ "integrity": "sha512-S1PPfU3mIJa59biTtXJz1oI0+KAXW6bkAb31XKhxdxtuXDiUIFsih4JR1v5BbxY7hVHsD1RKq+jRkVRaf773NQ==",
"hasInstallScript": true,
"dependencies": {
- "@fortawesome/fontawesome-common-types": "6.4.2"
+ "@fortawesome/fontawesome-common-types": "6.5.1"
},
"engines": {
"node": ">=6"
@@ -907,13 +1028,43 @@
}
},
"node_modules/@kyvg/vue3-notification": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@kyvg/vue3-notification/-/vue3-notification-3.0.2.tgz",
- "integrity": "sha512-t6PWPWggVqehX0BJZbqOttfKe3oUOrkgYoNQWSx8gwz8+pIRygQNT5MrewaIATdiU3bf//Yyto/wEm7vYl17Uw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@kyvg/vue3-notification/-/vue3-notification-3.1.0.tgz",
+ "integrity": "sha512-F+cewFdwhB+I7GB79UvHr/5/1DA2OXnCdJgoLGXTzN6Fh64MwlW+8ZQkMJLPsd6kBK8ju5sktwrghyG6AWpVNQ==",
"peerDependencies": {
"vue": "^3.0.0"
}
},
+ "node_modules/@lezer/common": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.1.2.tgz",
+ "integrity": "sha512-V+GqBsga5+cQJMfM0GdnHmg4DgWvLzgMWjbldBg0+jC3k9Gu6nJNZDLJxXEBT1Xj8KhRN4jmbC5CY7SIL++sVw=="
+ },
+ "node_modules/@lezer/highlight": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.0.tgz",
+ "integrity": "sha512-WrS5Mw51sGrpqjlh3d4/fOwpEV2Hd3YOkp9DBt4k8XZQcoTHZFB7sx030A6OcahF4J1nDQAa3jXlTVVYH50IFA==",
+ "dependencies": {
+ "@lezer/common": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/json": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.1.tgz",
+ "integrity": "sha512-nkVC27qiEZEjySbi6gQRuMwa2sDu2PtfjSgz0A4QF81QyRGm3kb2YRzLcOPcTEtmcwvrX/cej7mlhbwViA4WJw==",
+ "dependencies": {
+ "@lezer/highlight": "^1.0.0",
+ "@lezer/lr": "^1.0.0"
+ }
+ },
+ "node_modules/@lezer/lr": {
+ "version": "1.3.14",
+ "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.14.tgz",
+ "integrity": "sha512-z5mY4LStlA3yL7aHT/rqgG614cfcvklS+8oFRFBYrs4YaWLJyKKM4+nN6KopToX0o9Hj6zmH6M5kinOYuy06ug==",
+ "dependencies": {
+ "@lezer/common": "^1.0.0"
+ }
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -946,56 +1097,247 @@
"node": ">= 8"
}
},
- "node_modules/@types/cookie": {
- "version": "0.5.4",
- "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz",
- "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA=="
+ "node_modules/@replit/codemirror-indentation-markers": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.0.tgz",
+ "integrity": "sha512-5RgeuQ6erfROi1EVI2X7G4UR+KByjb07jhYMynvpvlrV22JlnARifmKMGEUKy0pKcxBNfwbFqoUlTYHPgyZNlg==",
+ "peerDependencies": {
+ "@codemirror/language": "^6.0.0",
+ "@codemirror/state": "^6.0.0",
+ "@codemirror/view": "^6.0.0"
+ }
},
- "node_modules/@types/debug": {
- "version": "4.1.11",
- "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.11.tgz",
- "integrity": "sha512-R2qflTjHDs4CL6D/6TkqBeIHr54WzZfIxN729xvCNlYIVp2LknlnCro5Yo3frNaX2E5gO9pZ3/QAPVdGmu+q9w==",
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz",
+ "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==",
"dev": true,
"dependencies": {
- "@types/ms": "*"
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
}
},
+ "node_modules/@rollup/rollup-android-arm-eabi": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz",
+ "integrity": "sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-android-arm64": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz",
+ "integrity": "sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-arm64": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz",
+ "integrity": "sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-darwin-x64": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz",
+ "integrity": "sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz",
+ "integrity": "sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-gnu": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz",
+ "integrity": "sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-arm64-musl": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz",
+ "integrity": "sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-riscv64-gnu": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz",
+ "integrity": "sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-gnu": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz",
+ "integrity": "sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-linux-x64-musl": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz",
+ "integrity": "sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-arm64-msvc": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz",
+ "integrity": "sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-ia32-msvc": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz",
+ "integrity": "sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@rollup/rollup-win32-x64-msvc": {
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz",
+ "integrity": "sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ]
+ },
+ "node_modules/@sphinxxxx/color-conversion": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/@sphinxxxx/color-conversion/-/color-conversion-2.2.2.tgz",
+ "integrity": "sha512-XExJS3cLqgrmNBIP3bBw6+1oQ1ksGjFh0+oClDKFYpCCqx/hlqwWO5KO/S63fzUo67SxI9dMrF0y5T/Ey7h8Zw=="
+ },
+ "node_modules/@types/cookie": {
+ "version": "0.5.4",
+ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.5.4.tgz",
+ "integrity": "sha512-7z/eR6O859gyWIAjuvBWFzNURmf2oPBmJlfVWkwehU5nzIyjwBsTh7WMmEEV4JFnHuQ3ex4oyTvfKzcyJVDBNA=="
+ },
"node_modules/@types/estree": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
"integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw=="
},
"node_modules/@types/lodash": {
- "version": "4.14.201",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz",
- "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==",
+ "version": "4.14.202",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
+ "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
"dev": true
},
"node_modules/@types/lodash-es": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.11.tgz",
- "integrity": "sha512-eCw8FYAWHt2DDl77s+AMLLzPn310LKohruumpucZI4oOFJkIgnlaJcy23OKMJxx4r9PeTF13Gv6w+jqjWQaYUg==",
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"dev": true,
"dependencies": {
"@types/lodash": "*"
}
},
- "node_modules/@types/ms": {
- "version": "0.7.34",
- "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz",
- "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==",
- "dev": true
- },
"node_modules/@types/showdown": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.4.tgz",
- "integrity": "sha512-cSXSKOpTSr2HTdlGq8WskyZwNyxKhM7M/zJeLVdWjlUQmQ4d8TdtPrwz4JejglZdzIzSgU5loi5QUaEJF9JD8w==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/@types/showdown/-/showdown-2.0.6.tgz",
+ "integrity": "sha512-pTvD/0CIeqe4x23+YJWlX2gArHa8G0J0Oh6GKaVXV7TAeickpkkZiNOgFcFcmLQ5lB/K0qBJL1FtRYltBfbGCQ==",
"dev": true
},
"node_modules/@types/web-bluetooth": {
- "version": "0.0.18",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz",
- "integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw=="
+ "version": "0.0.20",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
+ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow=="
},
"node_modules/@ungap/structured-clone": {
"version": "1.2.0",
@@ -1003,15 +1345,15 @@
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ=="
},
"node_modules/@vitejs/plugin-vue": {
- "version": "4.4.1",
- "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.4.1.tgz",
- "integrity": "sha512-HCQG8VDFDM7YDAdcj5QI5DvUi+r6xvo9LgvYdk7LSkUNwdpempdB5horkMSZsbdey9Ywsf5aaU8kEPw9M5kREA==",
+ "version": "4.5.2",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.2.tgz",
+ "integrity": "sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==",
"dev": true,
"engines": {
"node": "^14.18.0 || >=16.0.0"
},
"peerDependencies": {
- "vite": "^4.0.0",
+ "vite": "^4.0.0 || ^5.0.0",
"vue": "^3.2.25"
}
},
@@ -1020,9 +1362,9 @@
"link": true
},
"node_modules/@vnuge/vnlib.browser": {
- "version": "0.1.12",
- "resolved": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz",
- "integrity": "sha512-GsHtxMErx8IRBtYSvhO0LBdpmqo8barDwXJFeOEDZNnwnmZ4XGUa+Ab+w92JhOwnZDpBG1mW5k6l2NEmxkVuXw==",
+ "version": "0.1.13",
+ "resolved": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/0b1acb55ae395723772251318254ba131e987107/@vnuge-vnlib.browser/release.tgz",
+ "integrity": "sha512-q0FuQtm/BrqnoKBv5YJ3GAOT6QRBOAK3/yZSuvXFY2QyJc/kMY/bs6nEVVFdjvbYNzroxswYzGvCxx5TyIyPOg==",
"license": "MIT",
"peerDependencies": {
"@vueuse/core": "^10.x",
@@ -1055,30 +1397,30 @@
}
},
"node_modules/@volar/language-core": {
- "version": "1.10.10",
- "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.10.10.tgz",
- "integrity": "sha512-nsV1o3AZ5n5jaEAObrS3MWLBWaGwUj/vAsc15FVNIv+DbpizQRISg9wzygsHBr56ELRH8r4K75vkYNMtsSNNWw==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.11.1.tgz",
+ "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==",
"dev": true,
"dependencies": {
- "@volar/source-map": "1.10.10"
+ "@volar/source-map": "1.11.1"
}
},
"node_modules/@volar/source-map": {
- "version": "1.10.10",
- "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.10.10.tgz",
- "integrity": "sha512-GVKjLnifV4voJ9F0vhP56p4+F3WGf+gXlRtjFZsv6v3WxBTWU3ZVeaRaEHJmWrcv5LXmoYYpk/SC25BKemPRkg==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.11.1.tgz",
+ "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==",
"dev": true,
"dependencies": {
"muggle-string": "^0.3.1"
}
},
"node_modules/@volar/typescript": {
- "version": "1.10.10",
- "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.10.10.tgz",
- "integrity": "sha512-4a2r5bdUub2m+mYVnLu2wt59fuoYWe7nf0uXtGHU8QQ5LDNfzAR0wK7NgDiQ9rcl2WT3fxT2AA9AylAwFtj50A==",
+ "version": "1.11.1",
+ "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.11.1.tgz",
+ "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==",
"dev": true,
"dependencies": {
- "@volar/language-core": "1.10.10",
+ "@volar/language-core": "1.11.1",
"path-browserify": "^1.0.1"
}
},
@@ -1088,60 +1430,91 @@
"integrity": "sha512-JT5CvrIYYCrmB+dCana8sUqJEcGB1ZDXNLMQ2+42bW995WmNoenijWMUdZfwmuQUTQcEVVIa2OecZzTYWUW9Cg==",
"dev": true
},
+ "node_modules/@vue-macros/common": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/@vue-macros/common/-/common-1.10.0.tgz",
+ "integrity": "sha512-4DZsPeQA/nBQDw2RkYAmH7KrFjJVrMdAhJhO1JCl1bbbFXCGeoGjXfkg9wHPppj47s2HpAB3GrqNwqVGbi12NQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.23.5",
+ "@rollup/pluginutils": "^5.1.0",
+ "@vue/compiler-sfc": "^3.3.10",
+ "ast-kit": "^0.11.3",
+ "local-pkg": "^0.5.0",
+ "magic-string-ast": "^0.3.0"
+ },
+ "engines": {
+ "node": ">=16.14.0"
+ },
+ "peerDependencies": {
+ "vue": "^2.7.0 || ^3.2.25"
+ },
+ "peerDependenciesMeta": {
+ "vue": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vue-macros/common/node_modules/local-pkg": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
+ "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
+ "dev": true,
+ "dependencies": {
+ "mlly": "^1.4.2",
+ "pkg-types": "^1.0.3"
+ },
+ "engines": {
+ "node": ">=14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
"node_modules/@vue/compiler-core": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz",
- "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.11.tgz",
+ "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==",
"dependencies": {
- "@babel/parser": "^7.23.0",
- "@vue/shared": "3.3.8",
+ "@babel/parser": "^7.23.5",
+ "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
- "node_modules/@vue/compiler-core/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/@vue/compiler-dom": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz",
- "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz",
+ "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==",
"dependencies": {
- "@vue/compiler-core": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-core": "3.3.11",
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz",
- "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==",
- "dependencies": {
- "@babel/parser": "^7.23.0",
- "@vue/compiler-core": "3.3.8",
- "@vue/compiler-dom": "3.3.8",
- "@vue/compiler-ssr": "3.3.8",
- "@vue/reactivity-transform": "3.3.8",
- "@vue/shared": "3.3.8",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz",
+ "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==",
+ "dependencies": {
+ "@babel/parser": "^7.23.5",
+ "@vue/compiler-core": "3.3.11",
+ "@vue/compiler-dom": "3.3.11",
+ "@vue/compiler-ssr": "3.3.11",
+ "@vue/reactivity-transform": "3.3.11",
+ "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5",
- "postcss": "^8.4.31",
+ "postcss": "^8.4.32",
"source-map-js": "^1.0.2"
}
},
- "node_modules/@vue/compiler-sfc/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/@vue/compiler-ssr": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz",
- "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz",
+ "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==",
"dependencies": {
- "@vue/compiler-dom": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-dom": "3.3.11",
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/devtools-api": {
@@ -1150,18 +1523,19 @@
"integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA=="
},
"node_modules/@vue/language-core": {
- "version": "1.8.22",
- "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.22.tgz",
- "integrity": "sha512-bsMoJzCrXZqGsxawtUea1cLjUT9dZnDsy5TuZ+l1fxRMzUGQUG9+Ypq4w//CqpWmrx7nIAJpw2JVF/t258miRw==",
+ "version": "1.8.25",
+ "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.25.tgz",
+ "integrity": "sha512-NJk/5DnAZlpvXX8BdWmHI45bWGLViUaS3R/RMrmFSvFMSbJKuEODpM4kR0F0Ofv5SFzCWuNiMhxameWpVdQsnA==",
"dev": true,
"dependencies": {
- "@volar/language-core": "~1.10.5",
- "@volar/source-map": "~1.10.5",
+ "@volar/language-core": "~1.11.1",
+ "@volar/source-map": "~1.11.1",
"@vue/compiler-dom": "^3.3.0",
"@vue/shared": "^3.3.0",
"computeds": "^0.0.1",
"minimatch": "^9.0.3",
"muggle-string": "^0.3.1",
+ "path-browserify": "^1.0.1",
"vue-template-compiler": "^2.7.14"
},
"peerDependencies": {
@@ -1198,65 +1572,60 @@
}
},
"node_modules/@vue/reactivity": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz",
- "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.11.tgz",
+ "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==",
"dependencies": {
- "@vue/shared": "3.3.8"
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/reactivity-transform": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz",
- "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz",
+ "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==",
"dependencies": {
- "@babel/parser": "^7.23.0",
- "@vue/compiler-core": "3.3.8",
- "@vue/shared": "3.3.8",
+ "@babel/parser": "^7.23.5",
+ "@vue/compiler-core": "3.3.11",
+ "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5"
}
},
- "node_modules/@vue/reactivity-transform/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/@vue/runtime-core": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz",
- "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.11.tgz",
+ "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==",
"dependencies": {
- "@vue/reactivity": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/reactivity": "3.3.11",
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz",
- "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz",
+ "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==",
"dependencies": {
- "@vue/runtime-core": "3.3.8",
- "@vue/shared": "3.3.8",
+ "@vue/runtime-core": "3.3.11",
+ "@vue/shared": "3.3.11",
"csstype": "^3.1.2"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz",
- "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.11.tgz",
+ "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==",
"dependencies": {
- "@vue/compiler-ssr": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-ssr": "3.3.11",
+ "@vue/shared": "3.3.11"
},
"peerDependencies": {
- "vue": "3.3.8"
+ "vue": "3.3.11"
}
},
"node_modules/@vue/shared": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz",
- "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw=="
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.11.tgz",
+ "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw=="
},
"node_modules/@vuelidate/core": {
"version": "2.0.3",
@@ -1343,13 +1712,13 @@
}
},
"node_modules/@vueuse/core": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.5.0.tgz",
- "integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz",
+ "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==",
"dependencies": {
- "@types/web-bluetooth": "^0.0.18",
- "@vueuse/metadata": "10.5.0",
- "@vueuse/shared": "10.5.0",
+ "@types/web-bluetooth": "^0.0.20",
+ "@vueuse/metadata": "10.7.0",
+ "@vueuse/shared": "10.7.0",
"vue-demi": ">=0.14.6"
},
"funding": {
@@ -1382,19 +1751,19 @@
}
},
"node_modules/@vueuse/metadata": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.5.0.tgz",
- "integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz",
+ "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==",
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/router": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/router/-/router-10.5.0.tgz",
- "integrity": "sha512-KboRSnSTaRBvKiwhCJ9RJHidaUMy5+5RyAwq46IPovVtKm9nIUfV0/F8dPwYx36rxAWn9iNWZUbKfu4cGW3XuA==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/router/-/router-10.7.0.tgz",
+ "integrity": "sha512-8NQ12V3dtiIEKyd32RzzXLOqU+NC5/9cf7kv5cGOQzJB+Ne8j+1VmRz4ciOhOyHuiBJSfjwSqKDTzvsczZUBlQ==",
"dependencies": {
- "@vueuse/shared": "10.5.0",
+ "@vueuse/shared": "10.7.0",
"vue-demi": ">=0.14.6"
},
"funding": {
@@ -1430,9 +1799,9 @@
}
},
"node_modules/@vueuse/shared": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.5.0.tgz",
- "integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz",
+ "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==",
"dependencies": {
"vue-demi": ">=0.14.6"
},
@@ -1531,7 +1900,6 @@
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
"integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
"dependencies": {
"normalize-path": "^3.0.0",
"picomatch": "^2.0.4"
@@ -1559,17 +1927,45 @@
"dequal": "^2.0.3"
}
},
- "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==",
+ "node_modules/ast-kit": {
+ "version": "0.11.3",
+ "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.11.3.tgz",
+ "integrity": "sha512-qdwwKEhckRk0XE22/xDdmU3v/60E8Edu4qFhgTLIhGGDs/PAJwLw9pQn8Rj99PitlbBZbYpx0k/lbir4kg0SuA==",
"dev": true,
"dependencies": {
- "call-bind": "^1.0.2",
- "is-array-buffer": "^3.0.1"
+ "@babel/parser": "^7.23.5",
+ "@rollup/pluginutils": "^5.1.0",
+ "pathe": "^1.1.1"
},
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
+ "engines": {
+ "node": ">=16.14.0"
+ }
+ },
+ "node_modules/ast-walker-scope": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/ast-walker-scope/-/ast-walker-scope-0.5.0.tgz",
+ "integrity": "sha512-NsyHMxBh4dmdEHjBo1/TBZvCKxffmZxRYhmclfu0PP6Aftre47jOHYaYaNqJcV0bxihxFXhDkzLHUwHc0ocd0Q==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.22.7",
+ "ast-kit": "^0.9.4"
+ },
+ "engines": {
+ "node": ">=16.14.0"
+ }
+ },
+ "node_modules/ast-walker-scope/node_modules/ast-kit": {
+ "version": "0.9.5",
+ "resolved": "https://registry.npmjs.org/ast-kit/-/ast-kit-0.9.5.tgz",
+ "integrity": "sha512-kbL7ERlqjXubdDd+szuwdlQ1xUxEz9mCz1+m07ftNVStgwRb2RWw+U6oKo08PAvOishMxiqz1mlJyLl8yQx2Qg==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.22.7",
+ "@rollup/pluginutils": "^5.0.2",
+ "pathe": "^1.1.1"
+ },
+ "engines": {
+ "node": ">=16.14.0"
}
},
"node_modules/asynckit": {
@@ -1614,22 +2010,10 @@
"postcss": "^8.1.0"
}
},
- "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.6.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
- "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
+ "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -1664,7 +2048,6 @@
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
"engines": {
"node": ">=8"
}
@@ -1688,7 +2071,6 @@
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
"dependencies": {
"fill-range": "^7.0.1"
},
@@ -1697,9 +2079,9 @@
}
},
"node_modules/browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
+ "version": "4.22.2",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz",
+ "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==",
"dev": true,
"funding": [
{
@@ -1716,9 +2098,9 @@
}
],
"dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
+ "caniuse-lite": "^1.0.30001565",
+ "electron-to-chromium": "^1.4.601",
+ "node-releases": "^2.0.14",
"update-browserslist-db": "^1.0.13"
},
"bin": {
@@ -1778,9 +2160,9 @@
}
},
"node_modules/caniuse-lite": {
- "version": "1.0.30001561",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001561.tgz",
- "integrity": "sha512-NTt0DNoKe958Q0BE0j0c1V9jbUzhBxHIEJy7asmGrpE0yG63KTV7PLHPnK2E1O9RsQrQ081I3NLuXGS6zht3cw==",
+ "version": "1.0.30001570",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz",
+ "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==",
"dev": true,
"funding": [
{
@@ -1825,7 +2207,6 @@
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
"funding": [
{
"type": "individual",
@@ -1852,7 +2233,6 @@
"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"
},
@@ -1883,6 +2263,24 @@
"periscopic": "^3.1.0"
}
},
+ "node_modules/code-red/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
+ "node_modules/codemirror-wrapped-line-indent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/codemirror-wrapped-line-indent/-/codemirror-wrapped-line-indent-1.0.0.tgz",
+ "integrity": "sha512-8ny0CSJ1T6mYQuBF7yGzgRRv+zOXUBaBscvJH3jczK7Isi19RA2Ans9ip0gZBkUWCOhFmmw1IC1a+uN4zj0GNg==",
+ "peerDependencies": {
+ "@codemirror/language": "^6.9.0",
+ "@codemirror/state": "^6.2.1",
+ "@codemirror/view": "^6.17.1"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -1946,6 +2344,11 @@
"node": ">= 0.6"
}
},
+ "node_modules/crelt": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz",
+ "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g=="
+ },
"node_modules/cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
@@ -1984,9 +2387,9 @@
}
},
"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=="
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
},
"node_modules/de-indent": {
"version": "1.0.2",
@@ -2019,35 +2422,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/deep-equal": {
- "version": "2.2.2",
- "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.2.tgz",
- "integrity": "sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==",
- "dev": true,
- "dependencies": {
- "array-buffer-byte-length": "^1.0.0",
- "call-bind": "^1.0.2",
- "es-get-iterator": "^1.1.3",
- "get-intrinsic": "^1.2.1",
- "is-arguments": "^1.1.1",
- "is-array-buffer": "^3.0.2",
- "is-date-object": "^1.0.5",
- "is-regex": "^1.1.4",
- "is-shared-array-buffer": "^1.0.2",
- "isarray": "^2.0.5",
- "object-is": "^1.1.5",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.4",
- "regexp.prototype.flags": "^1.5.0",
- "side-channel": "^1.0.4",
- "which-boxed-primitive": "^1.0.2",
- "which-collection": "^1.0.1",
- "which-typed-array": "^1.1.9"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/deep-is": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
@@ -2067,23 +2441,6 @@
"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",
@@ -2115,6 +2472,14 @@
"node": ">=0.3.1"
}
},
+ "node_modules/diff-sequences": {
+ "version": "29.6.3",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
+ "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
+ "engines": {
+ "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
+ }
+ },
"node_modules/dijkstrajs": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz",
@@ -2151,9 +2516,9 @@
}
},
"node_modules/electron-to-chromium": {
- "version": "1.4.578",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.578.tgz",
- "integrity": "sha512-V0ZhSu1BQZKfG0yNEL6Dadzik8E1vAzfpVOapdSiT9F6yapEJ3Bk+4tZ4SMPdWiUchCgnM/ByYtBzp5ntzDMIA==",
+ "version": "1.4.611",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.611.tgz",
+ "integrity": "sha512-ZtRpDxrjHapOwxtv+nuth5ByB8clyn8crVynmRNGO3wG3LOp8RTcyZDqwaI6Ng6y8FCK2hVZmJoqwCskKbNMaw==",
"dev": true
},
"node_modules/emoji-regex": {
@@ -2168,30 +2533,10 @@
"integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==",
"peer": true
},
- "node_modules/es-get-iterator": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz",
- "integrity": "sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.3",
- "has-symbols": "^1.0.3",
- "is-arguments": "^1.1.1",
- "is-map": "^2.0.2",
- "is-set": "^2.0.2",
- "is-string": "^1.0.7",
- "isarray": "^2.0.5",
- "stop-iteration-iterator": "^1.0.0"
- },
- "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==",
+ "version": "0.19.9",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz",
+ "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==",
"dev": true,
"hasInstallScript": true,
"bin": {
@@ -2201,28 +2546,28 @@
"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"
+ "@esbuild/android-arm": "0.19.9",
+ "@esbuild/android-arm64": "0.19.9",
+ "@esbuild/android-x64": "0.19.9",
+ "@esbuild/darwin-arm64": "0.19.9",
+ "@esbuild/darwin-x64": "0.19.9",
+ "@esbuild/freebsd-arm64": "0.19.9",
+ "@esbuild/freebsd-x64": "0.19.9",
+ "@esbuild/linux-arm": "0.19.9",
+ "@esbuild/linux-arm64": "0.19.9",
+ "@esbuild/linux-ia32": "0.19.9",
+ "@esbuild/linux-loong64": "0.19.9",
+ "@esbuild/linux-mips64el": "0.19.9",
+ "@esbuild/linux-ppc64": "0.19.9",
+ "@esbuild/linux-riscv64": "0.19.9",
+ "@esbuild/linux-s390x": "0.19.9",
+ "@esbuild/linux-x64": "0.19.9",
+ "@esbuild/netbsd-x64": "0.19.9",
+ "@esbuild/openbsd-x64": "0.19.9",
+ "@esbuild/sunos-x64": "0.19.9",
+ "@esbuild/win32-arm64": "0.19.9",
+ "@esbuild/win32-ia32": "0.19.9",
+ "@esbuild/win32-x64": "0.19.9"
}
},
"node_modules/escalade": {
@@ -2246,14 +2591,14 @@
}
},
"node_modules/eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
+ "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.55.0",
"@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
@@ -2300,9 +2645,9 @@
}
},
"node_modules/eslint-plugin-vue": {
- "version": "9.18.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.18.1.tgz",
- "integrity": "sha512-7hZFlrEgg9NIzuVik2I9xSnJA5RsmOfueYgsUGUokEDLJ1LHtxO0Pl4duje1BriZ/jDWb+44tcIlC3yi0tdlZg==",
+ "version": "9.19.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz",
+ "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
@@ -2375,18 +2720,6 @@
"node": ">=4"
}
},
- "node_modules/esprima-extract-comments": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/esprima-extract-comments/-/esprima-extract-comments-1.1.0.tgz",
- "integrity": "sha512-sBQUnvJwpeE9QnPrxh7dpI/dp67erYG4WXEAreAMoelPRpMR7NWb4YtwRPn9b+H1uLQKl/qS8WYmyaljTpjIsw==",
- "dev": true,
- "dependencies": {
- "esprima": "^4.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/esquery": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz",
@@ -2418,12 +2751,9 @@
}
},
"node_modules/estree-walker": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
- "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
- "dependencies": {
- "@types/estree": "^1.0.0"
- }
+ "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",
@@ -2433,19 +2763,6 @@
"node": ">=0.10.0"
}
},
- "node_modules/extract-comments": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/extract-comments/-/extract-comments-1.1.0.tgz",
- "integrity": "sha512-dzbZV2AdSSVW/4E7Ti5hZdHWbA+Z80RJsJhr5uiL10oyjl/gy7/o+HI1HwK4/WSZhlq4SNKU3oUzXlM13Qx02Q==",
- "dev": true,
- "dependencies": {
- "esprima-extract-comments": "^1.1.0",
- "parse-code-context": "^1.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/fast-deep-equal": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
@@ -2512,7 +2829,6 @@
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
},
@@ -2536,16 +2852,16 @@
}
},
"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==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.3",
"rimraf": "^3.0.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
@@ -2572,15 +2888,6 @@
}
}
},
- "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",
@@ -2616,7 +2923,6 @@
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
"integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
"hasInstallScript": true,
"optional": true,
"os": [
@@ -2635,15 +2941,6 @@
"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-caller-file": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
@@ -2699,9 +2996,9 @@
}
},
"node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dependencies": {
"type-fest": "^0.20.2"
},
@@ -2729,15 +3026,6 @@
"resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz",
"integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag=="
},
- "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",
@@ -2819,9 +3107,9 @@
}
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"engines": {
"node": ">= 4"
}
@@ -2829,8 +3117,7 @@
"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==",
- "dev": true
+ "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA=="
},
"node_modules/immutable-json-patch": {
"version": "5.1.3",
@@ -2874,67 +3161,10 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
- "node_modules/internal-slot": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz",
- "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==",
- "dev": true,
- "dependencies": {
- "get-intrinsic": "^1.2.2",
- "hasown": "^2.0.0",
- "side-channel": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/is-arguments": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz",
- "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==",
- "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-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-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==",
- "dev": true,
"dependencies": {
"binary-extensions": "^2.0.0"
},
@@ -2942,34 +3172,6 @@
"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.1",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz",
@@ -2982,21 +3184,6 @@
"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-expression": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/is-expression/-/is-expression-4.0.0.tgz",
@@ -3047,39 +3234,14 @@
"node": ">=0.10.0"
}
},
- "node_modules/is-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz",
- "integrity": "sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==",
- "dev": true,
- "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==",
- "dev": true,
"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",
@@ -3112,100 +3274,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/is-set": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz",
- "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==",
- "dev": true,
- "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-weakmap": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz",
- "integrity": "sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz",
- "integrity": "sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "get-intrinsic": "^1.1.1"
- },
- "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",
@@ -3220,10 +3288,18 @@
"jiti": "bin/jiti.js"
}
},
+ "node_modules/jmespath": {
+ "version": "0.16.0",
+ "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz",
+ "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==",
+ "engines": {
+ "node": ">= 0.6.0"
+ }
+ },
"node_modules/jose": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/jose/-/jose-5.1.0.tgz",
- "integrity": "sha512-H+RVqxA6apaJ0rcQYupKYhos7uosAiF42gUcWZiwhICWMphDULFj/CRr1R0tV/JCv9DEeJaSyYYpc9luHHNT4g==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-5.1.3.tgz",
+ "integrity": "sha512-GPExOkcMsCLBTi1YetY2LmkoY559fss0+0KVa6kOfb2YFe84nAM7Nm/XzuZozah4iHgmBGrCOHL5/cy670SBRw==",
"funding": {
"url": "https://github.com/sponsors/panva"
}
@@ -3251,12 +3327,12 @@
"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="
},
"node_modules/json-editor-vue": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/json-editor-vue/-/json-editor-vue-0.11.0.tgz",
- "integrity": "sha512-qqVXOenijghZwBkj3HG3LixSC8TdMQRuSJYexQbfez0xnPBXJ+pZ00O2uwD/TsXeYE+GwlZ6pwTux77wiEzV5A==",
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/json-editor-vue/-/json-editor-vue-0.11.2.tgz",
+ "integrity": "sha512-KH11D2U4SNJ0hOoIwHGFLwnY/Xfl4zTfyt4rMbJN5AJUDLwBOnGx5rL+2/Xb1cV9CX7R8ADm9ysN69AGGVRObQ==",
"hasInstallScript": true,
"dependencies": {
- "vanilla-jsoneditor": "^0.18.10",
+ "vanilla-jsoneditor": "^0.20.0",
"vue-demi": "^0.14.6"
},
"engines": {
@@ -3302,6 +3378,11 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
},
+ "node_modules/json-source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/json-source-map/-/json-source-map-0.6.1.tgz",
+ "integrity": "sha512-1QoztHPsMQqhDq0hlXY5ZqcEdUzxQEIxgFkKl4WUp2pgShObl+9ovi4kRh2TfvAfxAoHOJ9vIMEqk3k4iex7tg=="
+ },
"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",
@@ -3319,6 +3400,20 @@
"node": ">=6"
}
},
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+ "dev": true
+ },
+ "node_modules/jsonrepair": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/jsonrepair/-/jsonrepair-3.5.0.tgz",
+ "integrity": "sha512-SavvDsUP9Xnqo2MoC6Wl6zNyX3f+I5199hRbXBtAITyP2NTPyAgyx5xM0bgcIljRjzsIvOBANbgfWe8XXlyeLA==",
+ "bin": {
+ "jsonrepair": "bin/cli.js"
+ }
+ },
"node_modules/jssha": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/jssha/-/jssha-3.3.1.tgz",
@@ -3432,11 +3527,28 @@
"node": ">=12"
}
},
+ "node_modules/magic-string-ast": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/magic-string-ast/-/magic-string-ast-0.3.0.tgz",
+ "integrity": "sha512-0shqecEPgdFpnI3AP90epXyxZy9g6CRZ+SZ7BcqFwYmtFEnZ1jpevcV5HoyVnlDS9gCnc1UIg3Rsvp3Ci7r8OA==",
+ "dev": true,
+ "dependencies": {
+ "magic-string": "^0.30.2"
+ },
+ "engines": {
+ "node": ">=16.14.0"
+ }
+ },
"node_modules/mdn-data": {
"version": "2.0.30",
"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
"integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA=="
},
+ "node_modules/memoize-one": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-6.0.0.tgz",
+ "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw=="
+ },
"node_modules/merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
@@ -3510,6 +3622,18 @@
"mkdirp": "bin/cmd.js"
}
},
+ "node_modules/mlly": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz",
+ "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.10.0",
+ "pathe": "^1.1.1",
+ "pkg-types": "^1.0.3",
+ "ufo": "^1.3.0"
+ }
+ },
"node_modules/ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -3554,17 +3678,21 @@
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="
},
+ "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=="
+ },
"node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz",
+ "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==",
"dev": true
},
"node_modules/normalize-path": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -3608,58 +3736,6 @@
"node": ">= 6"
}
},
- "node_modules/object-inspect": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz",
- "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-is": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz",
- "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==",
- "dev": true,
- "dependencies": {
- "call-bind": "^1.0.2",
- "define-properties": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "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/once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
@@ -3685,9 +3761,9 @@
}
},
"node_modules/otpauth": {
- "version": "9.1.5",
- "resolved": "https://registry.npmjs.org/otpauth/-/otpauth-9.1.5.tgz",
- "integrity": "sha512-mnic91MZxvj04Ir7FN8Xi6wF3FU8D+s6M5p6FQaSS91/csKswoOI9Dk7kKSnGFAoBYgGTTO+OWScV0nJuzrbPg==",
+ "version": "9.2.1",
+ "resolved": "https://registry.npmjs.org/otpauth/-/otpauth-9.2.1.tgz",
+ "integrity": "sha512-/MRvcm63pzK20NCsIOe8Btun42/yWNylPbUo/h5dMpSRJpoAJstWodEUjm4zUDeT1+Vbqif2E8IcP4trl1U4gQ==",
"dependencies": {
"jssha": "~3.3.1"
},
@@ -3743,15 +3819,6 @@
"node": ">=6"
}
},
- "node_modules/parse-code-context": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-code-context/-/parse-code-context-1.0.0.tgz",
- "integrity": "sha512-OZQaqKaQnR21iqhlnPfVisFjBWjhnMl5J9MgbP8xC+EwoVqbXrq78lp+9Zb3ahmLzrIX5Us/qbvBnaS3hkH6OA==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
"node_modules/path-browserify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
@@ -3788,6 +3855,12 @@
"integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
"dev": true
},
+ "node_modules/pathe": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
+ "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==",
+ "dev": true
+ },
"node_modules/periscopic": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz",
@@ -3798,6 +3871,14 @@
"is-reference": "^3.0.0"
}
},
+ "node_modules/periscopic/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/picocolors": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
@@ -3807,7 +3888,6 @@
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
"engines": {
"node": ">=8.6"
},
@@ -3824,6 +3904,56 @@
"node": ">=0.10.0"
}
},
+ "node_modules/pinia": {
+ "version": "2.1.7",
+ "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz",
+ "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==",
+ "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/pirates": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
@@ -3833,6 +3963,17 @@
"node": ">= 6"
}
},
+ "node_modules/pkg-types": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
+ "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
+ "dev": true,
+ "dependencies": {
+ "jsonc-parser": "^3.2.0",
+ "mlly": "^1.2.0",
+ "pathe": "^1.1.0"
+ }
+ },
"node_modules/pngjs": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz",
@@ -3843,9 +3984,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.4.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+ "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
"funding": [
{
"type": "opencollective",
@@ -3861,7 +4002,7 @@
}
],
"dependencies": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -3906,21 +4047,27 @@
}
},
"node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
+ "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
"dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
"dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
+ "lilconfig": "^3.0.0",
+ "yaml": "^2.3.4"
},
"engines": {
"node": ">= 14"
},
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
"peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0"
@@ -3934,6 +4081,15 @@
}
}
},
+ "node_modules/postcss-load-config/node_modules/lilconfig": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
+ "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
+ "dev": true,
+ "engines": {
+ "node": ">=14"
+ }
+ },
"node_modules/postcss-nested": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
@@ -4075,7 +4231,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
"dependencies": {
"picomatch": "^2.2.1"
},
@@ -4083,23 +4238,6 @@
"node": ">=8.10.0"
}
},
- "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/require-directory": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
@@ -4172,18 +4310,31 @@
}
},
"node_modules/rollup": {
- "version": "3.29.4",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz",
- "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==",
+ "version": "4.9.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz",
+ "integrity": "sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==",
"dev": true,
"bin": {
"rollup": "dist/bin/rollup"
},
"engines": {
- "node": ">=14.18.0",
+ "node": ">=18.0.0",
"npm": ">=8.0.0"
},
"optionalDependencies": {
+ "@rollup/rollup-android-arm-eabi": "4.9.0",
+ "@rollup/rollup-android-arm64": "4.9.0",
+ "@rollup/rollup-darwin-arm64": "4.9.0",
+ "@rollup/rollup-darwin-x64": "4.9.0",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.9.0",
+ "@rollup/rollup-linux-arm64-gnu": "4.9.0",
+ "@rollup/rollup-linux-arm64-musl": "4.9.0",
+ "@rollup/rollup-linux-riscv64-gnu": "4.9.0",
+ "@rollup/rollup-linux-x64-gnu": "4.9.0",
+ "@rollup/rollup-linux-x64-musl": "4.9.0",
+ "@rollup/rollup-win32-arm64-msvc": "4.9.0",
+ "@rollup/rollup-win32-ia32-msvc": "4.9.0",
+ "@rollup/rollup-win32-x64-msvc": "4.9.0",
"fsevents": "~2.3.2"
}
},
@@ -4213,7 +4364,6 @@
"version": "1.69.5",
"resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz",
"integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==",
- "dev": true,
"dependencies": {
"chokidar": ">=3.0.0 <4.0.0",
"immutable": "^4.0.0",
@@ -4226,6 +4376,12 @@
"node": ">=14.0.0"
}
},
+ "node_modules/scule": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/scule/-/scule-1.1.1.tgz",
+ "integrity": "sha512-sHtm/SsIK9BUBI3EFT/Gnp9VoKfY6QLvlkvAE6YK7454IF8FSgJEAnJpVdSC7K5/pjI5NfxhzBLW2JAfYA/shQ==",
+ "dev": true
+ },
"node_modules/semver": {
"version": "7.5.4",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
@@ -4262,20 +4418,6 @@
"node": ">= 0.4"
}
},
- "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",
@@ -4310,20 +4452,6 @@
"url": "https://www.paypal.me/tiviesantos"
}
},
- "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==",
- "dev": true,
- "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/source-map-js": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
@@ -4338,18 +4466,6 @@
"integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==",
"dev": true
},
- "node_modules/stop-iteration-iterator": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz",
- "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==",
- "dev": true,
- "dependencies": {
- "internal-slot": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
"node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
@@ -4386,6 +4502,11 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/style-mod": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.0.tgz",
+ "integrity": "sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA=="
+ },
"node_modules/sucrase": {
"version": "3.34.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
@@ -4461,9 +4582,9 @@
}
},
"node_modules/svelte": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.2.tgz",
- "integrity": "sha512-My2tytF2e2NnHSpn2M7/3VdXT4JdTglYVUuSuK/mXL2XtulPYbeBfl8Dm1QiaKRn0zoULRnL+EtfZHHP0k4H3A==",
+ "version": "4.2.8",
+ "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.8.tgz",
+ "integrity": "sha512-hU6dh1MPl8gh6klQZwK/n73GiAHiR95IkFsesLPbMeEZi36ydaXL/ZAb4g9sayT0MXzpxyZjR28yderJHxcmYA==",
"dependencies": {
"@ampproject/remapping": "^2.2.1",
"@jridgewell/sourcemap-codec": "^1.4.15",
@@ -4483,10 +4604,18 @@
"node": ">=16"
}
},
+ "node_modules/svelte/node_modules/estree-walker": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
+ "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
+ "dependencies": {
+ "@types/estree": "^1.0.0"
+ }
+ },
"node_modules/tailwindcss": {
- "version": "3.3.5",
- "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz",
- "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==",
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.6.tgz",
+ "integrity": "sha512-AKjF7qbbLvLaPieoKeTjG1+FyNZT6KaJMJPFeQyLfIp7l82ggH1fbHJSsYIvnbTFQOlkh+gBYpyby5GT1LIdLw==",
"dev": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
@@ -4554,11 +4683,19 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}
},
+ "node_modules/to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
+ "dev": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
"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==",
- "dev": true,
"dependencies": {
"is-number": "^7.0.0"
},
@@ -4752,9 +4889,9 @@
}
},
"node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"devOptional": true,
"bin": {
"tsc": "bin/tsc",
@@ -4764,6 +4901,12 @@
"node": ">=14.17"
}
},
+ "node_modules/ufo": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz",
+ "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==",
+ "dev": true
+ },
"node_modules/universal-cookie": {
"version": "6.1.1",
"resolved": "https://registry.npmjs.org/universal-cookie/-/universal-cookie-6.1.1.tgz",
@@ -4773,6 +4916,47 @@
"cookie": "^0.5.0"
}
},
+ "node_modules/unplugin": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.1.tgz",
+ "integrity": "sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==",
+ "dev": true,
+ "dependencies": {
+ "acorn": "^8.11.2",
+ "chokidar": "^3.5.3",
+ "webpack-sources": "^3.2.3",
+ "webpack-virtual-modules": "^0.6.0"
+ }
+ },
+ "node_modules/unplugin-vue-router": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/unplugin-vue-router/-/unplugin-vue-router-0.7.0.tgz",
+ "integrity": "sha512-ddRreGq0t5vlSB7OMy4e4cfU1w2AwBQCwmvW3oP/0IHQiokzbx4hd3TpwBu3eIAFVuhX2cwNQwp1U32UybTVCw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/types": "^7.22.19",
+ "@rollup/pluginutils": "^5.0.4",
+ "@vue-macros/common": "^1.8.0",
+ "ast-walker-scope": "^0.5.0",
+ "chokidar": "^3.5.3",
+ "fast-glob": "^3.3.1",
+ "json5": "^2.2.3",
+ "local-pkg": "^0.4.3",
+ "mlly": "^1.4.2",
+ "pathe": "^1.1.1",
+ "scule": "^1.0.0",
+ "unplugin": "^1.5.0",
+ "yaml": "^2.3.2"
+ },
+ "peerDependencies": {
+ "vue-router": "^4.1.0"
+ },
+ "peerDependenciesMeta": {
+ "vue-router": {
+ "optional": true
+ }
+ }
+ },
"node_modules/update-browserslist-db": {
"version": "1.0.13",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
@@ -4824,14 +5008,34 @@
"dev": true
},
"node_modules/vanilla-jsoneditor": {
- "version": "0.18.12",
- "resolved": "https://registry.npmjs.org/vanilla-jsoneditor/-/vanilla-jsoneditor-0.18.12.tgz",
- "integrity": "sha512-IR1F72WrYFoHV0V+fI2AwczhNZ0NWCym7hcF9DxjjHQELyCKDq6ghMBS5vAQ9Hn1ivASrPFa+qjwRnGWOrGBow==",
- "dependencies": {
- "@fortawesome/free-solid-svg-icons": "^6.4.2",
+ "version": "0.20.0",
+ "resolved": "https://registry.npmjs.org/vanilla-jsoneditor/-/vanilla-jsoneditor-0.20.0.tgz",
+ "integrity": "sha512-2Q1//eCTauqy0kqvz2dLurzov0BA7FVHCl+6MBUBqem1CWmUONFuMvr8F/mmeqWY8D5WqcrRtb60akDWDFakgQ==",
+ "dependencies": {
+ "@codemirror/autocomplete": "^6.11.1",
+ "@codemirror/commands": "^6.3.2",
+ "@codemirror/lang-json": "^6.0.1",
+ "@codemirror/language": "^6.9.3",
+ "@codemirror/lint": "^6.4.2",
+ "@codemirror/search": "^6.5.5",
+ "@codemirror/state": "^6.3.3",
+ "@codemirror/view": "^6.22.1",
+ "@fortawesome/free-regular-svg-icons": "^6.5.1",
+ "@fortawesome/free-solid-svg-icons": "^6.5.1",
+ "@replit/codemirror-indentation-markers": "^6.5.0",
"ajv": "^8.12.0",
+ "codemirror-wrapped-line-indent": "^1.0.0",
+ "diff-sequences": "^29.6.3",
"immutable-json-patch": "^5.1.3",
- "svelte": "^4.2.2"
+ "jmespath": "^0.16.0",
+ "json-source-map": "^0.6.1",
+ "jsonrepair": "^3.4.1",
+ "lodash-es": "^4.17.21",
+ "memoize-one": "^6.0.0",
+ "natural-compare-lite": "^1.4.0",
+ "sass": "^1.69.5",
+ "svelte": "^4.2.8",
+ "vanilla-picker": "^2.12.2"
}
},
"node_modules/vanilla-jsoneditor/node_modules/ajv": {
@@ -4854,30 +5058,38 @@
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
"integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="
},
+ "node_modules/vanilla-picker": {
+ "version": "2.12.2",
+ "resolved": "https://registry.npmjs.org/vanilla-picker/-/vanilla-picker-2.12.2.tgz",
+ "integrity": "sha512-dk0gNeNL9fQFGd1VEhNDQfFlbCqAiksRh1H2tVPlavkH88n/a/y30rXi9PPKrYPTK5kEfPO4xcldt4ts/1wIAg==",
+ "dependencies": {
+ "@sphinxxxx/color-conversion": "^2.2.2"
+ }
+ },
"node_modules/vite": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz",
- "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==",
+ "version": "5.0.8",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.8.tgz",
+ "integrity": "sha512-jYMALd8aeqR3yS9xlHd0OzQJndS9fH5ylVgWdB+pxTwxLKdO1pgC5Dlb398BUxpfaBxa4M9oT7j1g503Gaj5IQ==",
"dev": true,
"dependencies": {
- "esbuild": "^0.18.10",
- "postcss": "^8.4.27",
- "rollup": "^3.27.1"
+ "esbuild": "^0.19.3",
+ "postcss": "^8.4.32",
+ "rollup": "^4.2.0"
},
"bin": {
"vite": "bin/vite.js"
},
"engines": {
- "node": "^14.18.0 || >=16.0.0"
+ "node": "^18.0.0 || >=20.0.0"
},
"funding": {
"url": "https://github.com/vitejs/vite?sponsor=1"
},
"optionalDependencies": {
- "fsevents": "~2.3.2"
+ "fsevents": "~2.3.3"
},
"peerDependencies": {
- "@types/node": ">= 14",
+ "@types/node": "^18.0.0 || >=20.0.0",
"less": "*",
"lightningcss": "^1.21.0",
"sass": "*",
@@ -4909,32 +5121,6 @@
}
}
},
- "node_modules/vite-plugin-pages": {
- "version": "0.31.0",
- "resolved": "https://registry.npmjs.org/vite-plugin-pages/-/vite-plugin-pages-0.31.0.tgz",
- "integrity": "sha512-fw3onBfVTXQI7rOzAbSZhmfwvk50+3qNnGZpERjmD93c8nEjrGLyd53eFXYMxcJV4KA1vzi4qIHt2+6tS4dEMw==",
- "dev": true,
- "dependencies": {
- "@types/debug": "^4.1.8",
- "debug": "^4.3.4",
- "deep-equal": "^2.2.1",
- "extract-comments": "^1.1.0",
- "fast-glob": "^3.2.12",
- "json5": "^2.2.3",
- "local-pkg": "^0.4.3",
- "picocolors": "^1.0.0",
- "yaml": "^2.3.1"
- },
- "peerDependencies": {
- "@vue/compiler-sfc": "^2.7.0 || ^3.0.0",
- "vite": "^2.0.0 || ^3.0.0-0 || ^4.0.0"
- },
- "peerDependenciesMeta": {
- "@vue/compiler-sfc": {
- "optional": true
- }
- }
- },
"node_modules/vls": {
"version": "0.8.5",
"resolved": "https://registry.npmjs.org/vls/-/vls-0.8.5.tgz",
@@ -4999,15 +5185,15 @@
"dev": true
},
"node_modules/vue": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz",
- "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.11.tgz",
+ "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==",
"dependencies": {
- "@vue/compiler-dom": "3.3.8",
- "@vue/compiler-sfc": "3.3.8",
- "@vue/runtime-dom": "3.3.8",
- "@vue/server-renderer": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-dom": "3.3.11",
+ "@vue/compiler-sfc": "3.3.11",
+ "@vue/runtime-dom": "3.3.11",
+ "@vue/server-renderer": "3.3.11",
+ "@vue/shared": "3.3.11"
},
"peerDependencies": {
"typescript": "*"
@@ -5067,13 +5253,13 @@
}
},
"node_modules/vue-tsc": {
- "version": "1.8.22",
- "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.22.tgz",
- "integrity": "sha512-j9P4kHtW6eEE08aS5McFZE/ivmipXy0JzrnTgbomfABMaVKx37kNBw//irL3+LlE3kOo63XpnRigyPC3w7+z+A==",
+ "version": "1.8.25",
+ "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.8.25.tgz",
+ "integrity": "sha512-lHsRhDc/Y7LINvYhZ3pv4elflFADoEOo67vfClAfF2heVHpHmVquLSjojgCSIwzA4F0Pc4vowT/psXCYcfk+iQ==",
"dev": true,
"dependencies": {
- "@volar/typescript": "~1.10.5",
- "@vue/language-core": "1.8.22",
+ "@volar/typescript": "~1.11.1",
+ "@vue/language-core": "1.8.25",
"semver": "^7.5.4"
},
"bin": {
@@ -5095,6 +5281,26 @@
"vue": "^3.0.*"
}
},
+ "node_modules/w3c-keyname": {
+ "version": "2.2.8",
+ "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
+ "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ=="
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack-virtual-modules": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz",
+ "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==",
+ "dev": true
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
@@ -5109,62 +5315,12 @@
"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-collection": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz",
- "integrity": "sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==",
- "dev": true,
- "dependencies": {
- "is-map": "^2.0.1",
- "is-set": "^2.0.1",
- "is-weakmap": "^2.0.1",
- "is-weakset": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
"node_modules/which-module": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz",
"integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==",
"peer": true
},
- "node_modules/which-typed-array": {
- "version": "1.1.13",
- "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz",
- "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==",
- "dev": true,
- "dependencies": {
- "available-typed-arrays": "^1.0.5",
- "call-bind": "^1.0.4",
- "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/wrap-ansi": {
"version": "6.2.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
diff --git a/front-end/package.json b/front-end/package.json
index 8bd688e..0e60e64 100644
--- a/front-end/package.json
+++ b/front-end/package.json
@@ -14,6 +14,7 @@
"scripts": {
"dev": "vite",
+ "watch": "vite build --watch --mode development --minify false",
"build": "vite build",
"preview": "vite preview"
},
@@ -28,7 +29,7 @@
"@headlessui/vue": "^1.7.12",
"@kyvg/vue3-notification": "^3.0.x",
"@vnuge/cmnext-admin": "../lib/admin",
- "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz",
+ "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/0b1acb55ae395723772251318254ba131e987107/@vnuge-vnlib.browser/release.tgz",
"@vuelidate/core": "^2.0.2",
"@vuelidate/validators": "^2.0.2",
"@vueuse/core": "^10.3.x",
@@ -40,6 +41,7 @@
"lodash-es": "^4.17.21",
"otpauth": "^9.1.2",
"showdown": "^2.1.0",
+ "pinia": "^2.1.7",
"universal-cookie": "^6.1.x",
"vue": "^3.2.47",
"vue3-otp-input": "^0.4.1"
@@ -55,8 +57,8 @@
"sass": "^1.62.1",
"tailwindcss": "^3.3.2",
"typescript": "^5.0.2",
- "vite": "^4.3.5",
- "vite-plugin-pages": "^0.31.0",
+ "vite": "^5.0.x",
+ "unplugin-vue-router": "^0.7.0",
"vue-eslint-parser": "^9.3.0",
"vue-router": "^4.2.0",
"vue-tsc": "^1.4.2",
diff --git a/front-end/src/App.vue b/front-end/src/App.vue
index da1b914..d6ac36f 100644
--- a/front-end/src/App.vue
+++ b/front-end/src/App.vue
@@ -1,6 +1,9 @@
<template>
+ <head>
+ <title>{{ metaTile }}</title>
+ </head>
<!-- Import environment component top level as the entrypoint -->
- <Environment>
+ <Environment @logout="store.socialOauth.logout">
<template #main>
<router-view />
</template>
@@ -8,6 +11,24 @@
</template>
<script setup lang="ts">
+import { computed } from 'vue';
+import { useStore } from './store';
+import { storeToRefs } from 'pinia';
import Environment from './bootstrap/Environment.vue';
+const store = useStore()
+const { siteTitle, pageTitle } = storeToRefs(store)
+
+//Compute meta title from the default site title and the page title
+const metaTile = computed(() => `${pageTitle.value} | ${siteTitle.value}`)
+
+store.setSiteTitle('CMNext Admin')
+store.setPageTitle('Blog')
+
+//Set header routes
+store.setHeaderRouteNames(
+ ['Login'],
+ ['Blog', 'Account', 'Login']
+)
+
</script> \ No newline at end of file
diff --git a/front-end/src/bootstrap/Environment.vue b/front-end/src/bootstrap/Environment.vue
index f575529..618ee62 100644
--- a/front-end/src/bootstrap/Environment.vue
+++ b/front-end/src/bootstrap/Environment.vue
@@ -1,7 +1,4 @@
<template>
- <head>
- <title>{{ metaTile }}</title>
- </head>
<div id="env-entry" ref="content" class="absolute top-0 left-0 w-full min-h-screen env-bg">
<div class="absolute flex w-full">
<notifications
@@ -20,7 +17,7 @@
/>
</div>
- <site-header ref="header" :site-title="siteTitle" :routes="routes" >
+ <site-header ref="header" :routes="routes" @logout="emit('logout')" >
<template #site_logo>
<!-- Use the global site-logo if enabled -->
<site-logo />
@@ -53,54 +50,37 @@
import { computed } from 'vue'
import { RouteLocation, useRouter } from 'vue-router'
import { filter, map, without, find, includes } from 'lodash-es'
-import { useEnvSize, useScrollOnRouteChange, useSession, useTitle } from '@vnuge/vnlib.browser'
+import { storeToRefs } from 'pinia'
+import { useEnvSize } from '@vnuge/vnlib.browser'
+import { useStore } from '../store'
import CookieWarning from './components/CookieWarning.vue'
import PasswordPrompt from './components/PasswordPrompt.vue'
import siteHeader from './components/Header.vue'
import siteFooter from './components/Footer.vue'
import ConfirmPrompt from './components/ConfirmPrompt.vue'
-import { headerRoutes, authRoutes, siteTitle, showCookieWarning } from './index'
-const { loggedIn } = useSession();
+const emit = defineEmits(['logout'])
+const store = useStore()
+const { showCookieWarning, currentRoutes } = storeToRefs(store)
const { getRoutes } = useRouter();
-const { title } = useTitle(siteTitle.value);
//Use the env size to calculate the header and footer heights for us
const { header, footer, content, headerHeight, footerHeight } = useEnvSize(true)
-//setup autoscroll
-useScrollOnRouteChange();
-
-//Compute meta title from the default site title and the page title
-const metaTile = computed(() => title.value ? `${title.value} | ${siteTitle.value}` : siteTitle.value)
-
const routes = computed<RouteLocation[]>(() => {
// Get routes that are defined above but only if they are defined in the router
// This is a computed property because loggedin is a reactive property
- const routeNames = loggedIn.value ? authRoutes.value : headerRoutes.value
- const routes = filter(getRoutes(), (pageName) => includes(routeNames, pageName.name))
+ const routes = filter(getRoutes(), (pageName) => includes(currentRoutes.value, pageName.name))
- const activeRoutes = map(routeNames, route => find(routes, { name: route }))
+ const activeRoutes = map(currentRoutes.value, route => find(routes, { name: route }))
return without<RouteLocation>(activeRoutes, undefined)
})
-
//Forces the page content to be exactly the height of the viewport - header and footer sizes
-const bodyStyle = computed(() => {
- return { 'min-height': `calc(100vh - ${headerHeight.value + footerHeight.value}px)` }
-})
+const bodyStyle = computed(() => ({ 'min-height': `calc(100vh - ${headerHeight.value + footerHeight.value}px)` }))
+const generalToastStyle = computed(() => ({ top: `${headerHeight.value + 5}px` }))
+const formToastStyle = computed(() => ({ top: `${headerHeight.value}px` }))
-const generalToastStyle = computed(() => {
- return { top: `${headerHeight.value + 5}px` }
-})
-
-const formToastStyle = computed(() => {
- return { top: `${headerHeight.value}px` }
-})
</script>
-
-<style>
-
-</style>
diff --git a/front-end/src/bootstrap/components/ConfirmPrompt.vue b/front-end/src/bootstrap/components/ConfirmPrompt.vue
index 78317e0..c67bcfc 100644
--- a/front-end/src/bootstrap/components/ConfirmPrompt.vue
+++ b/front-end/src/bootstrap/components/ConfirmPrompt.vue
@@ -5,7 +5,7 @@
<div class="modal-content-container">
<DialogPanel>
<DialogTitle class="modal-title">
- {{ title }}
+ {{ message.title ?? 'Confirm' }}
</DialogTitle>
<DialogDescription class="modal-description">
@@ -55,9 +55,7 @@ const message = ref({})
onClickOutside(dialog, () => isRevealed.value ? cancel() : null)
//Set message on reveal
-onReveal(m => message.value = m);
-
-const title = computed(() => defaultTo(message.value.title, 'Confirm'))
+onReveal(m => message.value = defaultTo(m, {}));
const style = computed(() => {
return {
diff --git a/front-end/src/bootstrap/components/Footer.vue b/front-end/src/bootstrap/components/Footer.vue
index 6af6936..7c306c9 100644
--- a/front-end/src/bootstrap/components/Footer.vue
+++ b/front-end/src/bootstrap/components/Footer.vue
@@ -17,7 +17,7 @@
<p class="nav-title">
Built with
</p>
- <a class="footer-link" href="https://www.vaughnnugent.com/resources/software/modules">VNLib HTTP v1.0.1</a>
+ <a class="footer-link" href="https://www.vaughnnugent.com/resources/software/modules">VNLib HTTP v0.1.0</a>
<a class="footer-link" href="https://tailwindcss.com/">Tailwindcss</a>
<a class="footer-link" href="https://vuejs.org/">Vuejs v3</a>
<a class="footer-link" href="https://fontawesome.com/">Font Awesome</a>
diff --git a/front-end/src/bootstrap/components/Header.vue b/front-end/src/bootstrap/components/Header.vue
index 8ea2240..43a805b 100644
--- a/front-end/src/bootstrap/components/Header.vue
+++ b/front-end/src/bootstrap/components/Header.vue
@@ -78,18 +78,21 @@
import { debounce, find } from 'lodash-es'
import { useElementSize, onClickOutside, useElementHover } from '@vueuse/core'
import { computed, ref, toRefs } from 'vue'
-import { useSession, useUser, useEnvSize, apiCall } from '@vnuge/vnlib.browser'
+import { useEnvSize } from '@vnuge/vnlib.browser'
import { RouteLocation, useRouter } from 'vue-router';
+import { storeToRefs } from 'pinia';
+import { useStore } from '../../store';
+const emit = defineEmits(['logout'])
const props = defineProps<{
- siteTitle: string,
routes: RouteLocation[]
}>()
-const { siteTitle, routes } = toRefs(props)
+const { routes } = toRefs(props)
+
+const store = useStore();
+const { loggedIn, siteTitle } = storeToRefs(store);
-const { loggedIn } = useSession()
-const { userName, logout } = useUser()
const { headerHeight } = useEnvSize()
//Get the router for navigation
@@ -105,7 +108,7 @@ const dropMenuSize = useElementSize(userDrop)
const sideMenuSize = useElementSize(sideMenu)
const userMenuHovered = useElementHover(userMenu)
-const uname = computed(() => userName.value || 'Visitor')
+const uname = computed(() => (store as any).userName || 'Visitor')
const sideMenuStyle = computed(() => {
// Side menu should be the exact height of the page and under the header,
// So menu height is the height of the page minus the height of the header
@@ -148,15 +151,8 @@ const gotoRoute = (route : string) =>{
}
const OnLogout = () =>{
- apiCall(async ({ toaster }) => {
- await logout()
- toaster.general.success({
- id: 'logout-success',
- title: 'Success',
- text: 'You have been logged out',
- duration: 5000
- })
- })
+ //Emit logout event
+ emit('logout')
}
</script> \ No newline at end of file
diff --git a/front-end/src/bootstrap/index.ts b/front-end/src/bootstrap/index.ts
index ead41e1..343def6 100644
--- a/front-end/src/bootstrap/index.ts
+++ b/front-end/src/bootstrap/index.ts
@@ -1,47 +1,25 @@
import App from '../App.vue'
import Notifications, { notify } from '@kyvg/vue3-notification'
import { configureNotifier } from '@vnuge/vnlib.browser'
-import { createApp as vueCreateApp, ref } from "vue";
+import { CreateAppFunction, createApp as vueCreateApp } from "vue";
import { useDark } from "@vueuse/core";
+import { createPinia, type Pinia } from "pinia";
//Font awesome support
import { Library } from "@fortawesome/fontawesome-svg-core";
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faBars, faLightbulb, faTimes } from '@fortawesome/free-solid-svg-icons'
-
-//Required global state elements for app components
-export const headerRoutes = ref<string[]>([]);
-export const authRoutes = ref<string[]>([]);
-export const siteTitle = ref<string>("");
-export const showCookieWarning = ref<boolean>(false);
-
-
export interface AppConfig {
/**
- * Routes to be displayed in the header when the user is not logged in
- */
- headerRoutes: string[];
-
- /**
- * Routes to be displayed in the header when the user is logged in
- */
- authRoutes: string[];
-
- /**
- * The title of the site, used in the title bar
- */
- siteTitle: string;
-
- /**
* Enables dark mode support
*/
- useDarkMode: boolean;
+ useDarkMode?: boolean;
/**
* The element to mount the app to
*/
- mountElement: string;
+ mountElement: string | Element;
/**
* library instance for adding required icons
@@ -49,16 +27,19 @@ export interface AppConfig {
faLibrary: Library;
/**
- * If true, the cookie warning will not be displayed
+ * Called when the app is created for you to add custom elements
+ * and configure the app
+ * @param app The app instance
+ * @param store The pinia store instance
*/
- hideCookieWarning?: boolean;
+ onCreate(app: any, piniaStore: Pinia): void;
/**
- * Called when the app is created for you to add custom elements
- * and configure the app
+ * Allows the user to override the createApp function
* @param app The app instance
+ * @returns The app instance
*/
- onCreate: (app: any) => void;
+ createApp?: CreateAppFunction<Element>
}
/**
@@ -66,13 +47,12 @@ export interface AppConfig {
* @param config The configuration for the app
* @returns The app instance
*/
-export const createVnApp = (config: AppConfig, createApp?: (app: any) => any) => {
- headerRoutes.value = config.headerRoutes;
- authRoutes.value = config.authRoutes;
- siteTitle.value = config.siteTitle;
+export const createVnApp = (config: AppConfig) => {
+
+ const store = createPinia();
//Allow the user to override the createApp function
- createApp = createApp || vueCreateApp;
+ config.createApp ??= vueCreateApp;
//Enable dark mode support
if (config.useDarkMode) {
@@ -83,25 +63,18 @@ export const createVnApp = (config: AppConfig, createApp?: (app: any) => any) =>
});
}
- if (!config.hideCookieWarning) {
- //Configure the cookie warning to be displayed cookies are not enabled
- showCookieWarning.value = navigator?.cookieEnabled === false;
- }
-
//Add required icons to library
config.faLibrary.add(faBars, faLightbulb, faTimes);
//create the vue app
- const app = createApp(App)
-
- //Add the library to the app
- app.component('fa-icon', FontAwesomeIcon)
-
- //Add the notification and router to the app
- app.use(Notifications);
+ const app = config.createApp(App)
+
+ app.use(Notifications) //Add the notification component to the app
+ .use(store) //Add pinia to the app
+ .component('fa-icon', FontAwesomeIcon) //Add the font awesome icon component to the app
//Call the onCreate callback
- config.onCreate(app);
+ config.onCreate(app, store);
//Mount the app
app.mount(config.mountElement);
diff --git a/front-end/src/bootstrap/style/modals.scss b/front-end/src/bootstrap/style/modals.scss
index 254b8e1..b868406 100644
--- a/front-end/src/bootstrap/style/modals.scss
+++ b/front-end/src/bootstrap/style/modals.scss
@@ -3,8 +3,8 @@
@apply fixed z-50 flex w-full px-6;
.modal-content-container {
- @apply w-full max-w-md p-5 m-auto rounded-md shadow-2xl mt-44;
- @apply bg-white border border-transparent dark:bg-dark-600 dark:border-primary-500 dark:text-white;
+ @apply w-full max-w-md p-5 m-auto rounded shadow-2xl mt-44;
+ @apply bg-white border border-transparent dark:bg-dark-700 dark:border-dark-300 dark:text-white;
.modal-title {
@apply text-xl font-bold;
diff --git a/front-end/src/main.ts b/front-end/src/main.ts
index cbf3209..31447a1 100644
--- a/front-end/src/main.ts
+++ b/front-end/src/main.ts
@@ -16,9 +16,11 @@
//Get the create app from boostrap dir
import { createVnApp } from './bootstrap'
+import { configureApi } from '@vnuge/vnlib.browser'
//Import all styles
import './bootstrap/style/all.scss'
+//Import your main style file
import './assets/main.scss'
//Import font data
@@ -41,23 +43,37 @@ import FooterNav1 from './components/FooterNav1.vue'
import FooterNav2 from './components/FooterNav2.vue'
import SiteLogo from './components/Site-Logo.vue'
import DynamicFormVue from './components/DynamicForm.vue'
-import { configureApi, useAutoHeartbeat } from '@vnuge/vnlib.browser'
-import { useLocalStorage } from '@vueuse/core'
-import { watch } from 'vue'
+
+import { globalStatePlugin } from './store/globalState'
+import { profilePlugin } from './store/userProfile'
+import { mfaSettingsPlugin } from './store/mfaSettingsPlugin'
+import { pageProtectionPlugin } from './store/pageProtectionPlugin'
+import { socialMfaPlugin } from './store/socialMfaPlugin'
+
+//Setup the vnlib api
+configureApi({
+ session: {
+ //The identifier of the login cookie, see Essentials.Accounts docs
+ loginCookieName: 'li',
+ browserIdSize: 32,
+ },
+ user: {
+ accountBasePath: '/account',
+ },
+ axios: {
+ //The base url to make api requests against
+ baseURL: import.meta.env.VITE_API_URL,
+ withCredentials: false,
+ //See Essentials.Accounts docs
+ tokenHeader: 'X-Web-Token',
+ },
+ storage: localStorage
+})
createVnApp({
//The app mount point
mountElement: '#app',
- //The site title
- siteTitle: 'CMNext Admin',
-
- //Routes to display in the header when the user is not logged in
- headerRoutes: ['Blog', 'Login'],
-
- //Routes to display in the header when the user is logged in
- authRoutes: ['Blog', 'Account', 'Login'],
-
//Enable dark mode support
useDarkMode: true,
@@ -65,11 +81,21 @@ createVnApp({
faLibrary: library,
//Called when the app is created for you to add custom elements
- onCreate(app) {
+ onCreate(app, store) {
//Add the router
app.use(router)
+ store.use(globalStatePlugin)
+ //User-profile plugin
+ .use(profilePlugin('/account/profile'))
+ //setup page protection plugin with the router
+ .use(pageProtectionPlugin(router))
+ //Enable mfa with totp settings plugin (optional pki config)
+ .use(mfaSettingsPlugin('/account/mfa', '/account/pki'))
+ //Setup social mfa plugin
+ .use(socialMfaPlugin)
+
//Add the home-page component
router.addRoute({
path: '/',
@@ -83,7 +109,7 @@ createVnApp({
name: 'Account',
redirect: { path: '/account/profile' }
})
-
+
//Add the footer nav components
app.component('FooterNav1', FooterNav1)
app.component('FooterNav2', FooterNav2)
@@ -95,32 +121,3 @@ createVnApp({
app.component('dynamic-form', DynamicFormVue)
},
})
-
-//Setup the vnlib api
-configureApi({
- session: {
- cookiesEnabled: navigator.cookieEnabled,
- loginCookieName: import.meta.env.VITE_LOGIN_COOKIE_ID,
- bidSize: 32,
- storage: localStorage
- },
- user: {
- accountBasePath: import.meta.env.VITE_ACCOUNTS_BASE_PATH,
- storage: localStorage,
- //The heartbeat interval in milliseconds, if you enable it
- autoHearbeatInterval: 1000 * 60 * 5, //5 minute interval
- },
- axios: {
- baseURL: import.meta.env.VITE_API_URL,
- withCredentials: import.meta.env.VITE_CORS_ENABLED === 'true',
- tokenHeader: import.meta.env.VITE_WEB_TOKEN_HEADER,
- }
-})
-
-//Get shared global state storage
-const mainState = useLocalStorage("vn-state", { ahEnabled: false });
-
-//Setup interval from local storage that remembers the user's preferrence
-const { enabled } = useAutoHeartbeat(mainState.value.ahEnabled)
-//Update the local storage when the value changes
-watch(enabled, (val) => mainState.value.ahEnabled = val) \ No newline at end of file
diff --git a/front-end/src/router/index.ts b/front-end/src/router/index.ts
index d5685b5..538c132 100644
--- a/front-end/src/router/index.ts
+++ b/front-end/src/router/index.ts
@@ -1,8 +1,5 @@
-import { createRouter, createWebHistory } from 'vue-router'
-
-import routes from '~pages'
+import { createRouter, createWebHistory } from 'vue-router/auto'
export default createRouter({
- history: createWebHistory(import.meta.env.BASE_URL),
- routes
+ history: createWebHistory(import.meta.env.BASE_URL)
}) \ No newline at end of file
diff --git a/front-end/src/store/globalState.ts b/front-end/src/store/globalState.ts
new file mode 100644
index 0000000..9e700eb
--- /dev/null
+++ b/front-end/src/store/globalState.ts
@@ -0,0 +1,30 @@
+import 'pinia'
+import { shallowRef } from 'vue';
+import { useAutoHeartbeat } from '@vnuge/vnlib.browser';
+import { toRefs, useLocalStorage } from '@vueuse/core';
+import { PiniaPluginContext, PiniaPlugin } from 'pinia'
+import { defaults } from 'lodash-es';
+
+declare module 'pinia' {
+ export interface PiniaCustomProperties {
+ autoHeartbeat: boolean;
+ }
+}
+
+export const globalStatePlugin: PiniaPlugin = ({ store }: PiniaPluginContext) =>{
+
+ //Get shared global state storage
+ const mainState = useLocalStorage("vn-state", { ahEnabled: false });
+
+ //Set defaults to avoid undefined errors from toRefs
+ defaults(mainState.value, { ahEnabled: false })
+
+ const { ahEnabled } = toRefs(mainState)
+
+ //Setup heartbeat for 5 minutes
+ useAutoHeartbeat(shallowRef(5 * 60 * 1000), ahEnabled)
+
+ return{
+ autoHeartbeat: ahEnabled,
+ }
+} \ No newline at end of file
diff --git a/front-end/src/store/index.ts b/front-end/src/store/index.ts
new file mode 100644
index 0000000..924bf1b
--- /dev/null
+++ b/front-end/src/store/index.ts
@@ -0,0 +1,49 @@
+import { useSession } from "@vnuge/vnlib.browser";
+import { set } from "@vueuse/core";
+import { defineStore } from "pinia";
+import { computed, shallowRef } from "vue";
+
+/**
+ * Loads the main store for the application
+ */
+export const useStore = defineStore('main', () => {
+
+ const { loggedIn, isLocalAccount } = useSession();
+
+ //MANAGED STATE
+ const headerRoutes = shallowRef(Array<string>());
+ const authRoutes = shallowRef(Array<string>());
+ const siteTitle = shallowRef("");
+ const pageTitle = shallowRef("");
+ const showCookieWarning = shallowRef(!navigator.cookieEnabled); //Default to current cookie status
+
+ /**
+ * The current routes to display in the header depending on the
+ * user's login status
+ */
+ const currentRoutes = computed(() => loggedIn.value ? authRoutes.value : headerRoutes.value);
+
+ const setHeaderRouteNames = (routeNames: string[], authRouteNames: string[]) => {
+ set(headerRoutes, [...routeNames]);
+ set(authRoutes, [...authRouteNames]);
+ }
+
+ const setSiteTitle = (title: string) => set(siteTitle, title);
+ const setPageTitle = (title: string) => set(pageTitle, title);
+ const setCookieWarning = (show: boolean) => set(showCookieWarning, show);
+
+ return{
+ loggedIn,
+ isLocalAccount,
+ headerRoutes,
+ authRoutes,
+ siteTitle,
+ pageTitle,
+ showCookieWarning,
+ setCookieWarning,
+ setPageTitle,
+ currentRoutes,
+ setHeaderRouteNames,
+ setSiteTitle
+ }
+})
diff --git a/front-end/src/store/mfaSettingsPlugin.ts b/front-end/src/store/mfaSettingsPlugin.ts
new file mode 100644
index 0000000..dffafce
--- /dev/null
+++ b/front-end/src/store/mfaSettingsPlugin.ts
@@ -0,0 +1,62 @@
+import 'pinia'
+import { MaybeRef, shallowRef, watch } from 'vue';
+import { MfaMethod, PkiPublicKey, apiCall, useMfaConfig, usePkiConfig, usePkiAuth } from '@vnuge/vnlib.browser';
+import { useToggle, get } from '@vueuse/core';
+import { PiniaPluginContext, PiniaPlugin, storeToRefs } from 'pinia'
+import { includes } from 'lodash-es';
+
+declare module 'pinia' {
+ export interface PiniaCustomProperties {
+ mfaEndabledMethods: MfaMethod[]
+ mfaConfig: ReturnType<typeof useMfaConfig>
+ pkiConfig: ReturnType<typeof usePkiConfig>
+ pkiAuth: ReturnType<typeof usePkiAuth>
+ pkiPublicKeys: PkiPublicKey[]
+ mfaRefreshMethods: () => void
+ }
+}
+
+export const mfaSettingsPlugin = (mfaEndpoint: MaybeRef<string>, pkiEndpoint?:MaybeRef<string>): PiniaPlugin => {
+
+ return ({ store }: PiniaPluginContext) => {
+
+ const { loggedIn } = storeToRefs(store)
+ const mfaConfig = useMfaConfig(mfaEndpoint)
+ const pkiConfig = usePkiConfig(pkiEndpoint || '/')
+ const pkiAuth = usePkiAuth(pkiEndpoint || '/')
+ const [onRefresh, mfaRefreshMethods] = useToggle()
+
+ const mfaEndabledMethods = shallowRef<MfaMethod[]>([])
+ const pkiPublicKeys = shallowRef<PkiPublicKey[]>([])
+
+ watch([loggedIn, onRefresh], ([ li ]) => {
+ if(!li){
+ mfaEndabledMethods.value = []
+ return
+ }
+
+ //load the mfa methods if the user is logged in
+ apiCall(async () => mfaEndabledMethods.value = await mfaConfig.getMethods())
+ })
+
+ //Watch for changes to mfa methods (refresh) and update the pki keys
+ watch([mfaEndabledMethods], ([ methods ]) => {
+ if(!includes(methods, 'pki' as MfaMethod) || !get(pkiEndpoint)){
+ pkiPublicKeys.value = []
+ return
+ }
+
+ //load the pki keys if pki is enabled
+ apiCall(async () => pkiPublicKeys.value = await pkiConfig.getAllKeys())
+ })
+
+ return{
+ mfaRefreshMethods,
+ mfaEndabledMethods,
+ mfaConfig,
+ pkiConfig,
+ pkiAuth,
+ pkiPublicKeys
+ }
+ }
+} \ No newline at end of file
diff --git a/front-end/src/store/pageProtectionPlugin.ts b/front-end/src/store/pageProtectionPlugin.ts
new file mode 100644
index 0000000..9831dad
--- /dev/null
+++ b/front-end/src/store/pageProtectionPlugin.ts
@@ -0,0 +1,79 @@
+import 'pinia'
+import { watch } from 'vue';
+import { } from '@vnuge/vnlib.browser';
+import { useSessionStorage, get, set } from '@vueuse/core';
+import { PiniaPluginContext, PiniaPlugin, storeToRefs } from 'pinia'
+import { includes, startsWith } from 'lodash-es';
+import { useRouter } from 'vue-router';
+
+declare module 'pinia' {
+ export interface PiniaCustomProperties {
+
+ }
+}
+
+export const pageProtectionPlugin = (router: ReturnType<typeof useRouter>): PiniaPlugin => {
+
+ return ({ store }: PiniaPluginContext) => {
+
+ const { loggedIn, headerRoutes } = storeToRefs(store)
+
+ const lastPageStore = useSessionStorage('lastPageStore', undefined)
+
+ //Setup nav guards
+ router.beforeEach((to, from) => {
+ if(!to.name){
+ return true;
+ }
+
+ //see if to route is login route
+ if(startsWith(to.name as string, 'Login')){
+
+ //If the user is logged-in, redirect to the last page
+ if(get(loggedIn) === true){
+ const lastPath = get(lastPageStore);
+ set(lastPageStore, undefined) //Clear the last page
+
+ return lastPath ? { path: lastPath } : true;
+ }
+ else{
+ //Set last page as from page
+ set(lastPageStore, from.fullPath)
+ }
+ return true;
+ }
+
+ //See if the to route is not in allowed routes
+ if (!includes(get(headerRoutes), to.name as string)){
+ //Check if the user is logged in
+ if(get(loggedIn) === false){
+
+ //Save the last page
+ set(lastPageStore, to.fullPath)
+
+ //Redirect to login
+ return { name: 'Login' }
+ }
+ }
+
+ //Allow
+ return true;
+ })
+
+ router.afterEach(() => {
+ //scroll window back to top
+ window.scrollTo(0, 0)
+ })
+
+ watch(loggedIn, (loggedIn) => {
+ //If the user gets logged out, redirect to login
+ if(loggedIn === false && router.currentRoute.value.name !== 'Login'){
+ router.push({ name: 'Login' })
+ }
+ })
+
+ return {
+
+ }
+ }
+} \ No newline at end of file
diff --git a/front-end/src/store/socialMfaPlugin.ts b/front-end/src/store/socialMfaPlugin.ts
new file mode 100644
index 0000000..d328399
--- /dev/null
+++ b/front-end/src/store/socialMfaPlugin.ts
@@ -0,0 +1,42 @@
+
+import 'pinia'
+import { } from 'vue';
+import { useSocialOauthLogin, createSocialMethod, useUser } from '@vnuge/vnlib.browser'
+import { } from '@vueuse/core';
+import { PiniaPluginContext, PiniaPlugin, storeToRefs } from 'pinia'
+import { } from 'lodash-es';
+
+declare module 'pinia' {
+ export interface PiniaCustomProperties {
+ socialOauth: ReturnType<typeof useSocialOauthLogin>
+ }
+}
+
+export const socialMfaPlugin: PiniaPlugin = ({ store }: PiniaPluginContext) => {
+
+ const { } = storeToRefs(store)
+ const { logout } = useUser()
+
+ //Setup social providers
+ const socialOauth = useSocialOauthLogin([
+ //createSocialMethod('github', '/login/social/github'),
+ //createSocialMethod('discord', '/login/social/discord'),
+ ])
+
+ /**
+ * Override the logout function to default to a social logout,
+ * if the social logout fails, then we will logout the user
+ */
+
+ const logoutFunc = socialOauth.logout;
+
+ (socialOauth as any).logout = async () => {
+ if (await logoutFunc() === false) {
+ await logout()
+ }
+ }
+
+ return {
+ socialOauth
+ }
+} \ No newline at end of file
diff --git a/front-end/src/store/userProfile.ts b/front-end/src/store/userProfile.ts
new file mode 100644
index 0000000..a4ea469
--- /dev/null
+++ b/front-end/src/store/userProfile.ts
@@ -0,0 +1,82 @@
+import 'pinia'
+import { MaybeRef, watch } from 'vue';
+import { ServerDataBuffer, ServerObjectBuffer, UserProfile, WebMessage, apiCall, useAxios, useDataBuffer, useUser } from '@vnuge/vnlib.browser';
+import { get, useToggle } from '@vueuse/core';
+import { PiniaPlugin, PiniaPluginContext, storeToRefs } from 'pinia'
+import { defer } from 'lodash-es';
+
+export interface OAuth2Application {
+ readonly Id: string,
+ readonly name: string,
+ readonly description: string,
+ readonly permissions: string[],
+ readonly client_id: string,
+ readonly Created: Date,
+ readonly LastModified: Date,
+}
+
+export interface NewAppResponse {
+ readonly secret: string
+ readonly app: ServerDataBuffer<OAuth2Application, WebMessage<string>>
+}
+
+interface ExUserProfile extends UserProfile {
+ created: string | Date
+}
+
+declare module 'pinia' {
+ export interface PiniaCustomProperties {
+ userProfile: ServerDataBuffer<ExUserProfile, WebMessage<string>>
+ userName: string | undefined
+ refreshProfile(): void;
+ }
+}
+
+export const profilePlugin = (accountsUrl:MaybeRef<string>) :PiniaPlugin => {
+
+ return ({ store }: PiniaPluginContext) => {
+
+ const { loggedIn } = storeToRefs(store)
+ const { getProfile, userName } = useUser()
+ const axios = useAxios(null)
+
+ const [onRefresh, refreshProfile] = useToggle()
+
+ const updateUserProfile = async (profile: ServerObjectBuffer<ExUserProfile>) => {
+ // Apply the buffer to the profile
+ const { data } = await axios.post<WebMessage<string>>(get(accountsUrl), profile.buffer)
+
+ //Get the new profile from the server
+ const newProfile = await getProfile() as ExUserProfile
+
+ //Apply the new profile to the buffer
+ profile.apply(newProfile)
+
+ return data;
+ }
+
+ const userProfile = useDataBuffer({} as any, updateUserProfile)
+
+ const loadProfile = async () => {
+ //Get the user profile
+ const profile = await getProfile() as ExUserProfile
+ //Apply the profile to the buffer
+ userProfile.apply(profile)
+ }
+
+ watch([loggedIn, onRefresh], ([li]) => {
+ //If the user is logged in, load the profile buffer
+ if (li) {
+ apiCall(loadProfile)
+ }
+ })
+
+ defer(refreshProfile);
+
+ return {
+ userProfile,
+ refreshProfile,
+ userName
+ }
+ }
+} \ No newline at end of file
diff --git a/front-end/src/views/Account/[comp].vue b/front-end/src/views/Account/[comp].vue
index d854e2e..d4f1c4d 100644
--- a/front-end/src/views/Account/[comp].vue
+++ b/front-end/src/views/Account/[comp].vue
@@ -1,6 +1,6 @@
<template>
<div id="account-template" class="app-component-entry">
- <TabGroup :selectedIndex="tabId" @change="onTabChange" as="div" class="container h-full m-auto mt-0 mb-10 duration-150 ease-linear">
+ <TabGroup :selectedIndex="tabId" @change="onTabChange" as="div" class="container h-full m-auto mt-0 mb-10 duration-150 ease-linear text-color-foreground">
<div class="flex w-full py-2 xl:w-auto lg:pt-4 xl:fixed">
@@ -39,25 +39,24 @@
<script setup lang="ts">
import { computed } from 'vue'
-import { usePageGuard, useTitle } from '@vnuge/vnlib.browser'
import { useRouteParams } from '@vueuse/router'
import { TabGroup, TabList, Tab, TabPanels, TabPanel } from '@headlessui/vue'
+import { useStore } from '../../store'
import Settings from './components/settings/Settings.vue'
import Profile from './components/profile/Profile.vue'
-usePageGuard()
-useTitle('Account')
+const { setPageTitle } = useStore()
+setPageTitle('Account')
enum ComponentType{
Profile = 'profile',
- Oauth = 'oauth',
Settings = 'settings'
}
-const comp = useRouteParams<ComponentType>('comp')
+const comp = useRouteParams<ComponentType>('comp', '')
-const tabId = computed<number>(() =>{
- switch (comp.value) {
+const tabId = computed<number>(() => {
+ switch (comp.value) {
case ComponentType.Settings:
return 1
case ComponentType.Profile:
@@ -81,10 +80,7 @@ const onTabChange = (tabid : number) =>{
</script>
<style lang="scss">
-#account-template{
- p{
- @apply text-gray-700 dark:text-gray-400;
- }
+#account-template{
.page-link{
font-size: 1.1rem;
@@ -103,13 +99,21 @@ const onTabChange = (tabid : number) =>{
}
+ .text-color-foreground{
+ @apply dark:text-white text-black;
+ }
+
+ .text-color-background{
+ @apply text-gray-500;
+ }
+
.panel-container .panel-header{
@apply flex flex-row px-2;
}
.panel-container .panel-content{
@apply bg-white dark:bg-dark-800 border-transparent dark:border-dark-500;
- @apply m-auto max-w-3xl border sm:rounded-md shadow-md sm:p-4 p-3 sm:my-3 my-2;
+ @apply m-auto max-w-3xl border sm:rounded shadow-md sm:p-4 p-3 sm:my-3 my-2;
}
.panel-container .panel-header .panel-title{
diff --git a/front-end/src/views/Account/components/profile/Profile.vue b/front-end/src/views/Account/components/profile/Profile.vue
index 0b0a6dd..0db7192 100644
--- a/front-end/src/views/Account/components/profile/Profile.vue
+++ b/front-end/src/views/Account/components/profile/Profile.vue
@@ -2,10 +2,10 @@
<div id="account-profile" class="acnt-content-container panel-container">
<div class="acnt-content profile-container panel-content">
- <div id="profile-control-container" class="flex flex-row" :modified="modified">
+ <div id="profile-control-container" class="flex flex-row" :modified="store.userProfile.modified">
<div class="m-0">
<div class="flex rounded-full w-14 h-14 bg-primary-500 dark:bg-primary-600">
- <div class="m-auto text-white dark:text-dark-400">
+ <div class="m-auto text-white dark:text-dark-500">
<fa-icon :icon="['fas', 'user']" size="2xl" />
</div>
</div>
@@ -28,7 +28,7 @@
<div>
- <p class="profile-text">
+ <p class="profile-text text-color-background">
You may set or change your profile information here. All fields are optional,
but some features may not work without some information.
</p>
@@ -36,7 +36,7 @@
<div class="locked-info">
<div class="mx-auto my-1 sm:mx-0 sm:my-2">
<span class="pr-2">Email:</span>
- <span class="">{{ data.email }}</span>
+ <span class="">{{ store.userProfile.data.email }}</span>
</div>
<div class="mx-auto my-1 sm:mx-0 sm:my-2">
<span class="pr-2">Created:</span>
@@ -62,43 +62,28 @@ import { defaultTo } from 'lodash-es'
import useVuelidate from '@vuelidate/core'
import { ref, computed, watch } from 'vue'
import { Rules, FormSchema } from './profile-schema.ts'
-import { apiCall, useMessage, useWait, useDataBuffer, useUser, useVuelidateWrapper, IUserProfile } from '@vnuge/vnlib.browser'
-
-const ACCOUNT_URL = '/account/profile'
-
-interface UserProfile extends IUserProfile{
- created : string | Date
-}
+import { apiCall, useMessage, useWait, useVuelidateWrapper, WebMessage } from '@vnuge/vnlib.browser'
+import { useStore } from '../../../../store'
const { waiting } = useWait()
-const { getProfile } = useUser()
const { onInput, clearMessage } = useMessage()
-const { data, buffer, apply, revert, modified } = useDataBuffer<UserProfile>({} as UserProfile)
+
+const store = useStore()
const editMode = ref(false)
// Create validator based on the profile buffer as a data model
-const v$ = useVuelidate(Rules, buffer, { $lazy:true, $autoDirty:false })
+const v$ = useVuelidate(Rules, store.userProfile.buffer, { $lazy:true })
// Setup the validator wrapper
const { validate } = useVuelidateWrapper(v$);
//const modified = computed(() => profile.value.Modified)
-const createdTime = computed(() => defaultTo(data.created?.toLocaleString(), ''))
-
-const loadProfileData = async () => {
- await apiCall(async () => {
- // Get the user's profile
- const profile = await getProfile<UserProfile>()
- profile.created = new Date(profile.created)
- //Apply the profile to the buffer
- apply(profile)
- })
-}
+const createdTime = computed(() => defaultTo(store.userProfile.data.created?.toLocaleString(), ''))
const revertProfile = () => {
//Revert the buffer
- revert()
+ store.userProfile.revert()
clearMessage()
editMode.value = false
}
@@ -112,32 +97,24 @@ const onSubmit = async () => {
return
}
// Init the api call
- await apiCall(async ({ axios, toaster }) => {
- // Apply the buffer to the profile
- const response = await axios.post(ACCOUNT_URL, buffer)
-
- if(!response.data.success){
- throw { response }
- }
+ await apiCall(async ({ toaster }) => {
+ const res = await store.userProfile.update();
+ const successm = (res as WebMessage<string>).getResultOrThrow();
+
//No longer in edit mode
editMode.value = false
//Show success message
toaster.general.success({
title: 'Update successful',
- text: response.data.result,
+ text: successm,
})
-
- //reload the profile data
- loadProfileData()
})
}
watch(editMode, () => v$.value.$reset())
-//Inital profile data load, dont await
-loadProfileData()
</script>
diff --git a/front-end/src/views/Account/components/settings/Fido.vue b/front-end/src/views/Account/components/settings/Fido.vue
index f319cd3..d453378 100644
--- a/front-end/src/views/Account/components/settings/Fido.vue
+++ b/front-end/src/views/Account/components/settings/Fido.vue
@@ -18,13 +18,13 @@
</button>
</div>
<div v-else>
- <button class="btn primary xs" @click.prevent="Setup">
+ <button class="btn primary xs" disabled="true" @click.prevent="Setup">
<fa-icon icon="plus" />
<span class="pl-2">Setup</span>
</button>
</div>
</div>
- <p class="p-1 pt-3 text-sm text-gray-600">
+ <p class="p-1 pt-3 text-sm text-color-background">
WebAuthN/FIDO is not yet supported, due to complexity and browser support.
</p>
</div>
diff --git a/front-end/src/views/Account/components/settings/PasswordReset.vue b/front-end/src/views/Account/components/settings/PasswordReset.vue
index f90bce8..24dced6 100644
--- a/front-end/src/views/Account/components/settings/PasswordReset.vue
+++ b/front-end/src/views/Account/components/settings/PasswordReset.vue
@@ -2,24 +2,22 @@
<div id="pwreset-settings" class="container">
<div class="panel-content">
- <h5>Password Reset</h5>
-
- <div v-if="!pwResetShow" class="py-2">
+ <div v-if="!pwResetShow" class="">
<div class="flex flex-wrap items-center justify-between">
-
- <div class="my-auto">
- Click to reset
+
+ <div class="">
+ <h5>Password Reset</h5>
</div>
<div class="flex justify-end">
- <button class="btn red xs" @click="showForm">
+ <button class="btn xs" @click="showForm">
<fa-icon icon="sync" />
<span class="pl-2">Reset Password</span>
</button>
</div>
</div>
- <p class="mt-3 text-sm">
+ <p class="mt-3 text-sm text-color-background">
You may only reset your password if you have an internal user account. If you exclusivly use an external
authentication provider (like GitHub or Discord), you will need to reset your password externally.
</p>
@@ -61,7 +59,7 @@
<script setup lang="ts">
import { isEmpty, toSafeInteger } from 'lodash-es';
-import useVuelidate from '@vuelidate/core'
+import { useVuelidate } from '@vuelidate/core'
import { required, maxLength, minLength, helpers } from '@vuelidate/validators'
import { useUser, apiCall, useMessage, useWait, useConfirm, useVuelidateWrapper } from '@vnuge/vnlib.browser'
import { computed, reactive, ref, toRefs, watch } from 'vue'
diff --git a/front-end/src/views/Account/components/settings/Pki.vue b/front-end/src/views/Account/components/settings/Pki.vue
index 1b169e2..afe606f 100644
--- a/front-end/src/views/Account/components/settings/Pki.vue
+++ b/front-end/src/views/Account/components/settings/Pki.vue
@@ -1,12 +1,12 @@
<template>
- <div id="pki-settings" v-show="pkiEnabled" class="container">
+ <div id="pki-settings" class="container">
<div class="panel-content">
<div class="flex flex-row flex-wrap justify-between">
<h5>PKI Authentication</h5>
<div class="">
- <div v-if="enabled" class="button-group">
- <button class="btn yellow xs" @click.prevent="setIsOpen(true)">
+ <div v-if="pkiEnabled" class="button-group">
+ <button class="btn xs" @click.prevent="setIsOpen(true)">
<fa-icon icon="plus" />
<span class="pl-2">Add Key</span>
</button>
@@ -23,7 +23,7 @@
</div>
</div>
- <div v-if="pubKeys && pubKeys.length > 0" class="w-full mt-4">
+ <div v-if="store.pkiPublicKeys && store.pkiPublicKeys.length > 0" class="w-full mt-4">
<table class="min-w-full text-sm divide-y-2 divide-gray-200 dark:divide-dark-500">
<thead class="text-left">
<tr>
@@ -41,7 +41,7 @@
</thead>
<tbody class="divide-y divide-gray-200 dark:divide-dark-500">
- <tr v-for="key in pubKeys">
+ <tr v-for="key in store.pkiPublicKeys">
<td class="p-2 t font-medium truncate max-w-[8rem] whitespace-nowrap dark:text-white">
{{ key.kid }}
</td>
@@ -62,11 +62,10 @@
</table>
</div>
- <p v-else class="p-1 pt-3 text-sm text-gray-600">
+ <p v-else class="p-1 pt-3 text-sm text-color-background">
PKI authentication is a method of authenticating your user account with signed messages and a shared public key. This method implementation
uses client signed Json Web Tokens to authenticate user generated outside this website as a One Time Password (OTP). This allows for you to
use your favorite hardware or software tools, to generate said OTPs to authenticate your user.
-
</p>
</div>
</div>
@@ -75,7 +74,7 @@
<div class="fixed inset-0 bg-black/30" aria-hidden="true" />
<div class="fixed inset-0 flex justify-center">
- <DialogPanel class="w-full max-w-lg p-4 m-auto mt-24 bg-white rounded dark:bg-dark-600 dark:text-gray-300">
+ <DialogPanel class="w-full max-w-lg p-4 m-auto mt-24 bg-white rounded dark:bg-dark-700 dark:text-gray-300">
<h4>Configure your authentication key</h4>
<p class="mt-2 text-sm">
Please paste your authenticator's public key as a Json Web Key (JWK) object. Your JWK must include a kid (key id) and a kty (key type) field.
@@ -85,7 +84,7 @@
</div>
<div class="flex justify-end gap-2 mt-4">
<button class="rounded btn sm primary" @click.prevent="onSubmitKeys">Submit</button>
- <button class="rounded btn sm red" @click.prevent="setIsOpen(false)">Cancel</button>
+ <button class="rounded btn sm" @click.prevent="setIsOpen(false)">Cancel</button>
</div>
</DialogPanel>
</div>
@@ -93,24 +92,19 @@
</template>
<script setup lang="ts">
-import { isEmpty, isNil } from 'lodash-es'
-import { apiCall, useConfirm, useSession, debugLog, useFormToaster, PkiApi, PkiPublicKey } from '@vnuge/vnlib.browser'
+import { includes, isEmpty } from 'lodash-es'
+import { apiCall, useConfirm, useSession, debugLog, useFormToaster, PkiPublicKey } from '@vnuge/vnlib.browser'
import { computed, ref, watch } from 'vue'
-import { asyncComputed } from '@vueuse/core'
import { Dialog, DialogPanel } from '@headlessui/vue'
+import { useStore } from '../../../../store'
+import { } from 'pinia'
-const props = defineProps<{
- pkaiApi: PkiApi
-}>()
-
+const store = useStore()
const { reveal } = useConfirm()
const { isLocalAccount } = useSession()
const { error } = useFormToaster()
-const pkiEnabled = computed(() => isLocalAccount.value && !isNil(import.meta.env.VITE_PKI_ENDPOINT) && window.crypto.subtle)
-const { enabled, refresh } = props.pkaiApi
-
-const pubKeys = asyncComputed(() => pkiEnabled.value ? apiCall(props.pkaiApi.getAllKeys) : [], [])
+const pkiEnabled = computed(() => isLocalAccount.value && includes(store.mfaEndabledMethods, "pki") && window.crypto.subtle)
const isOpen = ref(false)
const keyData = ref('')
@@ -122,7 +116,7 @@ watch(isOpen, () =>{
pemFormat.value = false
explicitCurve.value = ""
//Reload status
- refresh()
+ store.mfaRefreshMethods()
})
const setIsOpen = (value : boolean) => isOpen.value = value
@@ -140,7 +134,7 @@ const onRemoveKey = async (single: PkiPublicKey) =>{
await apiCall(async ({ toaster }) => {
//TODO: require password or some upgrade to disable
- const { success } = await props.pkaiApi.removeKey(single.kid);
+ const { success } = await store.pkiConfig.removeKey(single.kid);
if (success) {
toaster.general.success({
@@ -156,7 +150,7 @@ const onRemoveKey = async (single: PkiPublicKey) =>{
}
//Refresh the status
- props.pkaiApi.refresh();
+ store.mfaRefreshMethods()
});
}
@@ -174,7 +168,7 @@ const onDisable = async () => {
//Disable pki
//TODO: require password or some upgrade to disable
- const { success } = await props.pkaiApi.disable();
+ const { success } = await store.pkiConfig.disable();
if(success){
toaster.general.success({
@@ -190,7 +184,7 @@ const onDisable = async () => {
}
//Refresh the status
- props.pkaiApi.refresh();
+ store.mfaRefreshMethods()
});
}
@@ -232,7 +226,7 @@ const onSubmitKeys = async () =>{
//init/update the key
//TODO: require password or some upgrade to disable
- const { getResultOrThrow } = await props.pkaiApi.addOrUpdate(jwk);
+ const { getResultOrThrow } = await store.pkiConfig.addOrUpdate(jwk);
const result = getResultOrThrow();
diff --git a/front-end/src/views/Account/components/settings/Security.vue b/front-end/src/views/Account/components/settings/Security.vue
index 1f2d06d..e6075f9 100644
--- a/front-end/src/views/Account/components/settings/Security.vue
+++ b/front-end/src/views/Account/components/settings/Security.vue
@@ -12,38 +12,38 @@
<div id="account-mfa-settings" class="panel-content">
<h5>Multi Factor Authentication</h5>
- <div class="py-2 border-b-2 border-gray-200 dark:border-dark-400">
- <TotpSettings :mfa="mfaApi" />
+ <div class="py-2 border-b-2 border-gray-200 dark:border-dark-500">
+ <TotpSettings />
</div>
<div class="py-2">
<Fido :fido-enabled="fidoEnabled"/>
</div>
</div>
- <Pki :pkai-api="pkiApi" />
+ <Pki />
<div id="browser-poll-settings" class="panel-content" >
<div class="flex justify-between">
<h5>Keep me logged in</h5>
<div class="pl-1">
<Switch
- v-model="enabled"
- :class="enabled ? 'bg-primary-500 dark:bg-primary-600' : 'bg-gray-200 dark:bg-dark-400'"
+ v-model="autoHeartbeat"
+ :class="autoHeartbeat ? 'bg-primary-500 dark:bg-primary-600' : 'bg-gray-200 dark:bg-dark-500'"
class="relative inline-flex items-center h-6 rounded-full w-11"
>
<span class="sr-only">Enable auto heartbeat</span>
<span
- :class="enabled ? 'translate-x-6' : 'translate-x-1'"
+ :class="autoHeartbeat ? 'translate-x-6' : 'translate-x-1'"
class="inline-block w-4 h-4 transition transform bg-white rounded-full"
/>
</Switch>
</div>
</div>
- <p class="p-1 text-sm">
+ <p class="p-1 text-sm text-color-background">
When enabled, continuously regenerates your login credentials to keep you logged in. The longer you are logged in,
the easier session fixation attacks become. If disabled, you will need to log when your credentials have expired.
- It is recommneded that you leave this disabled <span class="text-yellow-500">Disabled</span>
+ It is recommneded that you leave this <strong>off</strong>.
</p>
</div>
@@ -52,22 +52,25 @@
</template>
<script setup lang="ts">
-import { useAutoHeartbeat, useMfaConfig, MfaMethod, usePkiConfig } from '@vnuge/vnlib.browser'
+import { MfaMethod } from '@vnuge/vnlib.browser'
import { computed } from 'vue'
import { Switch } from '@headlessui/vue'
import { includes } from 'lodash-es'
+import { storeToRefs } from 'pinia'
+import { useStore } from '../../../../store'
import Fido from './Fido.vue'
import Pki from './Pki.vue'
import TotpSettings from './TotpSettings.vue'
import PasswordReset from './PasswordReset.vue'
-const { enabled } = useAutoHeartbeat()
+const store = useStore();
+const { autoHeartbeat } = storeToRefs(store);
-const mfaApi = useMfaConfig('/account/mfa')
-const pkiApi = usePkiConfig(import.meta.env.VITE_PKI_ENDPOINT, mfaApi)
+//Load mfa methods
+store.mfaRefreshMethods();
-const fidoEnabled = computed(() => includes(mfaApi.enabledMethods.value, 'fido' as MfaMethod))
-const totpEnabled = computed(() => includes(mfaApi.enabledMethods.value, MfaMethod.TOTP))
+const fidoEnabled = computed(() => includes(store.mfaEndabledMethods, 'fido' as MfaMethod))
+const totpEnabled = computed(() => includes(store.mfaEndabledMethods, MfaMethod.TOTP))
</script>
diff --git a/front-end/src/views/Account/components/settings/Settings.vue b/front-end/src/views/Account/components/settings/Settings.vue
index cd2ab48..fb86951 100644
--- a/front-end/src/views/Account/components/settings/Settings.vue
+++ b/front-end/src/views/Account/components/settings/Settings.vue
@@ -7,7 +7,7 @@
</template>
<script setup lang="ts">
-import Security from './security.vue'
+import Security from './Security.vue'
</script>
diff --git a/front-end/src/views/Account/components/settings/TotpSettings.vue b/front-end/src/views/Account/components/settings/TotpSettings.vue
index 9760806..0fcfe31 100644
--- a/front-end/src/views/Account/components/settings/TotpSettings.vue
+++ b/front-end/src/views/Account/components/settings/TotpSettings.vue
@@ -24,13 +24,13 @@
Your secret, if your application requires it.
</p>
- <p class="flex flex-row flex-wrap justify-center p-2 bg-gray-200 border border-gray-300 dark:bg-dark-800 dark:border-dark-300">
+ <p class="flex flex-row flex-wrap justify-center p-2 bg-gray-200 border border-gray-300 dark:bg-dark-800 dark:border-dark-500">
<span v-for="code in secretSegments" :key="code" class="px-2 font-mono tracking-wider" >
{{ code }}
</span>
</p>
- <p class="py-2">
+ <p class="py-2 text-color-background">
Please enter your code from your authenticator app to continue.
</p>
@@ -58,7 +58,7 @@
<h6>TOTP Authenticator App</h6>
<div v-if="totpEnabled" class="button-group">
- <button class="btn yellow xs" @click.prevent="regenTotp">
+ <button class="btn xs" @click.prevent="regenTotp">
<fa-icon icon="sync" />
<span class="pl-2">Regenerate</span>
</button>
@@ -74,7 +74,7 @@
<span class="pl-2">Setup</span>
</button>
</div>
- <p class="p-1 pt-3 text-sm text-gray-600">
+ <p class="p-1 pt-3 text-sm text-color-background">
TOTP is a time based one time password. You can use it as a form of Multi Factor Authentication when
using another device such as a smart phone or TOTP hardware device. You can use TOTP with your smart
phone
@@ -91,21 +91,21 @@
<script setup lang="ts">
import { isNil, chunk, defaultTo, includes, map, join } from 'lodash-es'
import { TOTP } from 'otpauth'
+import { computed, ref, defineAsyncComponent } from 'vue'
import base32Encode from 'base32-encode'
-import VueQrcode from '@chenfengyuan/vue-qrcode'
-import VOtpInput from "vue3-otp-input";
-import { computed, ref } from 'vue'
import {
- useSessionUtils,
useSession,
- useUser,
useMessage,
useConfirm,
usePassConfirm,
useFormToaster,
- MfaApi,
MfaMethod
} from '@vnuge/vnlib.browser'
+import { useStore } from '../../../../store';
+import { storeToRefs } from 'pinia';
+
+const VueQrcode = defineAsyncComponent(() => import('@chenfengyuan/vue-qrcode'))
+const VOtpInput = defineAsyncComponent(() => import('vue3-otp-input'));
interface TotpConfig{
secret: string;
@@ -115,19 +115,15 @@ interface TotpConfig{
readonly period?: number;
}
-const props = defineProps<{
- mfa: MfaApi
-}>()
+const store = useStore();
+const { userName, isLocalAccount, mfaEndabledMethods } = storeToRefs(store);
-const { isLocalAccount } = useSession()
-const { KeyStore } = useSessionUtils()
-const { userName } = useUser()
+const { KeyStore } = useSession()
const { reveal } = useConfirm()
const { elevatedApiCall } = usePassConfirm()
const { onInput, setMessage } = useMessage()
-const { enabledMethods, disableMethod, initOrUpdateMethod, refreshMethods } = props.mfa;
-const totpEnabled = computed(() => includes(enabledMethods.value, MfaMethod.TOTP))
+const totpEnabled = computed(() => includes(mfaEndabledMethods.value, MfaMethod.TOTP))
const totpMessage = ref<TotpConfig>()
const showSubmitButton = ref(false)
@@ -164,7 +160,7 @@ const ProcessAddOrUpdate = async () => {
await elevatedApiCall(async ({ password }) => {
// Init or update the totp method and get the encrypted totp message
- const res = await initOrUpdateMethod<TotpConfig>(MfaMethod.TOTP, password);
+ const res = await store.mfaConfig.initOrUpdateMethod<TotpConfig>(MfaMethod.TOTP, password);
//Get the encrypted totp message
const totp = res.getResultOrThrow()
@@ -220,10 +216,10 @@ const disable = async () => {
await elevatedApiCall(async ({ password }) => {
// Disable the totp method
- const res = await disableMethod(MfaMethod.TOTP, password)
+ const res = await store.mfaConfig.disableMethod(MfaMethod.TOTP, password)
res.getResultOrThrow()
- refreshMethods()
+ store.mfaRefreshMethods()
})
}
@@ -250,7 +246,7 @@ const CloseQrWindow = () => {
totpMessage.value = undefined
//Fresh methods
- refreshMethods()
+ store.mfaRefreshMethods()
}
</script>
diff --git a/front-end/src/views/Blog/components/Content/ContentEditor.vue b/front-end/src/views/Blog/components/Content/ContentEditor.vue
index 756cec3..608cd1b 100644
--- a/front-end/src/views/Blog/components/Content/ContentEditor.vue
+++ b/front-end/src/views/Blog/components/Content/ContentEditor.vue
@@ -26,6 +26,20 @@
v-model="v$.name.$model"
:class="{'invalid':v$.name.$invalid && v$.name.$dirty}"
/>
+ <div v-if="isNewUpload"
+ id="file-drop-zone"
+ ref="newFileDropZone"
+ class="py-16 mt-3 transition-all duration-150 ease-linear border-2 border-dashed rounded cursor-pointer dark:border-dark-500"
+ :class="{'border-primary-500 dark:border-primary-500':isOverDropZone}"
+ @click.prevent="open()"
+ >
+ <div class="flex flex-col items-center justify-center">
+ <fa-icon icon="file-upload" class="text-4xl" />
+ <p class="mt-2 text-sm text-center">
+ Drop file here or click to select file
+ </p>
+ </div>
+ </div>
</div>
<div v-if="editFile?.id" class="mt-3">
<div class="p-3 py-0.5">
@@ -68,17 +82,17 @@
Content-Type: {{ editFile.content_type }}
</div>
</div>
- </div>
- <div v-if="!uploadedFile.name" class="m-auto mt-5 w-fit">
- <button class="btn" @click.prevent="open()">
- {{ editFile?.id ? 'Overwrite file' : 'Select File' }}
- </button>
+ <div class="m-auto mt-5 w-fit">
+ <button class="btn" @click.prevent="open()">
+ Overwrite file
+ </button>
+ </div>
</div>
</div>
</fieldset>
</form>
</div>
- <div class="mt-4">
+ <div v-if="!isNewUpload" class="mt-4">
<div class="mx-auto w-fit">
<button class="btn red" @click="onDelete">Delete Forever</button>
</div>
@@ -87,13 +101,13 @@
</template>
<script setup lang="ts">
-import { computed, ref } from 'vue';
-import { reactiveComputed, useFileDialog } from '@vueuse/core';
+import { computed, ref, watch } from 'vue';
+import { reactiveComputed, useFileDialog, useDropZone } from '@vueuse/core';
import { ContentMeta } from '@vnuge/cmnext-admin';
import { useConfirm, useVuelidateWrapper, useFormToaster, useWait } from '@vnuge/vnlib.browser';
import { defaultTo, first, isEmpty, round } from 'lodash-es';
import { required, helpers, maxLength } from '@vuelidate/validators'
-import useVuelidate from '@vuelidate/core';
+import { useVuelidate } from '@vuelidate/core';
import { BlogState } from '../../blog-api';
const emit = defineEmits(['close', 'submit', 'delete']);
@@ -105,11 +119,13 @@ const { reveal } = useConfirm();
const { waiting } = useWait();
const { content, channels } = props.blog;
+const newFileDropZone = ref<HTMLElement>();
const selectedId = computed(() => content.selectedId.value);
const selectedContent = computed<ContentMeta>(() => defaultTo(content.selectedItem.value, {} as ContentMeta));
const metaBuffer = reactiveComputed<ContentMeta>(() => ({ ...selectedContent.value}));
const isChannelSelected = computed(() => channels.selectedItem.value?.id?.length ?? 0 > 0);
+const isNewUpload = computed(() => selectedId.value === 'new');
const v$ = useVuelidate({
name: {
@@ -122,11 +138,15 @@ const v$ = useVuelidate({
const { validate } = useVuelidateWrapper(v$);
const file = ref<File | undefined>();
-const { files, open, reset, onChange } = useFileDialog({ accept: '*' })
+//set the file name when a file is selected
+watch(file, f => v$.value.name.$model = f?.name);
+
+const { open, reset, onChange } = useFileDialog({ accept: '*' })
//update the file buffer when a user selects a file to upload
-onChange(() => {
- file.value = first(files.value)
- v$.value.name.$model = file.value?.name;
+onChange((f) => onFileUploaded(first(f)))
+
+const { isOverDropZone } = useDropZone(newFileDropZone, {
+ onDrop: (files) => onFileUploaded(first(files))
})
const editFile = computed<ContentMeta | undefined>(() => selectedContent.value);
@@ -143,6 +163,8 @@ const getSizeinKb = (value : number | undefined) => {
return `${size} ${value > 1024 ? 'KB' : 'B'}`;
}
+const onFileUploaded = (f: File | undefined) => file.value = f
+
const onSubmit = async () => {
const { error } = useFormToaster()
diff --git a/front-end/src/views/Blog/index.vue b/front-end/src/views/Blog/index.vue
index ea35ad6..b4aa47d 100644
--- a/front-end/src/views/Blog/index.vue
+++ b/front-end/src/views/Blog/index.vue
@@ -115,16 +115,17 @@ import { AxiosProgressEvent } from 'axios';
import { TabGroup, TabList, Tab, TabPanels, TabPanel, Switch } from '@headlessui/vue'
import { first } from 'lodash-es';
import { useRoute, useRouter } from 'vue-router';
-import { usePageGuard, useUser, useTitle, useAxios } from '@vnuge/vnlib.browser';
+import { useUser, useAxios } from '@vnuge/vnlib.browser';
import { createBlogContext, useComputedChannels, useComputedPosts, useComputedContent, SortType } from '@vnuge/cmnext-admin';
import { BlogState } from './blog-api';
+import { useStore } from '../../store';
import Channels from './components/Channels.vue';
import Posts from './components/Posts.vue';
import Content from './components/Content.vue';
//Protect page
-usePageGuard();
-useTitle('CMNext Admin')
+const store = useStore()
+store.setPageTitle('Blog Admin')
if(!window.CKEDITOR){
//Load scripts
diff --git a/front-end/src/views/Login/components/Social.vue b/front-end/src/views/Login/components/Social.vue
index 5824226..2cea930 100644
--- a/front-end/src/views/Login/components/Social.vue
+++ b/front-end/src/views/Login/components/Social.vue
@@ -1,47 +1,30 @@
<template>
-
- <form class="w-full" @submit.prevent="SocalLogin('/login/social/github')">
- <button type="submit" class="btn social-button" :disabled="waiting">
- <fa-icon :icon="['fab','github']" size="xl" />
- Login with Github
- </button>
- </form>
- <form class="mt-4" @submit.prevent="SocalLogin('/login/social/discord')">
- <button type="submit" class="btn social-button" :disabled="waiting">
- <fa-icon :icon="['fab','discord']" size="xl" />
- Login with Discord
- </button>
- </form>
+ <div class="flex flex-col gap-3">
+ <div v-for="method in store.socialOauth.methods" :key="method.Id" class="">
+ <button
+ type="submit"
+ class="btn social-button"
+ :disabled="waiting"
+ @click.prevent="submitLogin(method)"
+ >
+ <fa-icon :icon="['fab', method.Id]" size="xl" />
+ Login with {{ capitalize(method.Id) }}
+ </button>
+ </div>
+ </div>
</template>
<script setup lang="ts">
-import { apiCall, useWait, useSessionUtils, WebMessage, useUser } from '@vnuge/vnlib.browser'
+import { apiCall, useWait, type OAuthMethod } from '@vnuge/vnlib.browser'
+import { capitalize } from 'lodash-es';
+import { useStore } from '../../../store';
const { waiting } = useWait()
-const { KeyStore } = useSessionUtils()
-const { prepareLogin } = useUser()
+const store = useStore()
-const SocalLogin = async (url:string) => {
- await apiCall(async ({ axios }) => {
-
- //Prepare the login claim
- const claim = await prepareLogin()
- const { data } = await axios.put<WebMessage<string>>(url, claim)
-
- const encDat = data.getResultOrThrow()
- // Decrypt the result which should be a redirect url
- const result = await KeyStore.decryptDataAsync(encDat)
- // get utf8 text
- const text = new TextDecoder('utf-8').decode(result)
- // Recover url
- const redirect = new URL(text)
- // Force https
- redirect.protocol = 'https:'
- // redirect to the url
- window.location.href = redirect.href
- })
-}
+//Invoke login wrapped in api call
+const submitLogin = (method: OAuthMethod) => apiCall(() => store.socialOauth.beginLoginFlow(method))
</script> \ No newline at end of file
diff --git a/front-end/src/views/Login/components/Totp.vue b/front-end/src/views/Login/components/Totp.vue
index 43c05d8..2ba1314 100644
--- a/front-end/src/views/Login/components/Totp.vue
+++ b/front-end/src/views/Login/components/Totp.vue
@@ -23,25 +23,40 @@
</template>
<script setup lang="ts">
-import { useMessage, useWait } from '@vnuge/vnlib.browser';
+import { toRefs, defineAsyncComponent } from 'vue';
+import { IMfaFlowContinuiation, apiCall, useMessage, useWait } from '@vnuge/vnlib.browser';
import { toSafeInteger } from 'lodash-es';
-import VOtpInput from "vue3-otp-input";
+const VOtpInput = defineAsyncComponent(() => import('vue3-otp-input'))
-const emit = defineEmits(['submit'])
+const emit = defineEmits(['clear'])
+const props = defineProps<{
+ upgrade: IMfaFlowContinuiation
+}>()
+
+const { upgrade } = toRefs(props)
const { waiting } = useWait();
const { onInput } = useMessage();
-const SubimitTotp = async (code : string) => {
+const SubimitTotp = (code : string) => {
//If a request is still pending, do nothing
if (waiting.value) {
return
}
- //Submit a mfa upgrade result
- emit('submit', {
- code: toSafeInteger(code)
+ apiCall(async ({ toaster }) => {
+ //Submit totp code
+ const res = await upgrade.value.submit({ code: toSafeInteger(code) })
+ res.getResultOrThrow()
+
+ emit('clear')
+
+ // Push a new toast message
+ toaster.general.success({
+ title: 'Success',
+ text: 'You have been logged in',
+ })
})
}
diff --git a/front-end/src/views/Login/components/UserPass.vue b/front-end/src/views/Login/components/UserPass.vue
index e218cb8..442abb1 100644
--- a/front-end/src/views/Login/components/UserPass.vue
+++ b/front-end/src/views/Login/components/UserPass.vue
@@ -1,7 +1,12 @@
<template>
<div class="">
<h3>Login</h3>
- <form id="user-pass-submit-form" method="post" action="/login" @submit.prevent="SubmitLogin">
+
+ <div v-if="mfaUpgrade?.type === MfaMethod.TOTP">
+ <Totp @clear="totpClear" :upgrade="mfaUpgrade" />
+ </div>
+
+ <form v-else id="user-pass-submit-form" method="post" action="/login" @submit.prevent="SubmitLogin">
<fieldset class="" :disabled="waiting" >
<div>
<div class="float-label">
@@ -17,7 +22,7 @@
<label for="username">Email</label>
</div>
</div>
- <div class="py-3">
+ <div class="py-3">
<div class="mb-2 float-label">
<input
id="password"
@@ -37,29 +42,45 @@
<fa-icon :class="{'animate-spin':waiting}" :icon="waiting ? 'spinner' : 'sign-in-alt'"/>
Log-in
</button>
+ <div class="flex flex-row justify-between gap-3 pt-3 pb-2 form-links">
+ <router-link to="/pwreset">
+ Forgot password
+ </router-link>
+ <router-link to="/register">
+ Register a new account
+ </router-link>
+ </div>
</form>
- <div class="flex flex-row justify-between gap-3 pt-3 pb-2 form-links">
- <router-link to="/pwreset">
- Forgot password
- </router-link>
- <router-link to="/register">
- Register a new account
- </router-link>
- </div>
</div>
</template>
<script setup lang="ts">
-import { reactive } from 'vue'
-import useVuelidate from '@vuelidate/core'
+import { ref, shallowRef, reactive, defineAsyncComponent, type Ref } from 'vue'
+import { useTimeoutFn, set } from '@vueuse/core'
+import { useVuelidate } from '@vuelidate/core'
+import { isEqual } from 'lodash-es'
import { required, maxLength, minLength, email, helpers } from '@vuelidate/validators'
-import { useMessage, useVuelidateWrapper, useWait } from '@vnuge/vnlib.browser'
-
-const emit = defineEmits(['login'])
+import {
+ useVuelidateWrapper, useMfaLogin, totpMfaProcessor, IMfaFlowContinuiation, MfaMethod,
+ apiCall, useMessage, useWait, debugLog, WebMessage
+} from '@vnuge/vnlib.browser'
+const Totp = defineAsyncComponent(() => import('./Totp.vue'))
-const { onInput } = useMessage();
+const { onInput, setMessage } = useMessage();
const { waiting } = useWait();
+//Setup mfa login with TOTP support
+const { login } = useMfaLogin([ totpMfaProcessor() ])
+
+const mfaUpgrade = shallowRef<IMfaFlowContinuiation>();
+
+const mfaTimeout = ref<number>(600 * 1000);
+const mfaTimer = useTimeoutFn(() => {
+ //Clear upgrade message
+ mfaUpgrade.value = undefined;
+ setMessage('Your TOTP request has expired')
+}, mfaTimeout, { immediate: false })
+
const vState = reactive({ username: '', password: '' })
const rules = {
@@ -84,9 +105,50 @@ const SubmitLogin = async () => {
if (!await validate()) {
return
}
+
+ // Run login in an apicall wrapper
+ await apiCall(async ({ toaster }) => {
+
+ //Attempt to login
+ const response = await login(
+ v$.value.username.$model,
+ v$.value.password.$model
+ );
+
+ debugLog('Mfa-login', response);
+
+ //See if the response is a web message
+ if(response.getResultOrThrow){
+ (response as WebMessage).getResultOrThrow();
+ }
+
+ //Try to get response as a flow continuation
+ const mfa = response as IMfaFlowContinuiation
+
+ // Response is a totp upgrade request
+ if (isEqual(mfa.type, MfaMethod.TOTP)) {
+ //Store the upgrade message
+ set(mfaUpgrade, mfa);
+ //Setup timeout timer
+ set(mfaTimeout, mfa.expires! * 1000);
+ mfaTimer.start();
+ }
+ //If login without mfa was successful
+ else if (response.success) {
+ // Push a new toast message
+ toaster.general.success({
+ title: 'Success',
+ text: 'You have been logged in',
+ })
+ }
+ })
+}
- //Emit login and pass the username and password
- emit('login', { username: v$.value.username.$model, password: v$.value.password.$model });
+const totpClear = () => {
+ //Clear timer
+ mfaTimer.stop();
+ //Clear upgrade message
+ set(mfaUpgrade, undefined);
}
</script> \ No newline at end of file
diff --git a/front-end/src/views/Login/index.vue b/front-end/src/views/Login/index.vue
index fea02d4..5d8f298 100644
--- a/front-end/src/views/Login/index.vue
+++ b/front-end/src/views/Login/index.vue
@@ -2,12 +2,8 @@
<div id="login-template" class="app-component-entry">
<div class="login-container">
- <div v-if="showTotp">
- <Totp @submit="totpSubmit" />
- </div>
-
- <div v-else-if="!loggedIn">
- <UserPass @login="submitLogin" />
+ <div v-if="!loggedIn">
+ <UserPass/>
</div>
<div v-else>
@@ -24,12 +20,12 @@
</div>
</div>
- <div v-if="!(loggedIn || showTotp)" class="w-full mt-6">
-
+ <div v-if="!loggedIn" class="w-full mt-6">
+
<Social />
<!-- pki button, forward to the pki route -->
- <div v-if="pkiEnabled" class="mt-4">
+ <div v-if="pkiEnabled" class="mt-3">
<router-link to="/login/pki">
<button type="submit" class="btn red social-button" :disabled="waiting">
<fa-icon :icon="['fa','certificate']" size="xl" />
@@ -44,50 +40,29 @@
</template>
<script setup lang="ts">
-import { computed, ref } from 'vue'
-import Totp from './components/Totp.vue'
+import { } from 'vue'
+import { apiCall, useWait } from '@vnuge/vnlib.browser'
+import { isNil } from 'lodash-es'
+import { useStore } from '../../store'
+import { storeToRefs } from 'pinia'
import UserPass from './components/UserPass.vue'
import Social from './components/Social.vue'
-import {
- useMfaLogin, totpMfaProcessor, IMfaFlowContinuiation, MfaMethod, apiCall,
- useMessage, useWait, useUser, useSession, useLastPage, useTitle, debugLog
-} from '@vnuge/vnlib.browser'
-import { useTimeoutFn } from '@vueuse/core'
-import { isNil } from 'lodash-es'
-
-useTitle('Login')
//pki enabled flag from env
-const pkiEnabled = !isNil(import.meta.env.VITE_PKI_ENDPOINT);
+const pkiEnabled = !isNil(import.meta.env.VITE_PKI_ENABLED);
-const { waiting } = useWait()
-const { setMessage } = useMessage()
-const { logout } = useUser();
-const { loggedIn } = useSession()
-
-//Setup mfa login
-const { login } = useMfaLogin([ totpMfaProcessor() ])
-
-//If logged in re-route to the last page the user
-//was on but delayed to the session has time to be set
-const { gotoLastPage } = useLastPage()
-useTimeoutFn(() => loggedIn.value ? gotoLastPage() : null, 500)
+const store = useStore();
+const { loggedIn } = storeToRefs(store)
-const mfaUpgrade = ref<IMfaFlowContinuiation>();
-const mfaTimeout = ref<number>(600 * 1000);
-const { start, stop } = useTimeoutFn(() => {
- //Clear upgrade message
- mfaUpgrade.value = undefined;
- setMessage('Your TOTP request has expired')
-}, mfaTimeout, { immediate: false })
+store.setPageTitle('Login')
-const showTotp = computed(() => mfaUpgrade.value?.type === MfaMethod.TOTP)
+const { waiting } = useWait()
const submitLogout = async () => {
//Submit logout request
await apiCall(async ({ toaster }) => {
- // Attempt to login
- await logout()
+ // Attempt to logout
+ await store.socialOauth.logout()
// Push a new toast message
toaster.general.success({
id: 'logout-success',
@@ -98,67 +73,6 @@ const submitLogout = async () => {
})
}
-const submitLogin = async ({username, password} : { username: string, password:string }) => {
- // Run login in an apicall wrapper
- await apiCall(async ({ toaster }) => {
- // Attempt to login
- const response = await login(username, password);
-
- debugLog('Mfa-login', response)
-
- if(response.success == false){
- setMessage(response.result)
- return;
- }
-
- //Try to get response as a flow continuation
- const mfa = response as IMfaFlowContinuiation
-
- // Response is a totp upgrade request
- if (mfa.type === MfaMethod.TOTP) {
-
- //Store the upgrade message
- mfaUpgrade.value = mfa;
- //Setup timeout timer
- mfaTimeout.value = mfa.expires! * 1000;
- start();
- }
- //If login without mfa was successful
- else if (response.success) {
- // Push a new toast message
- toaster.general.success({
- title: 'Success',
- text: 'You have been logged in',
- })
- }
- })
-}
-
-const totpSubmit = ({ code } : {code:number}) =>{
- apiCall(async ({ toaster }) =>{
-
- if (!mfaUpgrade.value){
- return;
- }
-
- //Submit totp code
- const res = await mfaUpgrade.value.submit({ code })
- res.getResultOrThrow()
-
- //Clear timer
- stop();
-
- //Clear upgrade message
- mfaUpgrade.value = undefined;
-
- // Push a new toast message
- toaster.general.success({
- title: 'Success',
- text: 'You have been logged in',
- })
- })
-}
-
</script>
<style lang="scss">
diff --git a/front-end/src/views/Login/pki/index.vue b/front-end/src/views/Login/pki/index.vue
index cd0113e..585942a 100644
--- a/front-end/src/views/Login/pki/index.vue
+++ b/front-end/src/views/Login/pki/index.vue
@@ -12,7 +12,7 @@
<div class="flex justify-between mt-4">
<div class="text-sm">
- <a class="link" target="_blank" href="https://github.com/VnUgE/Plugins.Essentials/tree/master/plugins/VNLib.Plugins.Essentials.Accounts">
+ <a class="link" target="_blank" href="https://www.vaughnnugent.com/resources/software/articles?tags=docs,_VNLib.Plugins.Essentials.Accounts">
Goto OTP spec
<fa-icon icon="arrow-right" class="ml-1" />
</a>
@@ -33,16 +33,17 @@
<script setup lang="ts">
import { isEmpty } from 'lodash-es';
-import { apiCall, debugLog, useMessage, usePkiAuth } from '@vnuge/vnlib.browser';
+import { apiCall, debugLog, useMessage } from '@vnuge/vnlib.browser';
import { ref } from 'vue'
import { decodeJwt } from 'jose'
import { useRouter } from 'vue-router';
-
-const otp = ref('')
+import { useStore } from '../../../store';
const { setMessage } = useMessage()
const { push } = useRouter()
-const { login } = usePkiAuth(import.meta.env.VITE_PKI_ENDPOINT)
+const store = useStore()
+
+const otp = ref('')
const submit = () =>{
@@ -56,7 +57,7 @@ const submit = () =>{
const jwt = decodeJwt(otp.value)
debugLog(jwt)
- await login(otp.value)
+ await store.pkiAuth.login(otp.value)
//Go back to login page
push({ name: 'Login' })
diff --git a/front-end/src/views/Login/social/[type].vue b/front-end/src/views/Login/social/[type].vue
index 217e89c..68e8b77 100644
--- a/front-end/src/views/Login/social/[type].vue
+++ b/front-end/src/views/Login/social/[type].vue
@@ -32,84 +32,52 @@
</template>
<script setup lang="ts">
-import { isEqual } from 'lodash-es'
-import { useRouteParams, useRouteQuery } from '@vueuse/router'
-import { useSession, useWait, useUser, useTitle, configureApiCall } from '@vnuge/vnlib.browser'
+import { defer } from 'lodash-es'
+import { set, tryOnMounted } from '@vueuse/core'
+import { useWait, configureApiCall } from '@vnuge/vnlib.browser'
import { useRouter } from 'vue-router';
import { ref } from 'vue'
-import { ITokenResponse } from '@vnuge/vnlib.browser/dist/session';
+import { storeToRefs } from 'pinia';
+import { useStore } from '../../../store';
-useTitle('Social Login')
-
-const { loggedIn } = useSession()
-const { prepareLogin } = useUser()
+const store = useStore();
+const { loggedIn } = storeToRefs(store)
const { waiting } = useWait()
-const type = useRouteParams('type')
-const result = useRouteQuery('result', '');
-const nonce = useRouteQuery('nonce', '');
const router = useRouter()
-
const message = ref('')
//Override the message handler to capture the error message and display it
const { apiCall } = configureApiCall(m => message.value = m)
-//If logged-in redirect to login page
-if (loggedIn.value) {
- router.push({ name: 'Login' })
-}
-
+//Set the page title
+store.setPageTitle('Social Login')
-const run = async () => {
- if (isEqual(result.value, 'authorized')) {
+tryOnMounted(() => defer(() => {
- let loginUrl : string = ''
+ //If logged-in redirect to login page
+ if (loggedIn.value) {
+ router.push({ name: 'Login' })
+ }
- switch (type.value) {
- case 'github':
- loginUrl = '/login/social/github';
- break;
- case 'discord':
- loginUrl = '/login/social/discord';
- break;
- default:
+ //try to complete an oauth login
+ apiCall(async ({ toaster }) => {
+ try{
+ //Complete the login
+ await store.socialOauth.completeLogin();
+
+ toaster.general.success({
+ title:'Login Successful',
+ text: 'You have successfully logged in.'
+ })
+
router.push({ name: 'Login' })
- break;
}
-
- // If nonce is set, then we can proceed with finalization
- await apiCall(async ({ axios }) => {
- const preppedLogin = await prepareLogin()
- // Send the login request
- const { data } = await axios.post<ITokenResponse>(loginUrl, { nonce: nonce.value })
-
- data.getResultOrThrow()
-
- // Finalize the login
- await preppedLogin.finalize(data)
-
- // If the login was successful, then we can redirect to the login page
- router.push({ name: 'Login' })
- })
-
- } else {
- switch (result.value) {
- case 'invalid':
- message.value = 'The request was invalid, and you could not be logged in. Please try again.'
- break
- case 'expired':
- message.value = 'The request has expired. Please try again.'
- break
- default:
- message.value = 'There was an error processing the request. Please try again.'
- break
+ catch(err: any){
+ set(message, err.message)
}
- }
-}
-
-//Run without awaiting
-run()
+ })
+}))
</script>
diff --git a/front-end/src/views/[...all].vue b/front-end/src/views/[...all].vue
index 1f439fc..37439d1 100644
--- a/front-end/src/views/[...all].vue
+++ b/front-end/src/views/[...all].vue
@@ -11,9 +11,10 @@
</template>
<script setup lang="ts">
+import { useStore } from '../store';
-import { useTitle } from '@vnuge/vnlib.browser'
-useTitle('404 - Resource not found')
+const { setPageTitle } = useStore()
+setPageTitle('404 - Resource not found')
</script>
diff --git a/front-end/src/views/index.vue b/front-end/src/views/index.vue
index 07b0a09..ff4046e 100644
--- a/front-end/src/views/index.vue
+++ b/front-end/src/views/index.vue
@@ -11,8 +11,4 @@ import { useRouter } from 'vue-router';
const { push } = useRouter();
push('/blog')
-</script>
-
-<style lang="scss">
-
-</style> \ No newline at end of file
+</script> \ No newline at end of file
diff --git a/front-end/vite.config.ts b/front-end/vite.config.ts
index c5ad69d..a298842 100644
--- a/front-end/vite.config.ts
+++ b/front-end/vite.config.ts
@@ -20,7 +20,7 @@ import { resolve } from 'path'
import { server } from './vite.config.local.ts'
//Pages setup
-import Pages from 'vite-plugin-pages'
+import VueRouter from 'unplugin-vue-router/vite'
// https://vitejs.dev/config/
export default defineConfig({
@@ -37,13 +37,20 @@ export default defineConfig({
postcss: postcss
},
plugins: [
- vue(),
//Setup the vite pages plugin
- Pages({
+ VueRouter({
extensions: ['vue'],
- dirs: 'src/views',
+ routesFolder: 'src/views',
exclude: ['**/components/**'],
+ logs: true,
+ getRouteName:(node) => {
+ const trimSlashes = /^\/|\/$/g
+ const name = node.fullPath.replace(trimSlashes, '')
+ return name
+ },
+ importMode: 'async',
}),
+ vue(),
],
resolve: {
alias: {
diff --git a/lib/admin/package-lock.json b/lib/admin/package-lock.json
index bdbfaee..db2d4b1 100644
--- a/lib/admin/package-lock.json
+++ b/lib/admin/package-lock.json
@@ -14,7 +14,7 @@
"@typescript-eslint/eslint-plugin": "^6.4.x"
},
"peerDependencies": {
- "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz",
+ "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/141493f6d9f25d4b8d78c87afea3fa773630ba14/@vnuge-vnlib.browser/release.tgz",
"@vueuse/core": "^10.x",
"@vueuse/router": "^10.x",
"axios": "^1.x",
@@ -34,9 +34,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -52,9 +52,9 @@
}
},
"node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
+ "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
"peer": true,
"bin": {
"parser": "bin/babel-parser.js"
@@ -64,12 +64,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -100,9 +100,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"peer": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -123,9 +123,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
+ "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
"peer": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -215,43 +215,43 @@
"dev": true
},
"node_modules/@types/lodash": {
- "version": "4.14.201",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz",
- "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==",
+ "version": "4.14.202",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
+ "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
"dev": true
},
"node_modules/@types/lodash-es": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.11.tgz",
- "integrity": "sha512-eCw8FYAWHt2DDl77s+AMLLzPn310LKohruumpucZI4oOFJkIgnlaJcy23OKMJxx4r9PeTF13Gv6w+jqjWQaYUg==",
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"dev": true,
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/semver": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
- "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true
},
"node_modules/@types/web-bluetooth": {
- "version": "0.0.18",
- "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.18.tgz",
- "integrity": "sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==",
+ "version": "0.0.20",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz",
+ "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==",
"peer": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz",
- "integrity": "sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz",
+ "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.10.0",
- "@typescript-eslint/type-utils": "6.10.0",
- "@typescript-eslint/utils": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0",
+ "@typescript-eslint/scope-manager": "6.14.0",
+ "@typescript-eslint/type-utils": "6.14.0",
+ "@typescript-eslint/utils": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.2.4",
@@ -277,16 +277,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz",
- "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz",
+ "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==",
"dev": true,
"peer": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "6.10.0",
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/typescript-estree": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0",
+ "@typescript-eslint/scope-manager": "6.14.0",
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/typescript-estree": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4"
},
"engines": {
@@ -306,13 +306,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz",
- "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz",
+ "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0"
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -323,13 +323,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz",
- "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz",
+ "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "6.10.0",
- "@typescript-eslint/utils": "6.10.0",
+ "@typescript-eslint/typescript-estree": "6.14.0",
+ "@typescript-eslint/utils": "6.14.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
@@ -350,9 +350,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz",
- "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz",
+ "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -363,13 +363,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz",
- "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz",
+ "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0",
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -390,17 +390,17 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz",
- "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz",
+ "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.10.0",
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/typescript-estree": "6.10.0",
+ "@typescript-eslint/scope-manager": "6.14.0",
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/typescript-estree": "6.14.0",
"semver": "^7.5.4"
},
"engines": {
@@ -415,12 +415,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz",
- "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz",
+ "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.10.0",
+ "@typescript-eslint/types": "6.14.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -438,9 +438,9 @@
"peer": true
},
"node_modules/@vnuge/vnlib.browser": {
- "version": "0.1.12",
- "resolved": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz",
- "integrity": "sha512-GsHtxMErx8IRBtYSvhO0LBdpmqo8barDwXJFeOEDZNnwnmZ4XGUa+Ab+w92JhOwnZDpBG1mW5k6l2NEmxkVuXw==",
+ "version": "0.1.13",
+ "resolved": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/141493f6d9f25d4b8d78c87afea3fa773630ba14/@vnuge-vnlib.browser/release.tgz",
+ "integrity": "sha512-XEVJxIhhC0ud8nSs6IwF7hoG2nvbhO6Jun+2rba3WQvOpWTlTEZEMV1NrgZkzi+/jupJnlVwBPgv85RVPGtA6w==",
"license": "MIT",
"peer": true,
"peerDependencies": {
@@ -455,53 +455,53 @@
}
},
"node_modules/@vue/compiler-core": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.8.tgz",
- "integrity": "sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.11.tgz",
+ "integrity": "sha512-h97/TGWBilnLuRaj58sxNrsUU66fwdRKLOLQ9N/5iNDfp+DZhYH9Obhe0bXxhedl8fjAgpRANpiZfbgWyruQ0w==",
"peer": true,
"dependencies": {
- "@babel/parser": "^7.23.0",
- "@vue/shared": "3.3.8",
+ "@babel/parser": "^7.23.5",
+ "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-dom": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.8.tgz",
- "integrity": "sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.11.tgz",
+ "integrity": "sha512-zoAiUIqSKqAJ81WhfPXYmFGwDRuO+loqLxvXmfUdR5fOitPoUiIeFI9cTTyv9MU5O1+ZZglJVTusWzy+wfk5hw==",
"peer": true,
"dependencies": {
- "@vue/compiler-core": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-core": "3.3.11",
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/compiler-sfc": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.8.tgz",
- "integrity": "sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.11.tgz",
+ "integrity": "sha512-U4iqPlHO0KQeK1mrsxCN0vZzw43/lL8POxgpzcJweopmqtoYy9nljJzWDIQS3EfjiYhfdtdk9Gtgz7MRXnz3GA==",
"peer": true,
"dependencies": {
- "@babel/parser": "^7.23.0",
- "@vue/compiler-core": "3.3.8",
- "@vue/compiler-dom": "3.3.8",
- "@vue/compiler-ssr": "3.3.8",
- "@vue/reactivity-transform": "3.3.8",
- "@vue/shared": "3.3.8",
+ "@babel/parser": "^7.23.5",
+ "@vue/compiler-core": "3.3.11",
+ "@vue/compiler-dom": "3.3.11",
+ "@vue/compiler-ssr": "3.3.11",
+ "@vue/reactivity-transform": "3.3.11",
+ "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5",
- "postcss": "^8.4.31",
+ "postcss": "^8.4.32",
"source-map-js": "^1.0.2"
}
},
"node_modules/@vue/compiler-ssr": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.8.tgz",
- "integrity": "sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.11.tgz",
+ "integrity": "sha512-Zd66ZwMvndxRTgVPdo+muV4Rv9n9DwQ4SSgWWKWkPFebHQfVYRrVjeygmmDmPewsHyznCNvJ2P2d6iOOhdv8Qg==",
"peer": true,
"dependencies": {
- "@vue/compiler-dom": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-dom": "3.3.11",
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/devtools-api": {
@@ -511,76 +511,76 @@
"peer": true
},
"node_modules/@vue/reactivity": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.8.tgz",
- "integrity": "sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.11.tgz",
+ "integrity": "sha512-D5tcw091f0nuu+hXq5XANofD0OXnBmaRqMYl5B3fCR+mX+cXJIGNw/VNawBqkjLNWETrFW0i+xH9NvDbTPVh7g==",
"peer": true,
"dependencies": {
- "@vue/shared": "3.3.8"
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/reactivity-transform": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.8.tgz",
- "integrity": "sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.11.tgz",
+ "integrity": "sha512-fPGjH0wqJo68A0wQ1k158utDq/cRyZNlFoxGwNScE28aUFOKFEnCBsvyD8jHn+0kd0UKVpuGuaZEQ6r9FJRqCg==",
"peer": true,
"dependencies": {
- "@babel/parser": "^7.23.0",
- "@vue/compiler-core": "3.3.8",
- "@vue/shared": "3.3.8",
+ "@babel/parser": "^7.23.5",
+ "@vue/compiler-core": "3.3.11",
+ "@vue/shared": "3.3.11",
"estree-walker": "^2.0.2",
"magic-string": "^0.30.5"
}
},
"node_modules/@vue/runtime-core": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.8.tgz",
- "integrity": "sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.11.tgz",
+ "integrity": "sha512-g9ztHGwEbS5RyWaOpXuyIVFTschclnwhqEbdy5AwGhYOgc7m/q3NFwr50MirZwTTzX55JY8pSkeib9BX04NIpw==",
"peer": true,
"dependencies": {
- "@vue/reactivity": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/reactivity": "3.3.11",
+ "@vue/shared": "3.3.11"
}
},
"node_modules/@vue/runtime-dom": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.8.tgz",
- "integrity": "sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.11.tgz",
+ "integrity": "sha512-OlhtV1PVpbgk+I2zl+Y5rQtDNcCDs12rsRg71XwaA2/Rbllw6mBLMi57VOn8G0AjOJ4Mdb4k56V37+g8ukShpQ==",
"peer": true,
"dependencies": {
- "@vue/runtime-core": "3.3.8",
- "@vue/shared": "3.3.8",
+ "@vue/runtime-core": "3.3.11",
+ "@vue/shared": "3.3.11",
"csstype": "^3.1.2"
}
},
"node_modules/@vue/server-renderer": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.8.tgz",
- "integrity": "sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.11.tgz",
+ "integrity": "sha512-AIWk0VwwxCAm4wqtJyxBylRTXSy1wCLOKbWxHaHiu14wjsNYtiRCSgVuqEPVuDpErOlRdNnuRgipQfXRLjLN5A==",
"peer": true,
"dependencies": {
- "@vue/compiler-ssr": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-ssr": "3.3.11",
+ "@vue/shared": "3.3.11"
},
"peerDependencies": {
- "vue": "3.3.8"
+ "vue": "3.3.11"
}
},
"node_modules/@vue/shared": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.8.tgz",
- "integrity": "sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.11.tgz",
+ "integrity": "sha512-u2G8ZQ9IhMWTMXaWqZycnK4UthG1fA238CD+DP4Dm4WJi5hdUKKLg0RMRaRpDPNMdkTwIDkp7WtD0Rd9BH9fLw==",
"peer": true
},
"node_modules/@vueuse/core": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.5.0.tgz",
- "integrity": "sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.7.0.tgz",
+ "integrity": "sha512-4EUDESCHtwu44ZWK3Gc/hZUVhVo/ysvdtwocB5vcauSV4B7NiGY5972WnsojB3vRNdxvAt7kzJWE2h9h7C9d5w==",
"peer": true,
"dependencies": {
- "@types/web-bluetooth": "^0.0.18",
- "@vueuse/metadata": "10.5.0",
- "@vueuse/shared": "10.5.0",
+ "@types/web-bluetooth": "^0.0.20",
+ "@vueuse/metadata": "10.7.0",
+ "@vueuse/shared": "10.7.0",
"vue-demi": ">=0.14.6"
},
"funding": {
@@ -614,21 +614,21 @@
}
},
"node_modules/@vueuse/metadata": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.5.0.tgz",
- "integrity": "sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.7.0.tgz",
+ "integrity": "sha512-GlaH7tKP2iBCZ3bHNZ6b0cl9g0CJK8lttkBNUX156gWvNYhTKEtbweWLm9rxCPIiwzYcr/5xML6T8ZUEt+DkvA==",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/antfu"
}
},
"node_modules/@vueuse/router": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/router/-/router-10.5.0.tgz",
- "integrity": "sha512-KboRSnSTaRBvKiwhCJ9RJHidaUMy5+5RyAwq46IPovVtKm9nIUfV0/F8dPwYx36rxAWn9iNWZUbKfu4cGW3XuA==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/router/-/router-10.7.0.tgz",
+ "integrity": "sha512-8NQ12V3dtiIEKyd32RzzXLOqU+NC5/9cf7kv5cGOQzJB+Ne8j+1VmRz4ciOhOyHuiBJSfjwSqKDTzvsczZUBlQ==",
"peer": true,
"dependencies": {
- "@vueuse/shared": "10.5.0",
+ "@vueuse/shared": "10.7.0",
"vue-demi": ">=0.14.6"
},
"funding": {
@@ -665,9 +665,9 @@
}
},
"node_modules/@vueuse/shared": {
- "version": "10.5.0",
- "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.5.0.tgz",
- "integrity": "sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==",
+ "version": "10.7.0",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.7.0.tgz",
+ "integrity": "sha512-kc00uV6CiaTdc3i1CDC4a3lBxzaBE9AgYNtFN87B5OOscqeWElj/uza8qVDmk7/U8JbqoONLbtqiLJ5LGRuqlw==",
"peer": true,
"dependencies": {
"vue-demi": ">=0.14.6"
@@ -785,9 +785,9 @@
"peer": true
},
"node_modules/axios": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.1.tgz",
- "integrity": "sha512-vfBmhDpKafglh0EldBEbVuoe7DyAavGSLWhuSm5ZSEKQnHhBf0xAAwybbNH1IkrJNGnS/VG4I5yxig1pCEXE4g==",
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz",
+ "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==",
"peer": true,
"dependencies": {
"follow-redirects": "^1.15.0",
@@ -908,9 +908,9 @@
}
},
"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==",
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
"peer": true
},
"node_modules/debug": {
@@ -981,15 +981,15 @@
}
},
"node_modules/eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
+ "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
"peer": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.55.0",
"@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
@@ -1222,9 +1222,9 @@
}
},
"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==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"peer": true,
"dependencies": {
"flatted": "^3.2.9",
@@ -1232,7 +1232,7 @@
"rimraf": "^3.0.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
@@ -1314,9 +1314,9 @@
}
},
"node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"peer": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -1363,9 +1363,9 @@
}
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"engines": {
"node": ">= 4"
}
@@ -1455,9 +1455,9 @@
"peer": true
},
"node_modules/jose": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/jose/-/jose-5.1.0.tgz",
- "integrity": "sha512-H+RVqxA6apaJ0rcQYupKYhos7uosAiF42gUcWZiwhICWMphDULFj/CRr1R0tV/JCv9DEeJaSyYYpc9luHHNT4g==",
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/jose/-/jose-5.1.3.tgz",
+ "integrity": "sha512-GPExOkcMsCLBTi1YetY2LmkoY559fss0+0KVa6kOfb2YFe84nAM7Nm/XzuZozah4iHgmBGrCOHL5/cy670SBRw==",
"peer": true,
"funding": {
"url": "https://github.com/sponsors/panva"
@@ -1772,9 +1772,9 @@
}
},
"node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
+ "version": "8.4.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz",
+ "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==",
"funding": [
{
"type": "opencollective",
@@ -1791,7 +1791,7 @@
],
"peer": true,
"dependencies": {
- "nanoid": "^3.3.6",
+ "nanoid": "^3.3.7",
"picocolors": "^1.0.0",
"source-map-js": "^1.0.2"
},
@@ -2051,9 +2051,9 @@
}
},
"node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"devOptional": true,
"peer": true,
"bin": {
@@ -2084,16 +2084,16 @@
}
},
"node_modules/vue": {
- "version": "3.3.8",
- "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.8.tgz",
- "integrity": "sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==",
+ "version": "3.3.11",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.11.tgz",
+ "integrity": "sha512-d4oBctG92CRO1cQfVBZp6WJAs0n8AK4Xf5fNjQCBeKCvMI1efGQ5E3Alt1slFJS9fZuPcFoiAiqFvQlv1X7t/w==",
"peer": true,
"dependencies": {
- "@vue/compiler-dom": "3.3.8",
- "@vue/compiler-sfc": "3.3.8",
- "@vue/runtime-dom": "3.3.8",
- "@vue/server-renderer": "3.3.8",
- "@vue/shared": "3.3.8"
+ "@vue/compiler-dom": "3.3.11",
+ "@vue/compiler-sfc": "3.3.11",
+ "@vue/runtime-dom": "3.3.11",
+ "@vue/server-renderer": "3.3.11",
+ "@vue/shared": "3.3.11"
},
"peerDependencies": {
"typescript": "*"
diff --git a/lib/admin/package.json b/lib/admin/package.json
index dc39549..ebe5446 100644
--- a/lib/admin/package.json
+++ b/lib/admin/package.json
@@ -34,7 +34,7 @@
"axios": "^1.x",
"jose": "^5.1.x",
"universal-cookie": "^6.x",
- "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/52f636ef74e6f9638e9df3a64147484c7b0b85f0/@vnuge-vnlib.browser/release.tgz"
+ "@vnuge/vnlib.browser": "https://www.vaughnnugent.com/public/resources/software/builds/vnlib.browser/0b1acb55ae395723772251318254ba131e987107/@vnuge-vnlib.browser/release.tgz"
},
"eslintConfig": {
diff --git a/lib/client/package-lock.json b/lib/client/package-lock.json
index 2bfc158..7ebdf24 100644
--- a/lib/client/package-lock.json
+++ b/lib/client/package-lock.json
@@ -28,9 +28,9 @@
}
},
"node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
+ "version": "7.23.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
+ "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
"dev": true,
"engines": {
"node": ">=6.9.0"
@@ -46,12 +46,12 @@
}
},
"node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
+ "version": "7.23.6",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
+ "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
"dev": true,
"dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
+ "@babel/helper-string-parser": "^7.23.4",
"@babel/helper-validator-identifier": "^7.22.20",
"to-fast-properties": "^2.0.0"
},
@@ -84,9 +84,9 @@
}
},
"node_modules/@eslint/eslintrc": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.3.tgz",
- "integrity": "sha512-yZzuIG+jnVu6hNSzFEN07e8BxF3uAzYtQb6uDkaYZLo6oYZDCq454c5kB8zxnzfCYyP4MIuyBn10L0DqwujTmA==",
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz",
+ "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==",
"dev": true,
"dependencies": {
"ajv": "^6.12.4",
@@ -107,9 +107,9 @@
}
},
"node_modules/@eslint/js": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.53.0.tgz",
- "integrity": "sha512-Kn7K8dx/5U6+cT1yEhpX1w4PCSg0M+XyRILPgvwcEBjerFWCwQj5sbr3/VmxqV0JGHCBCzyd6LxypEuehypY1w==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz",
+ "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==",
"dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
@@ -190,37 +190,37 @@
"dev": true
},
"node_modules/@types/lodash": {
- "version": "4.14.201",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.201.tgz",
- "integrity": "sha512-y9euML0cim1JrykNxADLfaG0FgD1g/yTHwUs/Jg9ZIU7WKj2/4IW9Lbb1WZbvck78W/lfGXFfe+u2EGfIJXdLQ==",
+ "version": "4.14.202",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.202.tgz",
+ "integrity": "sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==",
"dev": true
},
"node_modules/@types/lodash-es": {
- "version": "4.17.11",
- "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.11.tgz",
- "integrity": "sha512-eCw8FYAWHt2DDl77s+AMLLzPn310LKohruumpucZI4oOFJkIgnlaJcy23OKMJxx4r9PeTF13Gv6w+jqjWQaYUg==",
+ "version": "4.17.12",
+ "resolved": "https://registry.npmjs.org/@types/lodash-es/-/lodash-es-4.17.12.tgz",
+ "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==",
"dev": true,
"dependencies": {
"@types/lodash": "*"
}
},
"node_modules/@types/semver": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.5.tgz",
- "integrity": "sha512-+d+WYC1BxJ6yVOgUgzK8gWvp5qF8ssV5r4nsDcZWKRWcDQLQ619tvWAxJQYGgBrO1MnLJC7a5GtiYsAoQ47dJg==",
+ "version": "7.5.6",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
+ "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
"dev": true
},
"node_modules/@typescript-eslint/eslint-plugin": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.10.0.tgz",
- "integrity": "sha512-uoLj4g2OTL8rfUQVx2AFO1hp/zja1wABJq77P6IclQs6I/m9GLrm7jCdgzZkvWdDCQf1uEvoa8s8CupsgWQgVg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz",
+ "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==",
"dev": true,
"dependencies": {
"@eslint-community/regexpp": "^4.5.1",
- "@typescript-eslint/scope-manager": "6.10.0",
- "@typescript-eslint/type-utils": "6.10.0",
- "@typescript-eslint/utils": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0",
+ "@typescript-eslint/scope-manager": "6.14.0",
+ "@typescript-eslint/type-utils": "6.14.0",
+ "@typescript-eslint/utils": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4",
"graphemer": "^1.4.0",
"ignore": "^5.2.4",
@@ -246,16 +246,16 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.10.0.tgz",
- "integrity": "sha512-+sZwIj+s+io9ozSxIWbNB5873OSdfeBEH/FR0re14WLI6BaKuSOnnwCJ2foUiu8uXf4dRp1UqHP0vrZ1zXGrog==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz",
+ "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==",
"dev": true,
"peer": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "6.10.0",
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/typescript-estree": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0",
+ "@typescript-eslint/scope-manager": "6.14.0",
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/typescript-estree": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4"
},
"engines": {
@@ -275,13 +275,13 @@
}
},
"node_modules/@typescript-eslint/scope-manager": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.10.0.tgz",
- "integrity": "sha512-TN/plV7dzqqC2iPNf1KrxozDgZs53Gfgg5ZHyw8erd6jd5Ta/JIEcdCheXFt9b1NYb93a1wmIIVW/2gLkombDg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz",
+ "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0"
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0"
},
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -292,13 +292,13 @@
}
},
"node_modules/@typescript-eslint/type-utils": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.10.0.tgz",
- "integrity": "sha512-wYpPs3hgTFblMYwbYWPT3eZtaDOjbLyIYuqpwuLBBqhLiuvJ+9sEp2gNRJEtR5N/c9G1uTtQQL5AhV0fEPJYcg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz",
+ "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/typescript-estree": "6.10.0",
- "@typescript-eslint/utils": "6.10.0",
+ "@typescript-eslint/typescript-estree": "6.14.0",
+ "@typescript-eslint/utils": "6.14.0",
"debug": "^4.3.4",
"ts-api-utils": "^1.0.1"
},
@@ -319,9 +319,9 @@
}
},
"node_modules/@typescript-eslint/types": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.10.0.tgz",
- "integrity": "sha512-36Fq1PWh9dusgo3vH7qmQAj5/AZqARky1Wi6WpINxB6SkQdY5vQoT2/7rW7uBIsPDcvvGCLi4r10p0OJ7ITAeg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz",
+ "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==",
"dev": true,
"engines": {
"node": "^16.0.0 || >=18.0.0"
@@ -332,13 +332,13 @@
}
},
"node_modules/@typescript-eslint/typescript-estree": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.10.0.tgz",
- "integrity": "sha512-ek0Eyuy6P15LJVeghbWhSrBCj/vJpPXXR+EpaRZqou7achUWL8IdYnMSC5WHAeTWswYQuP2hAZgij/bC9fanBg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz",
+ "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/visitor-keys": "6.10.0",
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/visitor-keys": "6.14.0",
"debug": "^4.3.4",
"globby": "^11.1.0",
"is-glob": "^4.0.3",
@@ -359,17 +359,17 @@
}
},
"node_modules/@typescript-eslint/utils": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.10.0.tgz",
- "integrity": "sha512-v+pJ1/RcVyRc0o4wAGux9x42RHmAjIGzPRo538Z8M1tVx6HOnoQBCX/NoadHQlZeC+QO2yr4nNSFWOoraZCAyg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz",
+ "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.4.0",
"@types/json-schema": "^7.0.12",
"@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.10.0",
- "@typescript-eslint/types": "6.10.0",
- "@typescript-eslint/typescript-estree": "6.10.0",
+ "@typescript-eslint/scope-manager": "6.14.0",
+ "@typescript-eslint/types": "6.14.0",
+ "@typescript-eslint/typescript-estree": "6.14.0",
"semver": "^7.5.4"
},
"engines": {
@@ -384,12 +384,12 @@
}
},
"node_modules/@typescript-eslint/visitor-keys": {
- "version": "6.10.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.10.0.tgz",
- "integrity": "sha512-xMGluxQIEtOM7bqFCo+rCMh5fqI+ZxV5RUUOa29iVPz1OgCZrtc7rFnz5cLUazlkPKYqX+75iuDq7m0HQ48nCg==",
+ "version": "6.14.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz",
+ "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==",
"dev": true,
"dependencies": {
- "@typescript-eslint/types": "6.10.0",
+ "@typescript-eslint/types": "6.14.0",
"eslint-visitor-keys": "^3.4.1"
},
"engines": {
@@ -633,15 +633,15 @@
}
},
"node_modules/eslint": {
- "version": "8.53.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.53.0.tgz",
- "integrity": "sha512-N4VuiPjXDUa4xVeV/GC/RV3hQW9Nw+Y463lkWaKKXKYMvmRiRDAtfpuPFLN+E1/6ZhyR8J2ig+eVREnYgUsiag==",
+ "version": "8.55.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz",
+ "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==",
"dev": true,
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.6.1",
- "@eslint/eslintrc": "^2.1.3",
- "@eslint/js": "8.53.0",
+ "@eslint/eslintrc": "^2.1.4",
+ "@eslint/js": "8.55.0",
"@humanwhocodes/config-array": "^0.11.13",
"@humanwhocodes/module-importer": "^1.0.1",
"@nodelib/fs.walk": "^1.2.8",
@@ -870,9 +870,9 @@
}
},
"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==",
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
+ "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
"dependencies": {
"flatted": "^3.2.9",
@@ -880,7 +880,7 @@
"rimraf": "^3.0.2"
},
"engines": {
- "node": ">=12.0.0"
+ "node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flatted": {
@@ -928,9 +928,9 @@
}
},
"node_modules/globals": {
- "version": "13.23.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz",
- "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==",
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
"dev": true,
"dependencies": {
"type-fest": "^0.20.2"
@@ -978,9 +978,9 @@
}
},
"node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
+ "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
"dev": true,
"engines": {
"node": ">= 4"
@@ -1565,9 +1565,9 @@
}
},
"node_modules/typescript": {
- "version": "5.2.2",
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
- "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==",
+ "version": "5.3.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
+ "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
"dev": true,
"peer": true,
"bin": {