This is an automated email from the ASF dual-hosted git repository.

nicholasjiang pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/incubator-paimon-webui.git


The following commit(s) were added to refs/heads/main by this push:
     new 58d4053  [Feat] Added themes, languages and login page. (#39)
58d4053 is described below

commit 58d405359198de79a7df90f4c72790df9d085d99
Author: songjianet <[email protected]>
AuthorDate: Wed Sep 13 21:25:03 2023 +0800

    [Feat] Added themes, languages and login page. (#39)
---
 paimon-web-ui-new/package.json                     |   22 +-
 paimon-web-ui-new/pnpm-lock.yaml                   | 1085 +++++++++++---------
 paimon-web-ui-new/postcss.config.js                |    5 +-
 paimon-web-ui-new/src/App.tsx                      |   29 +-
 .../src/{assets/tailMain.css => api/index.ts}      |    5 +-
 .../api/models/login.ts}                           |   21 +-
 paimon-web-ui-new/src/api/request.ts               |  107 ++
 .../src/{assets/tailMain.css => api/types.ts}      |    9 +-
 paimon-web-ui-new/src/assets/logo.svg              |   16 +
 .../composables/locales.ts}                        |   17 +-
 .../{postcss.config.js => src/locales/en/index.ts} |    9 +-
 .../tailMain.css => locales/en/modules/login.ts}   |   13 +-
 .../src/{App.tsx => locales/index.ts}              |   19 +-
 .../{postcss.config.js => src/locales/zh/index.ts} |    9 +-
 .../tailMain.css => locales/zh/modules/login.ts}   |   13 +-
 paimon-web-ui-new/src/main.ts                      |    6 +-
 paimon-web-ui-new/src/router/index.ts              |    5 +
 .../src/{App.tsx => store/config/index.ts}         |   30 +-
 paimon-web-ui-new/src/{App.tsx => themes/index.ts} |   17 +-
 paimon-web-ui-new/src/themes/modules/dark.ts       |   73 ++
 .../src/{App.tsx => themes/modules/light.ts}       |   27 +-
 .../src/{App.tsx => views/login/index.module.scss} |   22 +-
 paimon-web-ui-new/src/views/login/index.tsx        |  117 +++
 .../{router/index.ts => views/login/use-form.ts}   |   46 +-
 paimon-web-ui-new/tsconfig.json                    |    2 +-
 paimon-web-ui-new/vite.config.ts                   |   25 +-
 pom.xml                                            |    1 +
 27 files changed, 1170 insertions(+), 580 deletions(-)

diff --git a/paimon-web-ui-new/package.json b/paimon-web-ui-new/package.json
index fb43873..29e4422 100644
--- a/paimon-web-ui-new/package.json
+++ b/paimon-web-ui-new/package.json
@@ -12,34 +12,36 @@
     "format": "prettier --write src/"
   },
   "dependencies": {
+    "dart-sass": "^1.25.0",
     "pinia": "^2.1.6",
     "pinia-plugin-persistedstate": "^3.2.0",
+    "sass": "^1.66.1",
+    "sass-loader": "^13.3.2",
     "vue": "^3.3.4",
+    "vue-i18n": "^9.4.0",
     "vue-router": "^4.2.4"
   },
   "devDependencies": {
-    "@rushstack/eslint-patch": "^1.3.2",
-    "@tsconfig/node18": "^18.2.0",
-    "@types/node": "^18.17.5",
-    "@types/tailwindcss": "^3.1.0",
+    "@rushstack/eslint-patch": "^1.3.3",
+    "@tsconfig/node18": "^18.2.2",
+    "@types/node": "^18.17.15",
     "@varlet/axle": "^0.1.2",
-    "@vitejs/plugin-vue": "^4.3.1",
+    "@vitejs/plugin-vue": "^4.3.4",
     "@vitejs/plugin-vue-jsx": "^3.0.2",
     "@vue/eslint-config-prettier": "^8.0.0",
     "@vue/eslint-config-typescript": "^11.0.3",
     "@vue/tsconfig": "^0.4.0",
     "autoprefixer": "^10.4.15",
-    "eslint": "^8.46.0",
-    "eslint-plugin-vue": "^9.16.1",
+    "eslint": "^8.49.0",
+    "eslint-plugin-vue": "^9.17.0",
     "naive-ui": "^2.34.4",
     "npm-run-all": "^4.1.5",
     "postcss": "^8.4.29",
-    "prettier": "^3.0.0",
-    "tailwindcss": "^3.3.3",
+    "prettier": "^3.0.3",
     "typescript": "~5.1.6",
     "unplugin-auto-import": "^0.16.6",
     "unplugin-vue-components": "^0.25.2",
     "vite": "^4.4.9",
-    "vue-tsc": "^1.8.8"
+    "vue-tsc": "^1.8.11"
   }
 }
diff --git a/paimon-web-ui-new/pnpm-lock.yaml b/paimon-web-ui-new/pnpm-lock.yaml
index d1abe6f..0ed4a8c 100644
--- a/paimon-web-ui-new/pnpm-lock.yaml
+++ b/paimon-web-ui-new/pnpm-lock.yaml
@@ -20,47 +20,56 @@
 lockfileVersion: '6.0'
 
 dependencies:
+  dart-sass:
+    specifier: ^1.25.0
+    version: 1.25.0
   pinia:
     specifier: ^2.1.6
     version: 2.1.6([email protected])([email protected])
   pinia-plugin-persistedstate:
     specifier: ^3.2.0
     version: 3.2.0([email protected])
+  sass:
+    specifier: ^1.66.1
+    version: 1.66.1
+  sass-loader:
+    specifier: ^13.3.2
+    version: 13.3.2([email protected])([email protected])
   vue:
     specifier: ^3.3.4
     version: 3.3.4
+  vue-i18n:
+    specifier: ^9.4.0
+    version: 9.4.0([email protected])
   vue-router:
     specifier: ^4.2.4
     version: 4.2.4([email protected])
 
 devDependencies:
   '@rushstack/eslint-patch':
-    specifier: ^1.3.2
-    version: 1.3.2
+    specifier: ^1.3.3
+    version: 1.3.3
   '@tsconfig/node18':
-    specifier: ^18.2.0
-    version: 18.2.0
+    specifier: ^18.2.2
+    version: 18.2.2
   '@types/node':
-    specifier: ^18.17.5
-    version: 18.17.5
-  '@types/tailwindcss':
-    specifier: ^3.1.0
-    version: 3.1.0
+    specifier: ^18.17.15
+    version: 18.17.15
   '@varlet/axle':
     specifier: ^0.1.2
     version: 0.1.2
   '@vitejs/plugin-vue':
-    specifier: ^4.3.1
-    version: 4.3.1([email protected])([email protected])
+    specifier: ^4.3.4
+    version: 4.3.4([email protected])([email protected])
   '@vitejs/plugin-vue-jsx':
     specifier: ^3.0.2
     version: 3.0.2([email protected])([email protected])
   '@vue/eslint-config-prettier':
     specifier: ^8.0.0
-    version: 8.0.0([email protected])([email protected])
+    version: 8.0.0([email protected])([email protected])
   '@vue/eslint-config-typescript':
     specifier: ^11.0.3
-    version: 11.0.3([email protected])([email protected])([email protected])
+    version: 11.0.3([email protected])([email protected])([email protected])
   '@vue/tsconfig':
     specifier: ^0.4.0
     version: 0.4.0
@@ -68,29 +77,23 @@ devDependencies:
     specifier: ^10.4.15
     version: 10.4.15([email protected])
   eslint:
-    specifier: ^8.46.0
-    version: 8.46.0
+    specifier: ^8.49.0
+    version: 8.49.0
   eslint-plugin-vue:
-    specifier: ^9.16.1
-    version: 9.16.1([email protected])
+    specifier: ^9.17.0
+    version: 9.17.0([email protected])
   naive-ui:
     specifier: ^2.34.4
     version: 2.34.4([email protected])
   npm-run-all:
     specifier: ^4.1.5
     version: 4.1.5
-  pinia-persistedstate-plugin:
-    specifier: ^0.1.0
-    version: 0.1.0([email protected])([email protected])
   postcss:
     specifier: ^8.4.29
     version: 8.4.29
   prettier:
-    specifier: ^3.0.0
-    version: 3.0.0
-  tailwindcss:
-    specifier: ^3.3.3
-    version: 3.3.3
+    specifier: ^3.0.3
+    version: 3.0.3
   typescript:
     specifier: ~5.1.6
     version: 5.1.6
@@ -102,10 +105,10 @@ devDependencies:
     version: 0.25.2([email protected])
   vite:
     specifier: ^4.4.9
-    version: 4.4.9(@types/[email protected])
+    version: 4.4.9(@types/[email protected])([email protected])
   vue-tsc:
-    specifier: ^1.8.8
-    version: 1.8.8([email protected])
+    specifier: ^1.8.11
+    version: 1.8.11([email protected])
 
 packages:
 
@@ -114,11 +117,6 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
-  /@alloc/[email protected]:
-    resolution: {integrity: 
sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==}
-    engines: {node: '>=10'}
-    dev: true
-
   /@ampproject/[email protected]:
     resolution: {integrity: 
sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
     engines: {node: '>=6.0.0'}
@@ -144,20 +142,20 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/[email protected]:
-    resolution: {integrity: 
sha512-PtZqMmgRrvj8ruoEOIwVA3yoF91O+Hgw9o7DAUTNBA6Mo2jpu31clx9a7Nz/9JznqetTR6zwfC4L3LAjKQXUwA==}
+  /@babel/[email protected]:
+    resolution: {integrity: 
sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@ampproject/remapping': 2.2.1
       '@babel/code-frame': 7.22.13
       '@babel/generator': 7.22.15
       '@babel/helper-compilation-targets': 7.22.15
-      '@babel/helper-module-transforms': 7.22.15(@babel/[email protected])
+      '@babel/helper-module-transforms': 7.22.17(@babel/[email protected])
       '@babel/helpers': 7.22.15
-      '@babel/parser': 7.22.15
+      '@babel/parser': 7.22.16
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.22.15
-      '@babel/types': 7.22.15
+      '@babel/traverse': 7.22.17
+      '@babel/types': 7.22.17
       convert-source-map: 1.9.0
       debug: 4.3.4
       gensync: 1.0.0-beta.2
@@ -171,7 +169,7 @@ packages:
     resolution: {integrity: 
sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
       '@jridgewell/gen-mapping': 0.3.3
       '@jridgewell/trace-mapping': 0.3.19
       jsesc: 2.5.2
@@ -181,7 +179,7 @@ packages:
     resolution: {integrity: 
sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
@@ -195,19 +193,19 @@ packages:
       semver: 6.3.1
     dev: true
 
-  /@babel/[email protected](@babel/[email protected]):
+  /@babel/[email protected](@babel/[email protected]):
     resolution: {integrity: 
sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-annotate-as-pure': 7.22.5
       '@babel/helper-environment-visitor': 7.22.5
       '@babel/helper-function-name': 7.22.5
       '@babel/helper-member-expression-to-functions': 7.22.15
       '@babel/helper-optimise-call-expression': 7.22.5
-      '@babel/helper-replace-supers': 7.22.9(@babel/[email protected])
+      '@babel/helper-replace-supers': 7.22.9(@babel/[email protected])
       '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
       '@babel/helper-split-export-declaration': 7.22.6
       semver: 6.3.1
@@ -223,37 +221,37 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.22.15
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
     resolution: {integrity: 
sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
     resolution: {integrity: 
sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
     resolution: {integrity: 
sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
-  /@babel/[email protected](@babel/[email protected]):
-    resolution: {integrity: 
sha512-l1UiX4UyHSFsYt17iQ3Se5pQQZZHa22zyIXURmvkmLCD4t/aU+dvNWHatKac/D9Vm9UES7nvIqHs4jZqKviUmQ==}
+  /@babel/[email protected](@babel/[email protected]):
+    resolution: {integrity: 
sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-environment-visitor': 7.22.5
       '@babel/helper-module-imports': 7.22.15
       '@babel/helper-simple-access': 7.22.5
@@ -265,7 +263,7 @@ packages:
     resolution: {integrity: 
sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
@@ -273,13 +271,13 @@ packages:
     engines: {node: '>=6.9.0'}
     dev: true
 
-  /@babel/[email protected](@babel/[email protected]):
+  /@babel/[email protected](@babel/[email protected]):
     resolution: {integrity: 
sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-environment-visitor': 7.22.5
       '@babel/helper-member-expression-to-functions': 7.22.15
       '@babel/helper-optimise-call-expression': 7.22.5
@@ -289,21 +287,21 @@ packages:
     resolution: {integrity: 
sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
     resolution: {integrity: 
sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
     resolution: {integrity: 
sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
     engines: {node: '>=6.9.0'}
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
     dev: true
 
   /@babel/[email protected]:
@@ -324,8 +322,8 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.22.15
-      '@babel/types': 7.22.15
+      '@babel/traverse': 7.22.17
+      '@babel/types': 7.22.17
     transitivePeerDependencies:
       - supports-color
     dev: true
@@ -339,44 +337,44 @@ packages:
       js-tokens: 4.0.0
     dev: true
 
-  /@babel/[email protected]:
-    resolution: {integrity: 
sha512-RWmQ/sklUN9BvGGpCDgSubhHWfAx24XDTDObup4ffvxaYsptOg2P3KG0j+1eWKLxpkX0j0uHxmpq2Z1SP/VhxA==}
+  /@babel/[email protected]:
+    resolution: {integrity: 
sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==}
     engines: {node: '>=6.0.0'}
     hasBin: true
     dependencies:
-      '@babel/types': 7.22.15
+      '@babel/types': 7.22.17
 
-  /@babel/[email protected](@babel/[email protected]):
+  /@babel/[email protected](@babel/[email protected]):
     resolution: {integrity: 
sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/[email protected](@babel/[email protected]):
+  /@babel/[email protected](@babel/[email protected]):
     resolution: {integrity: 
sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-plugin-utils': 7.22.5
     dev: true
 
-  /@babel/[email protected](@babel/[email protected]):
+  /@babel/[email protected](@babel/[email protected]):
     resolution: {integrity: 
sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==}
     engines: {node: '>=6.9.0'}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-annotate-as-pure': 7.22.5
-      '@babel/helper-create-class-features-plugin': 
7.22.15(@babel/[email protected])
+      '@babel/helper-create-class-features-plugin': 
7.22.15(@babel/[email protected])
       '@babel/helper-plugin-utils': 7.22.5
-      '@babel/plugin-syntax-typescript': 7.22.5(@babel/[email protected])
+      '@babel/plugin-syntax-typescript': 7.22.5(@babel/[email protected])
     dev: true
 
   /@babel/[email protected]:
@@ -391,12 +389,12 @@ packages:
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.22.13
-      '@babel/parser': 7.22.15
-      '@babel/types': 7.22.15
+      '@babel/parser': 7.22.16
+      '@babel/types': 7.22.17
     dev: true
 
-  /@babel/[email protected]:
-    resolution: {integrity: 
sha512-DdHPwvJY0sEeN4xJU5uRLmZjgMMDIvMPniLuYzUVXj/GGzysPl0/fwt44JBkyUIzGJPV8QgHMcQdQ34XFuKTYQ==}
+  /@babel/[email protected]:
+    resolution: {integrity: 
sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/code-frame': 7.22.13
@@ -405,16 +403,16 @@ packages:
       '@babel/helper-function-name': 7.22.5
       '@babel/helper-hoist-variables': 7.22.5
       '@babel/helper-split-export-declaration': 7.22.6
-      '@babel/parser': 7.22.15
-      '@babel/types': 7.22.15
+      '@babel/parser': 7.22.16
+      '@babel/types': 7.22.17
       debug: 4.3.4
       globals: 11.12.0
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@babel/[email protected]:
-    resolution: {integrity: 
sha512-X+NLXr0N8XXmN5ZsaQdm9U2SSC3UbIYq/doL++sueHOTisgZHoKaQtZxGuV2cUPQHMfjKEfg/g6oy7Hm6SKFtA==}
+  /@babel/[email protected]:
+    resolution: {integrity: 
sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==}
     engines: {node: '>=6.9.0'}
     dependencies:
       '@babel/helper-string-parser': 7.22.5
@@ -639,18 +637,18 @@ packages:
     dev: true
     optional: true
 
-  /@eslint-community/[email protected]([email protected]):
+  /@eslint-community/[email protected]([email protected]):
     resolution: {integrity: 
sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
     dependencies:
-      eslint: 8.46.0
+      eslint: 8.49.0
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@eslint-community/[email protected]:
-    resolution: {integrity: 
sha512-JylOEEzDiOryeUnFbQz+oViCXS0KsvR1mvHkoMiu5+UiBvy+RYX7tzlIIIEstF/gVa2tj9AQXk3dgnxv6KxhFg==}
+  /@eslint-community/[email protected]:
+    resolution: {integrity: 
sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==}
     engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
     dev: true
 
@@ -671,8 +669,8 @@ packages:
       - supports-color
     dev: true
 
-  /@eslint/[email protected]:
-    resolution: {integrity: 
sha512-ZSjtmelB7IJfWD2Fvb7+Z+ChTIKWq6kjda95fLcQKNS5aheVHn4IkfgRQE3sIIzTcSLwLcLZUD9UBt+V7+h+Pw==}
+  /@eslint/[email protected]:
+    resolution: {integrity: 
sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
@@ -696,6 +694,27 @@ packages:
     resolution: {integrity: 
sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
     dev: true
 
+  /@intlify/[email protected]:
+    resolution: {integrity: 
sha512-bIvtuEjLES35l39R0OccYbmr/fatSr4VSRThhouvFc05mnoAZyJGgj3st1iLaHGlFTmvd507uww1427o56r36Q==}
+    engines: {node: '>= 16'}
+    dependencies:
+      '@intlify/message-compiler': 9.4.0
+      '@intlify/shared': 9.4.0
+    dev: false
+
+  /@intlify/[email protected]:
+    resolution: {integrity: 
sha512-EdjqOH3bQqEjZcUOwo90wuW4ZuFr41FDxVni6WNKS0V0myKgwz9EuvLDcnEbjJMIX8vKAWPjWfnSTt5fMwKHLA==}
+    engines: {node: '>= 16'}
+    dependencies:
+      '@intlify/shared': 9.4.0
+      source-map-js: 1.0.2
+    dev: false
+
+  /@intlify/[email protected]:
+    resolution: {integrity: 
sha512-AFqymip2kToqA0B6KZPg5jSrdcVHoli9t/VhGKE2iiMq9utFuMoGdDC/JOCIZgwxo6aXAk86QyU2XtzEoMuZ6A==}
+    engines: {node: '>= 16'}
+    dev: false
+
   /@jridgewell/[email protected]:
     resolution: {integrity: 
sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
     engines: {node: '>=6.0.0'}
@@ -703,17 +722,21 @@ packages:
       '@jridgewell/set-array': 1.1.2
       '@jridgewell/sourcemap-codec': 1.4.15
       '@jridgewell/trace-mapping': 0.3.19
-    dev: true
 
   /@jridgewell/[email protected]:
     resolution: {integrity: 
sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
     engines: {node: '>=6.0.0'}
-    dev: true
 
   /@jridgewell/[email protected]:
     resolution: {integrity: 
sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
     engines: {node: '>=6.0.0'}
-    dev: true
+
+  /@jridgewell/[email protected]:
+    resolution: {integrity: 
sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
+    dependencies:
+      '@jridgewell/gen-mapping': 0.3.3
+      '@jridgewell/trace-mapping': 0.3.19
+    dev: false
 
   /@jridgewell/[email protected]:
     resolution: {integrity: 
sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
@@ -723,7 +746,6 @@ packages:
     dependencies:
       '@jridgewell/resolve-uri': 3.1.1
       '@jridgewell/sourcemap-codec': 1.4.15
-    dev: true
 
   /@juggle/[email protected]:
     resolution: {integrity: 
sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
@@ -776,25 +798,33 @@ packages:
       picomatch: 2.3.1
     dev: true
 
-  /@rushstack/[email protected]:
-    resolution: {integrity: 
sha512-V+MvGwaHH03hYhY+k6Ef/xKd6RYlc4q8WBx+2ANmipHJcKuktNcI/NgEsJgdSUF6Lw32njT6OnrRsKYCdgHjYw==}
+  /@rushstack/[email protected]:
+    resolution: {integrity: 
sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==}
     dev: true
 
-  /@tsconfig/[email protected]:
-    resolution: {integrity: 
sha512-yhxwIlFVSVcMym3O31HoMnRXpoenmpIxcj4Yoes2DUpe+xCJnA7ECQP1Vw889V0jTt/2nzvpLQ/UuMYCd3JPIg==}
+  /@tsconfig/[email protected]:
+    resolution: {integrity: 
sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==}
     dev: true
 
+  /@types/[email protected]:
+    resolution: {integrity: 
sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
+    dependencies:
+      '@types/eslint': 8.44.2
+      '@types/estree': 1.0.1
+    dev: false
+
+  /@types/[email protected]:
+    resolution: {integrity: 
sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==}
+    dependencies:
+      '@types/estree': 1.0.1
+      '@types/json-schema': 7.0.12
+    dev: false
+
   /@types/[email protected]:
     resolution: {integrity: 
sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
-    dev: true
-
-  /@types/[email protected]:
-    resolution: {integrity: 
sha512-Xe7IImK09HP1sv2M/aI+48a20VX+TdRJucfq4vfRVy6nWN8PYPOEnlMRSgxJAgYQIXJVL8dZ4/ilAM7dWNaOww==}
-    dev: true
 
   /@types/[email protected]:
     resolution: {integrity: 
sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
-    dev: true
 
   /@types/[email protected]:
     resolution: {integrity: 
sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==}
@@ -810,24 +840,14 @@ packages:
     resolution: {integrity: 
sha512-trNJ/vtMZYMLhfN45uLq4ShQSw0/S7xCTLLVM+WM1rmFpba/VS42jVUgaO3w/NOLiWR/09lnYk0yMaA/atdIsg==}
     dev: true
 
-  /@types/[email protected]:
-    resolution: {integrity: 
sha512-xNbS75FxH6P4UXTPUJp/zNPq6/xsfdJKussCWNOnz4aULWIRwMgP1LgaB5RiBnMX1DPCYenuqGZfnIAx5mbFLA==}
-    dev: true
+  /@types/[email protected]:
+    resolution: {integrity: 
sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==}
 
   /@types/[email protected]:
     resolution: {integrity: 
sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==}
     dev: true
 
-  /@types/[email protected]:
-    resolution: {integrity: 
sha512-JxPzrm609hzvF4nmOI3StLjbBEP3WWQxDDJESqR1nh94h7gyyy3XSl0hn5RBMJ9mPudlLjtaXs5YEBtLw7CnPA==}
-    deprecated: This is a stub types definition. tailwindcss provides its own 
type definitions, so you do not need this installed.
-    dependencies:
-      tailwindcss: 3.3.3
-    transitivePeerDependencies:
-      - ts-node
-    dev: true
-
-  
/@typescript-eslint/[email protected](@typescript-eslint/[email protected])([email protected])([email protected]):
+  
/@typescript-eslint/[email protected](@typescript-eslint/[email protected])([email protected])([email protected]):
     resolution: {integrity: 
sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -838,13 +858,13 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@eslint-community/regexpp': 4.8.0
-      '@typescript-eslint/parser': 5.62.0([email protected])([email protected])
+      '@eslint-community/regexpp': 4.8.1
+      '@typescript-eslint/parser': 5.62.0([email protected])([email protected])
       '@typescript-eslint/scope-manager': 5.62.0
-      '@typescript-eslint/type-utils': 5.62.0([email protected])([email protected])
-      '@typescript-eslint/utils': 5.62.0([email protected])([email protected])
+      '@typescript-eslint/type-utils': 5.62.0([email protected])([email protected])
+      '@typescript-eslint/utils': 5.62.0([email protected])([email protected])
       debug: 4.3.4
-      eslint: 8.46.0
+      eslint: 8.49.0
       graphemer: 1.4.0
       ignore: 5.2.4
       natural-compare-lite: 1.4.0
@@ -855,7 +875,7 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/[email protected]([email protected])([email protected]):
+  /@typescript-eslint/[email protected]([email protected])([email protected]):
     resolution: {integrity: 
sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -869,7 +889,7 @@ packages:
       '@typescript-eslint/types': 5.62.0
       '@typescript-eslint/typescript-estree': 5.62.0([email protected])
       debug: 4.3.4
-      eslint: 8.46.0
+      eslint: 8.49.0
       typescript: 5.1.6
     transitivePeerDependencies:
       - supports-color
@@ -883,7 +903,7 @@ packages:
       '@typescript-eslint/visitor-keys': 5.62.0
     dev: true
 
-  /@typescript-eslint/[email protected]([email protected])([email protected]):
+  /@typescript-eslint/[email protected]([email protected])([email protected]):
     resolution: {integrity: 
sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -894,9 +914,9 @@ packages:
         optional: true
     dependencies:
       '@typescript-eslint/typescript-estree': 5.62.0([email protected])
-      '@typescript-eslint/utils': 5.62.0([email protected])([email protected])
+      '@typescript-eslint/utils': 5.62.0([email protected])([email protected])
       debug: 4.3.4
-      eslint: 8.46.0
+      eslint: 8.49.0
       tsutils: 3.21.0([email protected])
       typescript: 5.1.6
     transitivePeerDependencies:
@@ -929,19 +949,19 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/[email protected]([email protected])([email protected]):
+  /@typescript-eslint/[email protected]([email protected])([email protected]):
     resolution: {integrity: 
sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.0.0 || ^7.0.0 || ^8.0.0
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0([email protected])
+      '@eslint-community/eslint-utils': 4.4.0([email protected])
       '@types/json-schema': 7.0.12
       '@types/semver': 7.5.1
       '@typescript-eslint/scope-manager': 5.62.0
       '@typescript-eslint/types': 5.62.0
       '@typescript-eslint/typescript-estree': 5.62.0([email protected])
-      eslint: 8.46.0
+      eslint: 8.49.0
       eslint-scope: 5.1.1
       semver: 7.5.4
     transitivePeerDependencies:
@@ -961,15 +981,15 @@ packages:
     resolution: {integrity: 
sha512-UX52zY7olPigsLf5ZsWid7ScOoazBF/8LLYqArej2zrQ+Msg5mQGrH8sfAg1NfofNQuSfBJIILfAhFIY8JELmQ==}
     engines: {pnpm: '>=8.0'}
     dependencies:
-      '@varlet/shared': 2.16.1
+      '@varlet/shared': 2.16.2
       axios: 1.5.0
       qs: 6.11.2
     transitivePeerDependencies:
       - debug
     dev: true
 
-  /@varlet/[email protected]:
-    resolution: {integrity: 
sha512-DfE1+yFTEkvFTcRFR9MWLbiBCkrmZLQ8oKs+pZw0VzwZ+YREarukphBcz4VYFc6EzmDJML0IDlWIQYBUxM1TTQ==}
+  /@varlet/[email protected]:
+    resolution: {integrity: 
sha512-Tu4LIaEwIflyUrDzIViM2spluwSP7cNxJyoM+0XD2/h0abI1H86M6NsO5tBRF3R3740ITgJ4GzEHimOYNfbmMQ==}
     dev: true
 
   /@vitejs/[email protected]([email protected])([email protected]):
@@ -979,23 +999,23 @@ packages:
       vite: ^4.0.0
       vue: ^3.0.0
     dependencies:
-      '@babel/core': 7.22.15
-      '@babel/plugin-transform-typescript': 7.22.15(@babel/[email protected])
-      '@vue/babel-plugin-jsx': 1.1.5(@babel/[email protected])
-      vite: 4.4.9(@types/[email protected])
+      '@babel/core': 7.22.17
+      '@babel/plugin-transform-typescript': 7.22.15(@babel/[email protected])
+      '@vue/babel-plugin-jsx': 1.1.5(@babel/[email protected])
+      vite: 4.4.9(@types/[email protected])([email protected])
       vue: 3.3.4
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@vitejs/[email protected]([email protected])([email protected]):
-    resolution: {integrity: 
sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==}
+  /@vitejs/[email protected]([email protected])([email protected]):
+    resolution: {integrity: 
sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
       vite: ^4.0.0
       vue: ^3.2.25
     dependencies:
-      vite: 4.4.9(@types/[email protected])
+      vite: 4.4.9(@types/[email protected])([email protected])
       vue: 3.3.4
     dev: true
 
@@ -1021,17 +1041,17 @@ packages:
     resolution: {integrity: 
sha512-SgUymFpMoAyWeYWLAY+MkCK3QEROsiUnfaw5zxOVD/M64KQs8D/4oK6Q5omVA2hnvEOE0SCkH2TZxs/jnnUj7w==}
     dev: true
 
-  /@vue/[email protected](@babel/[email protected]):
+  /@vue/[email protected](@babel/[email protected]):
     resolution: {integrity: 
sha512-nKs1/Bg9U1n3qSWnsHhCVQtAzI6aQXqua8j/bZrau8ywT1ilXQbK4FwEJGmU8fV7tcpuFvWmmN7TMmV1OBma1g==}
     peerDependencies:
       '@babel/core': ^7.0.0-0
     dependencies:
-      '@babel/core': 7.22.15
+      '@babel/core': 7.22.17
       '@babel/helper-module-imports': 7.22.15
-      '@babel/plugin-syntax-jsx': 7.22.5(@babel/[email protected])
+      '@babel/plugin-syntax-jsx': 7.22.5(@babel/[email protected])
       '@babel/template': 7.22.15
-      '@babel/traverse': 7.22.15
-      '@babel/types': 7.22.15
+      '@babel/traverse': 7.22.17
+      '@babel/types': 7.22.17
       '@vue/babel-helper-vue-transform-on': 1.1.5
       camelcase: 6.3.0
       html-tags: 3.3.1
@@ -1043,7 +1063,7 @@ packages:
   /@vue/[email protected]:
     resolution: {integrity: 
sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
     dependencies:
-      '@babel/parser': 7.22.15
+      '@babel/parser': 7.22.16
       '@vue/shared': 3.3.4
       estree-walker: 2.0.2
       source-map-js: 1.0.2
@@ -1057,7 +1077,7 @@ packages:
   /@vue/[email protected]:
     resolution: {integrity: 
sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
     dependencies:
-      '@babel/parser': 7.22.15
+      '@babel/parser': 7.22.16
       '@vue/compiler-core': 3.3.4
       '@vue/compiler-dom': 3.3.4
       '@vue/compiler-ssr': 3.3.4
@@ -1076,22 +1096,23 @@ packages:
 
   /@vue/[email protected]:
     resolution: {integrity: 
sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==}
+    dev: false
 
-  /@vue/[email protected]([email protected])([email protected]):
+  /@vue/[email protected]([email protected])([email protected]):
     resolution: {integrity: 
sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==}
     peerDependencies:
       eslint: '>= 8.0.0'
       prettier: '>= 3.0.0'
     dependencies:
-      eslint: 8.46.0
-      eslint-config-prettier: 8.10.0([email protected])
-      eslint-plugin-prettier: 
5.0.0([email protected])([email protected])([email protected])
-      prettier: 3.0.0
+      eslint: 8.49.0
+      eslint-config-prettier: 8.10.0([email protected])
+      eslint-plugin-prettier: 
5.0.0([email protected])([email protected])([email protected])
+      prettier: 3.0.3
     transitivePeerDependencies:
       - '@types/eslint'
     dev: true
 
-  
/@vue/[email protected]([email protected])([email protected])([email protected]):
+  
/@vue/[email protected]([email protected])([email protected])([email protected]):
     resolution: {integrity: 
sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
@@ -1102,18 +1123,18 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/eslint-plugin': 
5.62.0(@typescript-eslint/[email protected])([email protected])([email protected])
-      '@typescript-eslint/parser': 5.62.0([email protected])([email protected])
-      eslint: 8.46.0
-      eslint-plugin-vue: 9.16.1([email protected])
+      '@typescript-eslint/eslint-plugin': 
5.62.0(@typescript-eslint/[email protected])([email protected])([email protected])
+      '@typescript-eslint/parser': 5.62.0([email protected])([email protected])
+      eslint: 8.49.0
+      eslint-plugin-vue: 9.17.0([email protected])
       typescript: 5.1.6
-      vue-eslint-parser: 9.3.1([email protected])
+      vue-eslint-parser: 9.3.1([email protected])
     transitivePeerDependencies:
       - supports-color
     dev: true
 
-  /@vue/[email protected]([email protected]):
-    resolution: {integrity: 
sha512-i4KMTuPazf48yMdYoebTkgSOJdFraE4pQf0B+FTOFkbB+6hAfjrSou/UmYWRsWyZV6r4Rc6DDZdI39CJwL0rWw==}
+  /@vue/[email protected]([email protected]):
+    resolution: {integrity: 
sha512-+MZOBGqGwfld6hpo0DB47x8eNM0dNqk15ZdfOhj19CpvuYuOWCeVdOEGZunKDyo3QLkTn3kLOSysJzg7FDOQBA==}
     peerDependencies:
       typescript: '*'
     peerDependenciesMeta:
@@ -1134,7 +1155,7 @@ packages:
   /@vue/[email protected]:
     resolution: {integrity: 
sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
     dependencies:
-      '@babel/parser': 7.22.15
+      '@babel/parser': 7.22.16
       '@vue/compiler-core': 3.3.4
       '@vue/shared': 3.3.4
       estree-walker: 2.0.2
@@ -1174,15 +1195,137 @@ packages:
     resolution: {integrity: 
sha512-CPuIReonid9+zOG/CGTT05FXrPYATEqoDGNrEaqS4hwcw5BUNM2FguC0mOwJD4Jr16UpRVl9N0pY3P+srIbqmg==}
     dev: true
 
-  /@vue/[email protected]([email protected]):
-    resolution: {integrity: 
sha512-jUnmMB6egu5wl342eaUH236v8tdcEPXXkPgj+eI/F6JwW/lb+yAU6U07ZbQ3MVabZRlupIlPESB7ajgAGixhow==}
+  /@vue/[email protected]([email protected]):
+    resolution: {integrity: 
sha512-skUmMDiPUUtu1flPmf2YybF+PX8IzBtMioQOaNn6Ck/RhdrPJGj1AX/7s3Buf9G6ln+/KHR1XQuti/FFxw5XVA==}
     dependencies:
       '@volar/typescript': 1.10.1
-      '@vue/language-core': 1.8.8([email protected])
+      '@vue/language-core': 1.8.11([email protected])
     transitivePeerDependencies:
       - typescript
     dev: true
 
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==}
+    dependencies:
+      '@webassemblyjs/helper-numbers': 1.11.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==}
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
+    dependencies:
+      '@webassemblyjs/floating-point-hex-parser': 1.11.6
+      '@webassemblyjs/helper-api-error': 1.11.6
+      '@xtuc/long': 4.2.2
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==}
+    dependencies:
+      '@webassemblyjs/ast': 1.11.6
+      '@webassemblyjs/helper-buffer': 1.11.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+      '@webassemblyjs/wasm-gen': 1.11.6
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
+    dependencies:
+      '@xtuc/ieee754': 1.2.0
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
+    dependencies:
+      '@xtuc/long': 4.2.2
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==}
+    dependencies:
+      '@webassemblyjs/ast': 1.11.6
+      '@webassemblyjs/helper-buffer': 1.11.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+      '@webassemblyjs/helper-wasm-section': 1.11.6
+      '@webassemblyjs/wasm-gen': 1.11.6
+      '@webassemblyjs/wasm-opt': 1.11.6
+      '@webassemblyjs/wasm-parser': 1.11.6
+      '@webassemblyjs/wast-printer': 1.11.6
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==}
+    dependencies:
+      '@webassemblyjs/ast': 1.11.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+      '@webassemblyjs/ieee754': 1.11.6
+      '@webassemblyjs/leb128': 1.11.6
+      '@webassemblyjs/utf8': 1.11.6
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==}
+    dependencies:
+      '@webassemblyjs/ast': 1.11.6
+      '@webassemblyjs/helper-buffer': 1.11.6
+      '@webassemblyjs/wasm-gen': 1.11.6
+      '@webassemblyjs/wasm-parser': 1.11.6
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==}
+    dependencies:
+      '@webassemblyjs/ast': 1.11.6
+      '@webassemblyjs/helper-api-error': 1.11.6
+      '@webassemblyjs/helper-wasm-bytecode': 1.11.6
+      '@webassemblyjs/ieee754': 1.11.6
+      '@webassemblyjs/leb128': 1.11.6
+      '@webassemblyjs/utf8': 1.11.6
+    dev: false
+
+  /@webassemblyjs/[email protected]:
+    resolution: {integrity: 
sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==}
+    dependencies:
+      '@webassemblyjs/ast': 1.11.6
+      '@xtuc/long': 4.2.2
+    dev: false
+
+  /@xtuc/[email protected]:
+    resolution: {integrity: 
sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+    dev: false
+
+  /@xtuc/[email protected]:
+    resolution: {integrity: 
sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+    dev: false
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==}
+    peerDependencies:
+      acorn: ^8
+    dependencies:
+      acorn: 8.10.0
+    dev: false
+
   /[email protected]([email protected]):
     resolution: {integrity: 
sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
     peerDependencies:
@@ -1195,7 +1338,14 @@ packages:
     resolution: {integrity: 
sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
     engines: {node: '>=0.4.0'}
     hasBin: true
-    dev: true
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+    peerDependencies:
+      ajv: ^6.9.1
+    dependencies:
+      ajv: 6.12.6
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -1204,7 +1354,6 @@ packages:
       fast-json-stable-stringify: 2.1.0
       json-schema-traverse: 0.4.1
       uri-js: 4.4.1
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -1225,21 +1374,12 @@ packages:
       color-convert: 2.0.1
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
     engines: {node: '>= 8'}
     dependencies:
       normalize-path: 3.0.0
       picomatch: 2.3.1
-    dev: true
-
-  /[email protected]:
-    resolution: {integrity: 
sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -1263,7 +1403,7 @@ packages:
     dependencies:
       array-buffer-byte-length: 1.0.0
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       es-abstract: 1.22.1
       get-intrinsic: 1.2.1
       is-array-buffer: 3.0.2
@@ -1286,7 +1426,7 @@ packages:
       postcss: ^8.1.0
     dependencies:
       browserslist: 4.21.10
-      caniuse-lite: 1.0.30001527
+      caniuse-lite: 1.0.30001534
       fraction.js: 4.3.6
       normalize-range: 0.1.2
       picocolors: 1.0.0
@@ -1321,7 +1461,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
     engines: {node: '>=8'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -1352,18 +1491,20 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       fill-range: 7.0.1
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
     engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
     hasBin: true
     dependencies:
-      caniuse-lite: 1.0.30001527
-      electron-to-chromium: 1.4.508
+      caniuse-lite: 1.0.30001534
+      electron-to-chromium: 1.4.519
       node-releases: 2.0.13
       update-browserslist-db: 1.0.11([email protected])
-    dev: true
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
@@ -1384,19 +1525,13 @@ packages:
     engines: {node: '>=6'}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==}
-    engines: {node: '>= 6'}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
     engines: {node: '>=10'}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-YkJi7RwPgWtXVSgK4lG9AHH57nSzvvOp9MesgXmw4Q7n0C3H04L0foHqfxcmSAm5AcWb8dW9AYj2tR7/5GnddQ==}
-    dev: true
+  /[email protected]:
+    resolution: {integrity: 
sha512-vlPVrhsCS7XaSh2VvWluIQEzVhefrUQcEsQWSS5A5V+dM07uv1qHeQzAOTGIMy9i3e9bH15+muvI/UHojVgS/Q==}
 
   /[email protected]:
     resolution: {integrity: 
sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@@ -1428,7 +1563,11 @@ packages:
       readdirp: 3.6.0
     optionalDependencies:
       fsevents: 2.3.3
-    dev: true
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
+    engines: {node: '>=6.0'}
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -1458,10 +1597,9 @@ packages:
       delayed-stream: 1.0.0
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
-    engines: {node: '>= 6'}
-    dev: true
+  /[email protected]:
+    resolution: {integrity: 
sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -1511,6 +1649,15 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-syNOAstJXAmvD3RifcDk3fiPMyYE2fY8so6w9gf2/wNlKpG0zyH+oiXubEYVOy1WAWkzOc72pbAxwx+3OU4JJA==}
+    engines: {node: '>=8.9.0'}
+    deprecated: This package has been renamed to 'sass'.
+    hasBin: true
+    dependencies:
+      chokidar: 3.5.3
+    dev: false
+
   /[email protected]([email protected]):
     resolution: {integrity: 
sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==}
     peerDependencies:
@@ -1564,15 +1711,25 @@ packages:
       titleize: 3.0.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-22M+6zEspQHx10bfFQl2ET39IvfuQ7+rZIH7+ard8fCC4hPmkOSy+8JhKxBRLaWUziJ0O63NTYT97LR8zUfPTw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      get-intrinsic: 1.2.1
+      gopd: 1.0.1
+      has-property-descriptors: 1.0.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
     engines: {node: '>=12'}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
     engines: {node: '>= 0.4'}
     dependencies:
+      define-data-property: 1.0.1
       has-property-descriptors: 1.0.0
       object-keys: 1.1.1
     dev: true
@@ -1582,10 +1739,6 @@ packages:
     engines: {node: '>=0.4.0'}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
     engines: {node: '>=8'}
@@ -1593,10 +1746,6 @@ packages:
       path-type: 4.0.0
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
     engines: {node: '>=6.0.0'}
@@ -1604,9 +1753,16 @@ packages:
       esutils: 2.0.3
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-FFa8QKjQK/A5QuFr2167myhMesGrhlOBD+3cYNxO9/S4XzHEXesyTD/1/xF644gC8buFPz3ca6G1LOQD0tZrrg==}
-    dev: true
+  /[email protected]:
+    resolution: {integrity: 
sha512-kqs9oGYL4UFVkLKhqCTgBCYZv+wZ374yABDMqlDda9HvlkQxvSr7kgf4hfWVjMieDbX+1MwPHFBsOGCMIBaFKg==}
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
+    engines: {node: '>=10.13.0'}
+    dependencies:
+      graceful-fs: 4.2.11
+      tapable: 2.2.1
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
@@ -1645,11 +1801,11 @@ packages:
       object-inspect: 1.12.3
       object-keys: 1.1.1
       object.assign: 4.1.4
-      regexp.prototype.flags: 1.5.0
+      regexp.prototype.flags: 1.5.1
       safe-array-concat: 1.0.1
       safe-regex-test: 1.0.0
-      string.prototype.trim: 1.2.7
-      string.prototype.trimend: 1.0.6
+      string.prototype.trim: 1.2.8
+      string.prototype.trimend: 1.0.7
       string.prototype.trimstart: 1.0.7
       typed-array-buffer: 1.0.0
       typed-array-byte-length: 1.0.0
@@ -1659,6 +1815,10 @@ packages:
       which-typed-array: 1.1.11
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
     engines: {node: '>= 0.4'}
@@ -1710,7 +1870,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
     engines: {node: '>=6'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
@@ -1727,16 +1886,16 @@ packages:
     engines: {node: '>=12'}
     dev: true
 
-  /[email protected]([email protected]):
+  /[email protected]([email protected]):
     resolution: {integrity: 
sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
     hasBin: true
     peerDependencies:
       eslint: '>=7.0.0'
     dependencies:
-      eslint: 8.46.0
+      eslint: 8.49.0
     dev: true
 
-  
/[email protected]([email protected])([email protected])([email protected]):
+  
/[email protected]([email protected])([email protected])([email protected]):
     resolution: {integrity: 
sha512-AgaZCVuYDXHUGxj/ZGu1u8H8CYgDY3iG6w5kUFw4AzMVXzB7VvbKgYR4nATIN+OvUrghMbiDLeimVjVY5ilq3w==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
@@ -1750,26 +1909,26 @@ packages:
       eslint-config-prettier:
         optional: true
     dependencies:
-      eslint: 8.46.0
-      eslint-config-prettier: 8.10.0([email protected])
-      prettier: 3.0.0
+      eslint: 8.49.0
+      eslint-config-prettier: 8.10.0([email protected])
+      prettier: 3.0.3
       prettier-linter-helpers: 1.0.0
       synckit: 0.8.5
     dev: true
 
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-2FtnTqazA6aYONfDuOZTk0QzwhAwi7Z4+uJ7+GHeGxcKapjqWlDsRWDenvyG/utyOfAS5bVRmAG3cEWiYEz2bA==}
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-r7Bp79pxQk9I5XDP0k2dpUC7Ots3OSWgvGZNu3BxmKK6Zg7NgVtcOB6OCna5Kb9oQwJPl5hq183WD0SY5tZtIQ==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0([email protected])
-      eslint: 8.46.0
+      '@eslint-community/eslint-utils': 4.4.0([email protected])
+      eslint: 8.49.0
       natural-compare: 1.4.0
       nth-check: 2.1.1
       postcss-selector-parser: 6.0.13
       semver: 7.5.4
-      vue-eslint-parser: 9.3.1([email protected])
+      vue-eslint-parser: 9.3.1([email protected])
       xml-name-validator: 4.0.0
     transitivePeerDependencies:
       - supports-color
@@ -1781,7 +1940,6 @@ packages:
     dependencies:
       esrecurse: 4.3.0
       estraverse: 4.3.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
@@ -1796,15 +1954,15 @@ packages:
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-cIO74PvbW0qU8e0mIvk5IV3ToWdCq5FYG6gWPHHkx6gNdjlbAYvtfHmlCMXxjcoVaIdwy/IAt3+mDkZkfvb2Dg==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==}
     engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
     hasBin: true
     dependencies:
-      '@eslint-community/eslint-utils': 4.4.0([email protected])
-      '@eslint-community/regexpp': 4.8.0
+      '@eslint-community/eslint-utils': 4.4.0([email protected])
+      '@eslint-community/regexpp': 4.8.1
       '@eslint/eslintrc': 2.1.2
-      '@eslint/js': 8.48.0
+      '@eslint/js': 8.49.0
       '@humanwhocodes/config-array': 0.11.11
       '@humanwhocodes/module-importer': 1.0.1
       '@nodelib/fs.walk': 1.2.8
@@ -1863,17 +2021,14 @@ packages:
     engines: {node: '>=4.0'}
     dependencies:
       estraverse: 5.3.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
     engines: {node: '>=4.0'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
     engines: {node: '>=4.0'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
@@ -1883,6 +2038,11 @@ packages:
     engines: {node: '>=0.10.0'}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+    engines: {node: '>=0.8.x'}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-qaeGN5bx63s/AXgQo8gj6fBkxge+OoLddLniox5qtLAEY5HSnuSlISXVPxnSae1dWblvTh4/HoMIB+mbMsvZzw==}
     dev: true
@@ -1919,7 +2079,6 @@ packages:
 
   /[email protected]:
     resolution: {integrity: 
sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
@@ -1938,7 +2097,6 @@ packages:
 
   /[email protected]:
     resolution: {integrity: 
sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
@@ -1962,7 +2120,6 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       to-regex-range: 5.0.1
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
@@ -2023,7 +2180,6 @@ packages:
     engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
     os: [darwin]
     requiresBuild: true
-    dev: true
     optional: true
 
   /[email protected]:
@@ -2035,7 +2191,7 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       es-abstract: 1.22.1
       functions-have-names: 1.2.3
     dev: true
@@ -2076,7 +2232,6 @@ packages:
     engines: {node: '>= 6'}
     dependencies:
       is-glob: 4.0.3
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
@@ -2085,16 +2240,9 @@ packages:
       is-glob: 4.0.3
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==}
-    dependencies:
-      fs.realpath: 1.0.0
-      inflight: 1.0.6
-      inherits: 2.0.4
-      minimatch: 3.1.2
-      once: 1.4.0
-      path-is-absolute: 1.0.1
-    dev: true
+  /[email protected]:
+    resolution: {integrity: 
sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
@@ -2123,7 +2271,7 @@ packages:
     resolution: {integrity: 
sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
     engines: {node: '>= 0.4'}
     dependencies:
-      define-properties: 1.2.0
+      define-properties: 1.2.1
     dev: true
 
   /[email protected]:
@@ -2146,7 +2294,6 @@ packages:
 
   /[email protected]:
     resolution: {integrity: 
sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
@@ -2164,7 +2311,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
     engines: {node: '>=8'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
@@ -2230,6 +2376,9 @@ packages:
     engines: {node: '>= 4'}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==}
+
   /[email protected]:
     resolution: {integrity: 
sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
     engines: {node: '>=6'}
@@ -2286,7 +2435,6 @@ packages:
     engines: {node: '>=8'}
     dependencies:
       binary-extensions: 2.2.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
@@ -2329,14 +2477,12 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
     engines: {node: '>=0.10.0'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
     engines: {node: '>=0.10.0'}
     dependencies:
       is-extglob: 2.1.1
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
@@ -2361,7 +2507,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
     engines: {node: '>=0.12.0'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
@@ -2434,10 +2579,14 @@ packages:
     resolution: {integrity: 
sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-5eEbBDQT/jF1xg6l36P+mWGGoH9Spuy0PCdSr2dtWRDGC6ph/w9ZCL4lmESW8f8F7MwT3XKescfP0wnZWAKL9w==}
-    hasBin: true
-    dev: true
+  /[email protected]:
+    resolution: {integrity: 
sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+    engines: {node: '>= 10.13.0'}
+    dependencies:
+      '@types/node': 18.17.15
+      merge-stream: 2.0.0
+      supports-color: 8.1.1
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
@@ -2464,9 +2613,12 @@ packages:
     resolution: {integrity: 
sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -2496,15 +2648,6 @@ packages:
       type-check: 0.4.0
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
-    engines: {node: '>=10'}
-    dev: true
-
-  /[email protected]:
-    resolution: {integrity: 
sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
     engines: {node: '>=4'}
@@ -2515,6 +2658,11 @@ packages:
       strip-bom: 3.0.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
+    engines: {node: '>=6.11.5'}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
     engines: {node: '>=14'}
@@ -2565,7 +2713,6 @@ packages:
 
   /[email protected]:
     resolution: {integrity: 
sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
@@ -2583,14 +2730,12 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
     engines: {node: '>= 0.6'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
     engines: {node: '>= 0.6'}
     dependencies:
       mime-db: 1.52.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
@@ -2632,14 +2777,6 @@ packages:
     resolution: {integrity: 
sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
-    dependencies:
-      any-promise: 1.3.0
-      object-assign: 4.1.1
-      thenify-all: 1.6.0
-    dev: true
-
   /[email protected]([email protected]):
     resolution: {integrity: 
sha512-aPG8PDfhSzIzn/jSC9y3Jb3Pe2wHJ7F0cFV1EWlbImSrZECeUmoc+fIcOSWbizoztkKfaUAeKwYdMl09MKkj1g==}
     peerDependencies:
@@ -2679,13 +2816,16 @@ packages:
     resolution: {integrity: 
sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
     dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
@@ -2699,7 +2839,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
     engines: {node: '>=0.10.0'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
@@ -2742,16 +2881,6 @@ packages:
       boolbase: 1.0.0
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
-  /[email protected]:
-    resolution: {integrity: 
sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==}
-    engines: {node: '>= 6'}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
     dev: true
@@ -2766,7 +2895,7 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       has-symbols: 1.0.3
       object-keys: 1.1.1
     dev: true
@@ -2893,7 +3022,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
     engines: {node: '>=8.6'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}
@@ -2901,27 +3029,11 @@ packages:
     hasBin: true
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
-    engines: {node: '>=0.10.0'}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
     engines: {node: '>=4'}
     dev: true
 
-  /[email protected]([email protected])([email protected]):
-    resolution: {integrity: 
sha512-ToKR/EJzhhXElQ5YL8PVVY4CqLJjywxszAJjOCgprjmIVkTrPBsEOY4b/ATOzHQc1TtuaJs/3MJuoCpA3pv8Ew==}
-    dependencies:
-      '@types/js-cookie': 3.0.3
-      pinia: 2.1.6([email protected])([email protected])
-    transitivePeerDependencies:
-      - '@vue/composition-api'
-      - typescript
-      - vue
-    dev: true
-
   /[email protected]([email protected]):
     resolution: {integrity: 
sha512-tZbNGf2vjAQcIm7alK40sE51Qu/m9oWr+rEgNm/2AWr1huFxj72CjvpQcIQzMknDBJEkQznCLAGtJTIcLKrKdw==}
     peerDependencies:
@@ -2946,11 +3058,7 @@ packages:
       typescript: 5.1.6
       vue: 3.3.4
       vue-demi: 0.14.6([email protected])
-
-  /[email protected]:
-    resolution: {integrity: 
sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==}
-    engines: {node: '>= 6'}
-    dev: true
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
@@ -2960,55 +3068,6 @@ packages:
       pathe: 1.1.1
     dev: true
 
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==}
-    engines: {node: '>=14.0.0'}
-    peerDependencies:
-      postcss: ^8.0.0
-    dependencies:
-      postcss: 8.4.29
-      postcss-value-parser: 4.2.0
-      read-cache: 1.0.0
-      resolve: 1.22.4
-    dev: true
-
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==}
-    engines: {node: ^12 || ^14 || >= 16}
-    peerDependencies:
-      postcss: ^8.4.21
-    dependencies:
-      camelcase-css: 2.0.1
-      postcss: 8.4.29
-    dev: true
-
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==}
-    engines: {node: '>= 14'}
-    peerDependencies:
-      postcss: '>=8.0.9'
-      ts-node: '>=9.0.0'
-    peerDependenciesMeta:
-      postcss:
-        optional: true
-      ts-node:
-        optional: true
-    dependencies:
-      lilconfig: 2.1.0
-      postcss: 8.4.29
-      yaml: 2.3.2
-    dev: true
-
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==}
-    engines: {node: '>=12.0'}
-    peerDependencies:
-      postcss: ^8.2.14
-    dependencies:
-      postcss: 8.4.29
-      postcss-selector-parser: 6.0.13
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
     engines: {node: '>=4'}
@@ -3041,8 +3100,8 @@ packages:
       fast-diff: 1.3.0
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-zBf5eHpwHOGPC47h0zrPyNn+eAEIdEzfywMoYn2XPi0P44Zp0tSq64rq0xAREh4auw2cJZHo9QUob+NqCQky4g==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
     engines: {node: '>=14'}
     hasBin: true
     dev: true
@@ -3054,7 +3113,6 @@ packages:
   /[email protected]:
     resolution: {integrity: 
sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
     engines: {node: '>=6'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
@@ -3067,11 +3125,11 @@ packages:
     resolution: {integrity: 
sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
     dependencies:
-      pify: 2.3.0
-    dev: true
+      safe-buffer: 5.2.1
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
@@ -3087,19 +3145,18 @@ packages:
     engines: {node: '>=8.10.0'}
     dependencies:
       picomatch: 2.3.1
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==}
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
-      functions-have-names: 1.2.3
+      define-properties: 1.2.1
+      set-function-name: 2.0.0
     dev: true
 
   /[email protected]:
@@ -3128,8 +3185,8 @@ packages:
       glob: 7.2.3
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-nszM8DINnx1vSS+TpbWKMkxem0CDWk3cSit/WWCBVs9/JZ1I/XLwOsiUglYuYReaeWWSsW9kge5zE5NZtf/a4w==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-c+ebvQz0VIH4KhhCpDsI+Bik0eT8ZFEVZEYw0cGMVqIP8zc+gnwl7iXCamTw7vzv2MeuZFZfdx5JJIq+ehzDlg==}
     engines: {node: '>=14.18.0', npm: '>=8.0.0'}
     hasBin: true
     optionalDependencies:
@@ -3159,6 +3216,10 @@ packages:
       isarray: 2.0.5
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
     dependencies:
@@ -3167,6 +3228,48 @@ packages:
       is-regex: 1.1.4
     dev: true
 
+  /[email protected]([email protected])([email protected]):
+    resolution: {integrity: 
sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==}
+    engines: {node: '>= 14.15.0'}
+    peerDependencies:
+      fibers: '>= 3.1.0'
+      node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0
+      sass: ^1.3.0
+      sass-embedded: '*'
+      webpack: ^5.0.0
+    peerDependenciesMeta:
+      fibers:
+        optional: true
+      node-sass:
+        optional: true
+      sass:
+        optional: true
+      sass-embedded:
+        optional: true
+    dependencies:
+      neo-async: 2.6.2
+      sass: 1.66.1
+      webpack: 5.88.2
+    dev: false
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==}
+    engines: {node: '>=14.0.0'}
+    hasBin: true
+    dependencies:
+      chokidar: 3.5.3
+      immutable: 4.3.4
+      source-map-js: 1.0.2
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+    engines: {node: '>= 10.13.0'}
+    dependencies:
+      '@types/json-schema': 7.0.12
+      ajv: 6.12.6
+      ajv-keywords: 3.5.2([email protected])
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==}
     dev: true
@@ -3193,6 +3296,20 @@ packages:
       lru-cache: 6.0.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
+    dependencies:
+      randombytes: 2.1.0
+    dev: false
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-WmS8UHojv5s1eSoRSmzO5zzgDq8PE1/X/ij0k+9fMYmINCc6+j+SF3Om8YyucKn2yjnK4ItNZOoQycNnHsZJTw==}
+    engines: {node: '>= 0.4'}
+    dependencies:
+      define-data-property: 1.0.1
+      has-property-descriptors: 1.0.0
+    dev: true
+
   /[email protected]:
     resolution: {integrity: 
sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
     engines: {node: '>=0.10.0'}
@@ -3242,6 +3359,18 @@ packages:
     resolution: {integrity: 
sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
     engines: {node: '>=0.10.0'}
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+    dependencies:
+      buffer-from: 1.1.2
+      source-map: 0.6.1
+    dev: false
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+    engines: {node: '>=0.10.0'}
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
     dependencies:
@@ -3269,24 +3398,24 @@ packages:
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       es-abstract: 1.22.1
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
     engines: {node: '>= 0.4'}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       es-abstract: 1.22.1
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==}
+  /[email protected]:
+    resolution: {integrity: 
sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       es-abstract: 1.22.1
     dev: true
 
@@ -3294,7 +3423,7 @@ packages:
     resolution: {integrity: 
sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
     dependencies:
       call-bind: 1.0.2
-      define-properties: 1.2.0
+      define-properties: 1.2.1
       es-abstract: 1.22.1
     dev: true
 
@@ -3331,20 +3460,6 @@ packages:
       acorn: 8.10.0
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==}
-    engines: {node: '>=8'}
-    hasBin: true
-    dependencies:
-      '@jridgewell/gen-mapping': 0.3.3
-      commander: 4.1.1
-      glob: 7.1.6
-      lines-and-columns: 1.2.4
-      mz: 2.7.0
-      pirates: 4.0.6
-      ts-interface-checker: 0.1.13
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
     engines: {node: '>=4'}
@@ -3359,6 +3474,13 @@ packages:
       has-flag: 4.0.0
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==}
+    engines: {node: '>=10'}
+    dependencies:
+      has-flag: 4.0.0
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
     engines: {node: '>= 0.4'}
@@ -3376,54 +3498,50 @@ packages:
       tslib: 2.6.2
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==}
-    engines: {node: '>=14.0.0'}
+  /[email protected]:
+    resolution: {integrity: 
sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
+    engines: {node: '>=6'}
+    dev: false
+
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==}
+    engines: {node: '>= 10.13.0'}
+    peerDependencies:
+      '@swc/core': '*'
+      esbuild: '*'
+      uglify-js: '*'
+      webpack: ^5.1.0
+    peerDependenciesMeta:
+      '@swc/core':
+        optional: true
+      esbuild:
+        optional: true
+      uglify-js:
+        optional: true
+    dependencies:
+      '@jridgewell/trace-mapping': 0.3.19
+      jest-worker: 27.5.1
+      schema-utils: 3.3.0
+      serialize-javascript: 6.0.1
+      terser: 5.19.4
+      webpack: 5.88.2
+    dev: false
+
+  /[email protected]:
+    resolution: {integrity: 
sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==}
+    engines: {node: '>=10'}
     hasBin: true
     dependencies:
-      '@alloc/quick-lru': 5.2.0
-      arg: 5.0.2
-      chokidar: 3.5.3
-      didyoumean: 1.2.2
-      dlv: 1.1.3
-      fast-glob: 3.3.1
-      glob-parent: 6.0.2
-      is-glob: 4.0.3
-      jiti: 1.19.3
-      lilconfig: 2.1.0
-      micromatch: 4.0.5
-      normalize-path: 3.0.0
-      object-hash: 3.0.0
-      picocolors: 1.0.0
-      postcss: 8.4.29
-      postcss-import: 15.1.0([email protected])
-      postcss-js: 4.0.1([email protected])
-      postcss-load-config: 4.0.1([email protected])
-      postcss-nested: 6.0.1([email protected])
-      postcss-selector-parser: 6.0.13
-      resolve: 1.22.4
-      sucrase: 3.34.0
-    transitivePeerDependencies:
-      - ts-node
-    dev: true
+      '@jridgewell/source-map': 0.3.5
+      acorn: 8.10.0
+      commander: 2.20.3
+      source-map-support: 0.5.21
+    dev: false
 
   /[email protected]:
     resolution: {integrity: 
sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
-    engines: {node: '>=0.8'}
-    dependencies:
-      thenify: 3.3.1
-    dev: true
-
-  /[email protected]:
-    resolution: {integrity: 
sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
-    dependencies:
-      any-promise: 1.3.0
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
     engines: {node: '>=12'}
@@ -3438,16 +3556,11 @@ packages:
     engines: {node: '>=8.0'}
     dependencies:
       is-number: 7.0.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-M8RGFoKtZ8dF+iwJfAJTOH/SM4KluKOKRJpjCMhI8bG3qB74zrFoArKZ62ll0Fr3mqkMJiQOmWYkdYgDeITYQg==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
     dev: true
@@ -3628,13 +3741,11 @@ packages:
       browserslist: 4.21.10
       escalade: 3.1.1
       picocolors: 1.0.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
     dependencies:
       punycode: 2.3.0
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
@@ -3656,7 +3767,7 @@ packages:
       vue: 3.3.4
     dev: true
 
-  /[email protected](@types/[email protected]):
+  /[email protected](@types/[email protected])([email protected]):
     resolution: {integrity: 
sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
     engines: {node: ^14.18.0 || >=16.0.0}
     hasBin: true
@@ -3684,10 +3795,11 @@ packages:
       terser:
         optional: true
     dependencies:
-      '@types/node': 18.17.5
+      '@types/node': 18.17.15
       esbuild: 0.18.20
       postcss: 8.4.29
-      rollup: 3.29.0
+      rollup: 3.29.1
+      sass: 1.66.1
     optionalDependencies:
       fsevents: 2.3.3
     dev: true
@@ -3714,15 +3826,16 @@ packages:
         optional: true
     dependencies:
       vue: 3.3.4
+    dev: false
 
-  /[email protected]([email protected]):
+  /[email protected]([email protected]):
     resolution: {integrity: 
sha512-Clr85iD2XFZ3lJ52/ppmUDG/spxQu6+MAeHXjjyI4I1NUYZ9xmenQp4N0oaHJhrA8OOxltCVxMRfANGa70vU0g==}
     engines: {node: ^14.17.0 || >=16.0.0}
     peerDependencies:
       eslint: '>=6.0.0'
     dependencies:
       debug: 4.3.4
-      eslint: 8.46.0
+      eslint: 8.49.0
       eslint-scope: 7.2.2
       eslint-visitor-keys: 3.4.3
       espree: 9.6.1
@@ -3733,6 +3846,18 @@ packages:
       - supports-color
     dev: true
 
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-701V7wv6m/Fesbu58rRJv9Rd3en/9F7Nxyn/NiwcR7bJkEfwflMJg5wVezkeHy1tIqjXME1e1zbHhK1dNaR8mg==}
+    engines: {node: '>= 16'}
+    peerDependencies:
+      vue: ^3.0.0
+    dependencies:
+      '@intlify/core-base': 9.4.0
+      '@intlify/shared': 9.4.0
+      '@vue/devtools-api': 6.5.0
+      vue: 3.3.4
+    dev: false
+
   /[email protected]([email protected]):
     resolution: {integrity: 
sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==}
     peerDependencies:
@@ -3749,14 +3874,14 @@ packages:
       he: 1.2.0
     dev: true
 
-  /[email protected]([email protected]):
-    resolution: {integrity: 
sha512-bSydNFQsF7AMvwWsRXD7cBIXaNs/KSjvzWLymq/UtKE36697sboX4EccSHFVxvgdBlI1frYPc/VMKJNB7DFeDQ==}
+  /[email protected]([email protected]):
+    resolution: {integrity: 
sha512-BzfiMdPqDHBlysx4g26NkfVHSQwGD/lTRausmxN9sFyjXz34OWfsbkh0YsVkX84Hu65In1fFlxHiG39Tr4Vojg==}
     hasBin: true
     peerDependencies:
       typescript: '*'
     dependencies:
-      '@vue/language-core': 1.8.8([email protected])
-      '@vue/typescript': 1.8.8([email protected])
+      '@vue/language-core': 1.8.11([email protected])
+      '@vue/typescript': 1.8.11([email protected])
       semver: 7.5.4
       typescript: 5.1.6
     dev: true
@@ -3785,15 +3910,62 @@ packages:
       vue: 3.3.4
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==}
+    engines: {node: '>=10.13.0'}
+    dependencies:
+      glob-to-regexp: 0.4.1
+      graceful-fs: 4.2.11
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
     engines: {node: '>=10.13.0'}
-    dev: true
 
   /[email protected]:
     resolution: {integrity: 
sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==}
     dev: true
 
+  /[email protected]:
+    resolution: {integrity: 
sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==}
+    engines: {node: '>=10.13.0'}
+    hasBin: true
+    peerDependencies:
+      webpack-cli: '*'
+    peerDependenciesMeta:
+      webpack-cli:
+        optional: true
+    dependencies:
+      '@types/eslint-scope': 3.7.4
+      '@types/estree': 1.0.1
+      '@webassemblyjs/ast': 1.11.6
+      '@webassemblyjs/wasm-edit': 1.11.6
+      '@webassemblyjs/wasm-parser': 1.11.6
+      acorn: 8.10.0
+      acorn-import-assertions: 1.9.0([email protected])
+      browserslist: 4.21.10
+      chrome-trace-event: 1.0.3
+      enhanced-resolve: 5.15.0
+      es-module-lexer: 1.3.1
+      eslint-scope: 5.1.1
+      events: 3.3.0
+      glob-to-regexp: 0.4.1
+      graceful-fs: 4.2.11
+      json-parse-even-better-errors: 2.3.1
+      loader-runner: 4.3.0
+      mime-types: 2.1.35
+      neo-async: 2.6.2
+      schema-utils: 3.3.0
+      tapable: 2.2.1
+      terser-webpack-plugin: 5.3.9([email protected])
+      watchpack: 2.4.0
+      webpack-sources: 3.2.3
+    transitivePeerDependencies:
+      - '@swc/core'
+      - esbuild
+      - uglify-js
+    dev: false
+
   /[email protected]:
     resolution: {integrity: 
sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
     dependencies:
@@ -3847,12 +4019,11 @@ packages:
     resolution: {integrity: 
sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
     dev: true
 
-  /[email protected]:
-    resolution: {integrity: 
sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==}
-    engines: {node: '>= 14'}
-    dev: true
-
   /[email protected]:
     resolution: {integrity: 
sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
     engines: {node: '>=10'}
     dev: true
+
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
diff --git a/paimon-web-ui-new/postcss.config.js 
b/paimon-web-ui-new/postcss.config.js
index e041349..0d09545 100644
--- a/paimon-web-ui-new/postcss.config.js
+++ b/paimon-web-ui-new/postcss.config.js
@@ -16,6 +16,5 @@ specific language governing permissions and limitations
 under the License. */
 
 export const plugins = {
-  tailwindcss: {},
-  autoprefixer: {},
-};
+  autoprefixer: {}
+}
diff --git a/paimon-web-ui-new/src/App.tsx b/paimon-web-ui-new/src/App.tsx
index c61a3c9..a7119a6 100644
--- a/paimon-web-ui-new/src/App.tsx
+++ b/paimon-web-ui-new/src/App.tsx
@@ -15,13 +15,38 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
+import {
+  darkTheme,
+  dateZhCN,
+  dateEnUS,
+  zhCN,
+  enUS
+} from 'naive-ui'
+import { useConfigStore } from '@/store/config'
+import themes from '@/themes'
+
 export default defineComponent({
   name: 'App',
   setup() {
+    const configStore = useConfigStore()
+    const theme = computed(() => configStore.getCurrentTheme === 'dark' ? 
darkTheme : undefined)
+    const themeOverrides = computed(() => themes[theme.value ? 'dark' : 
'light'])
+    const locale = computed(() => configStore.getCurrentLocale)
 
-    return {}
+    return {
+      theme,
+      themeOverrides,
+      locale
+    }
   },
   render() {
-    return <router-view />
+    return <n-config-provider
+      theme={this.theme}
+      theme-overrides={this.themeOverrides}
+      locale={this.locale === 'en' ? enUS : zhCN}
+      date-locale={this.locale === 'en' ? dateEnUS : dateZhCN}
+    >
+      <router-view />
+    </n-config-provider>
   }
 })
diff --git a/paimon-web-ui-new/src/assets/tailMain.css 
b/paimon-web-ui-new/src/api/index.ts
similarity index 90%
copy from paimon-web-ui-new/src/assets/tailMain.css
copy to paimon-web-ui-new/src/api/index.ts
index 0692991..11cbc9a 100644
--- a/paimon-web-ui-new/src/assets/tailMain.css
+++ b/paimon-web-ui-new/src/api/index.ts
@@ -15,7 +15,4 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-/* tailMain.css */ 
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+export * from './models/login'
diff --git a/paimon-web-ui-new/tailwind.config.js 
b/paimon-web-ui-new/src/api/models/login.ts
similarity index 72%
copy from paimon-web-ui-new/tailwind.config.js
copy to paimon-web-ui-new/src/api/models/login.ts
index 96f869c..a10545b 100644
--- a/paimon-web-ui-new/tailwind.config.js
+++ b/paimon-web-ui-new/src/api/models/login.ts
@@ -15,13 +15,16 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-/** @type {import('tailwindcss').Config} */
-export const content = ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'];
-export const theme = {
-  extend: {},
-};
-export const variants = {
-  extend: {},
-};
-export const plugins = [];
+import httpRequest from '../request'
+import type ResponseOptions from '../types'
 
+interface LoginOptions {
+  ldapLogin: boolean
+  password: string
+  rememberMe: boolean
+  username: string
+}
+
+export const onLogin = () => {
+  return httpRequest.post<LoginOptions, ResponseOptions<any>>('/login')
+}
diff --git a/paimon-web-ui-new/src/api/request.ts 
b/paimon-web-ui-new/src/api/request.ts
new file mode 100644
index 0000000..0e19da8
--- /dev/null
+++ b/paimon-web-ui-new/src/api/request.ts
@@ -0,0 +1,107 @@
+/* Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. */
+
+import { createAxle } from '@varlet/axle'
+import { createUseAxle, type UseAxleInstance, type UseAxleOptions } from 
'@varlet/axle/use'
+
+import type ResponseOptions from './types'
+
+type RequestConfigOptions<D, R = any, P = Record<string, any>> = 
Omit<UseAxleOptions<D, ResponseOptions<R>, P>, 'data'> & Pick<UseAxleOptions<D, 
R, P>, 'data'>
+
+type AxleConfigOptions<R = any, P = Record<string, any>> = 
Omit<RequestConfigOptions<R, P>, 'url' | 'runner'>
+
+export type HttpRequestOptions<R, P = any> = Omit<AxleConfigOptions<R, P>, 
'data'>
+
+const axle = createAxle({
+  baseURL: '/api'
+})
+
+axle.axios.interceptors.request.use(
+  (config) => {
+    // token here
+    const headers = Object.assign({}, config.headers, {
+      'token': '',
+    });
+    return Object.assign({}, config, { headers });
+  },
+  function (error) {
+    return Promise.reject(error);
+  }
+);
+
+axle.axios.interceptors.response.use(
+  (response) => {
+    const { code, message } = response.data
+
+    if (code !== 200 && message) {
+      // do something there
+    }
+
+    return response.data
+  },
+  (error) => {
+    // do something there
+    return Promise.reject(error)
+  }
+)
+
+const useAxle = createUseAxle({
+  // any transform in here
+})
+
+class HttpRequest {
+  private request<R = any, P = any>(options: RequestConfigOptions<R, P>): 
UseAxleInstance<R, ResponseOptions<P>, Record<string, any>> {
+    return useAxle(options)
+  }
+
+  get<R = any, P = any>(url: string, options: AxleConfigOptions<R, P>) {
+    return this.request<R, P>({
+      url,
+      runner: axle.get,
+      ...options
+    })
+  }
+
+  post<R = any, P = any>(url: string, options: HttpRequestOptions<R, P> = {}) {
+    return this.request<R, P>({
+      url,
+      runner: axle.post,
+      data: null as any,
+      ...options
+    })
+  }
+
+  put<R = any, P = any>(url: string, options: HttpRequestOptions<R, P> = {}) {
+    return this.request<R, P>({
+      url,
+      runner: axle.put,
+      data: null as any,
+      ...options
+    })
+  }
+
+  delete<R = any, P = any>(url: string, options: HttpRequestOptions<R, P> = 
{}) {
+    return this.request<R, P>({
+      url,
+      runner: axle.delete,
+      data: null as any,
+      ...options
+    })
+  }
+}
+
+export default new HttpRequest()
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/assets/tailMain.css 
b/paimon-web-ui-new/src/api/types.ts
similarity index 89%
copy from paimon-web-ui-new/src/assets/tailMain.css
copy to paimon-web-ui-new/src/api/types.ts
index 0692991..2ea5b98 100644
--- a/paimon-web-ui-new/src/assets/tailMain.css
+++ b/paimon-web-ui-new/src/api/types.ts
@@ -15,7 +15,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-/* tailMain.css */ 
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+export default interface ResponseOptions<P> {
+  code: number
+  data: P
+  msg: string
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/assets/logo.svg 
b/paimon-web-ui-new/src/assets/logo.svg
new file mode 100644
index 0000000..ffb904f
--- /dev/null
+++ b/paimon-web-ui-new/src/assets/logo.svg
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<svg id="_图层_2" data-name="图层 2" xmlns="http://www.w3.org/2000/svg"; viewBox="0 
0 307.34 218.61">
+  <defs>
+    <style>
+      .cls-1 {
+        fill: #2475FE;
+      }
+    </style>
+  </defs>
+  <g id="_图层_1-2" data-name="图层 1">
+    <path class="cls-1" 
d="m307.34,46.55l-50.19,14.1c.47.94.92,1.89,1.36,2.84l48.83-16.94Z"/>
+    <path class="cls-1" 
d="m62.72,170.47l-12.62,25.69H0l22.99,4.72c7.55,1.55,14.28,5.8,18.93,11.96l20.16-23.6c3.71-4.16,7.5-8.23,11.36-12.24-2.97-3.76-5.69-7.71-8.15-11.84-.86,1.74-1.72,3.51-2.56,5.31Z"/>
+    <path class="cls-1" 
d="m105.58,111.28c-3.51-10.04-11.49-18.15-21.95-21.65l-12.74-4.26h80.4c19.85-7.47,43.6-13.02,72.56-17.39l19.6-3.48,13.7-3.85C239.25,24.7,202.14,0,159.25,0,98.89,0,49.95,48.94,49.95,109.3c0,20.41,5.6,39.51,15.34,55.85,11.13-22.5,23.81-40.04,40.29-53.88Z"/>
+    <path class="cls-1" 
d="m232.35,72.57c-60.11,22.53-114.4,58.22-158.92,104.43,20.02,25.34,51.02,41.61,85.82,41.61,60.37,0,109.3-48.94,109.3-109.3,0-16.36-3.6-31.88-10.04-45.81l-26.17,9.08Z"/>
+  </g>
+</svg>
\ No newline at end of file
diff --git a/paimon-web-ui-new/tailwind.config.js 
b/paimon-web-ui-new/src/composables/locales.ts
similarity index 76%
rename from paimon-web-ui-new/tailwind.config.js
rename to paimon-web-ui-new/src/composables/locales.ts
index 96f869c..059c3e4 100644
--- a/paimon-web-ui-new/tailwind.config.js
+++ b/paimon-web-ui-new/src/composables/locales.ts
@@ -15,13 +15,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-/** @type {import('tailwindcss').Config} */
-export const content = ['./index.html', './src/**/*.{vue,js,ts,jsx,tsx}'];
-export const theme = {
-  extend: {},
-};
-export const variants = {
-  extend: {},
-};
-export const plugins = [];
+import { useI18n } from 'vue-i18n'
 
+export const useLocaleHooks = () => {
+  const { t } = useI18n()
+
+  return {
+    t
+  }
+}
diff --git a/paimon-web-ui-new/postcss.config.js 
b/paimon-web-ui-new/src/locales/en/index.ts
similarity index 91%
copy from paimon-web-ui-new/postcss.config.js
copy to paimon-web-ui-new/src/locales/en/index.ts
index e041349..12cbef8 100644
--- a/paimon-web-ui-new/postcss.config.js
+++ b/paimon-web-ui-new/src/locales/en/index.ts
@@ -15,7 +15,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export const plugins = {
-  tailwindcss: {},
-  autoprefixer: {},
-};
+import login from './modules/login'
+
+export default {
+  login
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/assets/tailMain.css 
b/paimon-web-ui-new/src/locales/en/modules/login.ts
similarity index 79%
copy from paimon-web-ui-new/src/assets/tailMain.css
copy to paimon-web-ui-new/src/locales/en/modules/login.ts
index 0692991..28bf49b 100644
--- a/paimon-web-ui-new/src/assets/tailMain.css
+++ b/paimon-web-ui-new/src/locales/en/modules/login.ts
@@ -15,7 +15,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-/* tailMain.css */ 
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+export default {
+  login: 'Login',
+  username: 'Username',
+  password: 'Password',
+  username_tips: 'Please input username',
+  password_tips: 'Please input password',
+  light: 'Light',
+  dark: 'Dark'
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/App.tsx 
b/paimon-web-ui-new/src/locales/index.ts
similarity index 78%
copy from paimon-web-ui-new/src/App.tsx
copy to paimon-web-ui-new/src/locales/index.ts
index c61a3c9..0ee3fb7 100644
--- a/paimon-web-ui-new/src/App.tsx
+++ b/paimon-web-ui-new/src/locales/index.ts
@@ -15,13 +15,18 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export default defineComponent({
-  name: 'App',
-  setup() {
+import { createI18n } from 'vue-i18n'
+import en from './en'
+import zh from './zh'
 
-    return {}
-  },
-  render() {
-    return <router-view />
+const i18n = createI18n({
+  locale: 'en',
+  legacy: false,
+  fallbackLocale: 'zh',
+  messages: {
+    en,
+    zh
   }
 })
+
+export default i18n
\ No newline at end of file
diff --git a/paimon-web-ui-new/postcss.config.js 
b/paimon-web-ui-new/src/locales/zh/index.ts
similarity index 91%
copy from paimon-web-ui-new/postcss.config.js
copy to paimon-web-ui-new/src/locales/zh/index.ts
index e041349..12cbef8 100644
--- a/paimon-web-ui-new/postcss.config.js
+++ b/paimon-web-ui-new/src/locales/zh/index.ts
@@ -15,7 +15,8 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export const plugins = {
-  tailwindcss: {},
-  autoprefixer: {},
-};
+import login from './modules/login'
+
+export default {
+  login
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/assets/tailMain.css 
b/paimon-web-ui-new/src/locales/zh/modules/login.ts
similarity index 79%
rename from paimon-web-ui-new/src/assets/tailMain.css
rename to paimon-web-ui-new/src/locales/zh/modules/login.ts
index 0692991..38b5f3e 100644
--- a/paimon-web-ui-new/src/assets/tailMain.css
+++ b/paimon-web-ui-new/src/locales/zh/modules/login.ts
@@ -15,7 +15,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-/* tailMain.css */ 
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
+export default {
+  login: '登录',
+  username: '用户名',
+  password: '密码',
+  username_tips: '请输入用户名',
+  password_tips: '请输入密码',
+  light: '浅色',
+  dark: '暗色'
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/main.ts b/paimon-web-ui-new/src/main.ts
index e3353be..3fb07b3 100644
--- a/paimon-web-ui-new/src/main.ts
+++ b/paimon-web-ui-new/src/main.ts
@@ -18,16 +18,16 @@ under the License. */
 import { createApp } from 'vue'
 import { createPinia } from 'pinia'
 import piniaPluginPersistedstate from 'pinia-plugin-persistedstate'
-
 import App from './App'
 import router from './router'
 import naive from 'naive-ui'
+import i18n from './locales'
 import { Setting } from './config'
-import './assets/tailMain.css'
 
 const app = createApp(App)
-
 const pinia = createPinia()
+
+app.use(i18n)
 app.use(pinia)
 pinia.use(piniaPluginPersistedstate)
 app.use(router)
diff --git a/paimon-web-ui-new/src/router/index.ts 
b/paimon-web-ui-new/src/router/index.ts
index b66de13..0ab4986 100644
--- a/paimon-web-ui-new/src/router/index.ts
+++ b/paimon-web-ui-new/src/router/index.ts
@@ -27,6 +27,11 @@ const router = createRouter({
       // this generates a separate chunk (About.[hash].js) for this route
       // which is lazy-loaded when the route is visited.
       component: () => import('../views/HomePage')
+    },
+    {
+      path: '/login',
+      name: 'login',
+      component: () => import('../views/login')
     }
   ]
 })
diff --git a/paimon-web-ui-new/src/App.tsx 
b/paimon-web-ui-new/src/store/config/index.ts
similarity index 59%
copy from paimon-web-ui-new/src/App.tsx
copy to paimon-web-ui-new/src/store/config/index.ts
index c61a3c9..ec3e8bf 100644
--- a/paimon-web-ui-new/src/App.tsx
+++ b/paimon-web-ui-new/src/store/config/index.ts
@@ -15,13 +15,29 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export default defineComponent({
-  name: 'App',
-  setup() {
+type Theme = 'dark' | 'light'
+type Locale = 'en' | 'zh'
 
-    return {}
+export const useConfigStore = defineStore({
+  id: 'config',
+  state: (): { theme: Theme, locale: Locale } => ({
+    theme: 'light',
+    locale: 'zh'
+  }),
+  getters: {
+    getCurrentLocale(): Locale {
+      return this.locale
+    },
+    getCurrentTheme(): Theme {
+      return this.theme
+    }
   },
-  render() {
-    return <router-view />
+  actions: {
+    setCurrentLocale(locale: Locale): void {
+      this.locale = locale
+    },
+    setCurrentTheme(theme: Theme): void {
+      this.theme = theme
+    }
   }
-})
+})
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/App.tsx 
b/paimon-web-ui-new/src/themes/index.ts
similarity index 85%
copy from paimon-web-ui-new/src/App.tsx
copy to paimon-web-ui-new/src/themes/index.ts
index c61a3c9..ade0655 100644
--- a/paimon-web-ui-new/src/App.tsx
+++ b/paimon-web-ui-new/src/themes/index.ts
@@ -15,13 +15,12 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export default defineComponent({
-  name: 'App',
-  setup() {
+import dark from './modules/dark'
+import light from './modules/light'
 
-    return {}
-  },
-  render() {
-    return <router-view />
-  }
-})
+const themes = {
+  dark,
+  light
+}
+
+export default themes
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/themes/modules/dark.ts 
b/paimon-web-ui-new/src/themes/modules/dark.ts
new file mode 100644
index 0000000..0a712c5
--- /dev/null
+++ b/paimon-web-ui-new/src/themes/modules/dark.ts
@@ -0,0 +1,73 @@
+/* Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. */
+
+import type { GlobalThemeOverrides } from 'naive-ui'
+
+const textColor = '#EFEFEF'
+
+const dark: GlobalThemeOverrides = {
+  common: {
+    bodyColor: '#131313',
+
+    primaryColor: '#2475FE',
+    primaryColorHover: '#3a7bfa',
+    primaryColorPressed: '#1a6efb',
+    primaryColorSuppl: '#0060fa',
+
+    infoColor: '#A6A6A6',
+    successColor: '#00B69B',
+    warningColor: '#FCBE2D',
+    errorColor: '#EC4C4D'
+  },
+  Card: {
+    color: '#1B1C1D',
+    borderRadius: '8px'
+  },
+  Button: {
+    textColorPrimary: textColor,
+    textColorHoverPrimary: textColor,
+    textColorPressedPrimary: textColor,
+    textColorFocusPrimary: textColor,
+    textColorDisabledPrimary: textColor,
+
+    textColorInfo: textColor,
+    textColorHoverInfo: textColor,
+    textColorPressedInfo: textColor,
+    textColorFocusInfo: textColor,
+    textColorDisabledInfo: textColor,
+
+    textColorSuccess: textColor,
+    textColorHoverSuccess: textColor,
+    textColorPressedSuccess: textColor,
+    textColorFocusSuccess: textColor,
+    textColorDisabledSuccess: textColor,
+
+    textColorWarning: textColor,
+    textColorHoverWarning: textColor,
+    textColorPressedWarning: textColor,
+    textColorFocusWarning: textColor,
+    textColorDisabledWarning: textColor,
+
+    textColorError: textColor,
+    textColorHoverError: textColor,
+    textColorPressedError: textColor,
+    textColorFocusError: textColor,
+    textColorDisabledError: textColor
+  }
+}
+
+export default dark
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/App.tsx 
b/paimon-web-ui-new/src/themes/modules/light.ts
similarity index 63%
copy from paimon-web-ui-new/src/App.tsx
copy to paimon-web-ui-new/src/themes/modules/light.ts
index c61a3c9..5e91405 100644
--- a/paimon-web-ui-new/src/App.tsx
+++ b/paimon-web-ui-new/src/themes/modules/light.ts
@@ -15,13 +15,26 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export default defineComponent({
-  name: 'App',
-  setup() {
+import type { GlobalThemeOverrides } from 'naive-ui'
 
-    return {}
+const light: GlobalThemeOverrides = {
+  common: {
+    bodyColor: '#F4F5F6',
+
+    primaryColor: '#2475FE',
+    primaryColorHover: '#3a7bfa',
+    primaryColorPressed: '#1a6efb',
+    primaryColorSuppl: '#0060fa',
+
+    infoColor: '#A6A6A6',
+    successColor: '#00B69B',
+    warningColor: '#FCBE2D',
+    errorColor: '#EC4C4D'
   },
-  render() {
-    return <router-view />
+  Card: {
+    color: '#FAFAFA',
+    borderRadius: '8px'
   }
-})
+}
+
+export default light
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/App.tsx 
b/paimon-web-ui-new/src/views/login/index.module.scss
similarity index 83%
copy from paimon-web-ui-new/src/App.tsx
copy to paimon-web-ui-new/src/views/login/index.module.scss
index c61a3c9..83efba4 100644
--- a/paimon-web-ui-new/src/App.tsx
+++ b/paimon-web-ui-new/src/views/login/index.module.scss
@@ -15,13 +15,17 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-export default defineComponent({
-  name: 'App',
-  setup() {
+.container {
+  height: 100vh;
+  width: 100vw;
+}
 
-    return {}
-  },
-  render() {
-    return <router-view />
-  }
-})
+.form-container {
+  padding: 30px 50px;
+  width: 488px;
+}
+
+.logo {
+  height: 80px;
+  width: 80px;
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/views/login/index.tsx 
b/paimon-web-ui-new/src/views/login/index.tsx
new file mode 100644
index 0000000..ce09608
--- /dev/null
+++ b/paimon-web-ui-new/src/views/login/index.tsx
@@ -0,0 +1,117 @@
+/* Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License. */
+
+import { useForm } from './use-form'
+import { useConfigStore } from '@/store/config'
+import i18n from '@/locales'
+import logoImage from '@/assets/logo.svg'
+import styles from './index.module.scss'
+
+export default defineComponent({
+  name: 'LoginPage',
+  setup() {
+    const { state, handleLogin } = useForm()
+
+    const configStore = useConfigStore()
+
+    const handleLocale = () => {
+      configStore.setCurrentLocale(configStore.getCurrentLocale === 'zh' ? 
'en' : 'zh')
+      i18n.global.locale.value = configStore.getCurrentLocale === 'zh' ? 'en' 
: 'zh'
+    }
+
+    return {
+      configStore,
+      handleLogin,
+      handleLocale,
+      ...toRefs(state)
+    }
+  },
+  render() {
+    return <n-layout>
+      <n-space justify='center' align='center' class={styles['container']}>
+        <n-card bordered={false} content-style={{padding: 0, width: '600px'}}>
+          <div class={styles['form-container']}>
+            <n-space align='center' justify='center'>
+              <img class={styles['logo']} src={logoImage} alt='logo-image'/>
+              <h1>Apache Paimon</h1>
+            </n-space>
+            <n-form
+              ref='loginForm'
+              model={this.model}
+              label-width='auto'
+              style={{marginTop: '50px'}}
+            >
+              <n-form-item
+                label={i18n.global.t('login.username')}
+                path='userName'
+              >
+                <n-input
+                  clearable
+                  v-model={[this.model.username, 'value']}
+                  placeholder={i18n.global.t('login.username_tips')}
+                  autofocus
+                  size='large'
+                />
+              </n-form-item>
+              <n-form-item
+                label={i18n.global.t('login.password')}
+                path='userPassword'
+              >
+                <n-input
+                  clearable
+                  type='password'
+                  v-model={[this.model.password, 'value']}
+                  placeholder={i18n.global.t('login.password_tips')}
+                  size='large'
+                />
+              </n-form-item>
+              <n-button
+                size='large'
+                type='primary'
+                disabled={!this.model.password || !this.model.username}
+                style={{ width: '100%' }}
+                onClick={this.handleLogin}
+              >
+                {i18n.global.t('login.login')}
+              </n-button>
+            </n-form>
+            <n-space justify='center' style={{marginTop: '80px'}}>
+              <n-button
+                quaternary
+                type='primary'
+                style={{width: '100px'}}
+                onClick={() => this.configStore.setCurrentTheme(
+                  this.configStore.getCurrentTheme === 'light' ? 'dark' : 
'light'
+                )}
+              >
+                {i18n.global.t('login.' + 
String(this.configStore.getCurrentTheme === 'light' ? 'dark' : 'light'))}
+              </n-button>
+              <n-button
+                quaternary
+                type='primary'
+                style={{width: '100px'}}
+                onClick={this.handleLocale}
+              >
+                {this.configStore.getCurrentLocale === 'zh' ? '简体中文' : 
'English'}
+              </n-button>
+            </n-space>
+          </div>
+        </n-card>
+      </n-space>
+    </n-layout>
+  }
+})
\ No newline at end of file
diff --git a/paimon-web-ui-new/src/router/index.ts 
b/paimon-web-ui-new/src/views/login/use-form.ts
similarity index 52%
copy from paimon-web-ui-new/src/router/index.ts
copy to paimon-web-ui-new/src/views/login/use-form.ts
index b66de13..550fd21 100644
--- a/paimon-web-ui-new/src/router/index.ts
+++ b/paimon-web-ui-new/src/views/login/use-form.ts
@@ -15,20 +15,38 @@ KIND, either express or implied.  See the License for the
 specific language governing permissions and limitations
 under the License. */
 
-import { createRouter, createWebHistory } from 'vue-router'
+import { onLogin } from '@/api'
+import type { FormValidationError } from 'naive-ui'
 
-const router = createRouter({
-  history: createWebHistory(import.meta.env.BASE_URL),
-  routes: [
-    {
-      path: '/',
-      name: 'homepage',
-      // route level code-splitting
-      // this generates a separate chunk (About.[hash].js) for this route
-      // which is lazy-loaded when the route is visited.
-      component: () => import('../views/HomePage')
+export function useForm() {
+  const [userInfo, onSubmit] = onLogin()
+
+  const state = reactive({
+    loginForm: ref(),
+    model: {
+      username: '',
+      password: ''
     }
-  ]
-})
+  })
+
+  const handleLogin = () => {
+    state.loginForm.validate(async (errors: Array<FormValidationError>) => {
+      if (!errors) {
+        await onSubmit({
+          params: {
+            username: state.model.username,
+            password: state.model.password,
+            ldapLogin: false,
+            rememberMe: true
+          }
+        })
+        console.log(userInfo)
+      }
+    })
+  }
 
-export default router
+  return {
+    state,
+    handleLogin
+  }
+}
\ No newline at end of file
diff --git a/paimon-web-ui-new/tsconfig.json b/paimon-web-ui-new/tsconfig.json
index 66b5e57..78f134a 100644
--- a/paimon-web-ui-new/tsconfig.json
+++ b/paimon-web-ui-new/tsconfig.json
@@ -7,5 +7,5 @@
     {
       "path": "./tsconfig.app.json"
     }
-  ]
+  ],
 }
diff --git a/paimon-web-ui-new/vite.config.ts b/paimon-web-ui-new/vite.config.ts
index e47f897..90362dc 100644
--- a/paimon-web-ui-new/vite.config.ts
+++ b/paimon-web-ui-new/vite.config.ts
@@ -26,6 +26,14 @@ import { NaiveUiResolver } from 
'unplugin-vue-components/resolvers'
 
 // https://vitejs.dev/config/
 export default defineConfig({
+  server: {
+    proxy: {
+      '/api': {
+        target: 'http://43.143.237.199:10088',
+        changeOrigin: true,
+      }
+    }
+  },
   plugins: [
     vue(),
     vueJsx(),
@@ -39,24 +47,23 @@ export default defineConfig({
             'useDialog',
             'useMessage',
             'useNotification',
-            'useLoadingBar',
-          ],
-        },
+            'useLoadingBar'
+          ]
+        }
       ],
       dts: './auto-imports.d.ts',
       eslintrc: {
-        enabled: false,
-      },
+        enabled: false
+      }
     }),
     Components({
-      resolvers: [NaiveUiResolver()],
-    }),
+      resolvers: [NaiveUiResolver()]
+    })
   ],
   css: {
     postcss: {
       plugins: [
-        require("tailwindcss"),
-        require("autoprefixer"),
+        require("autoprefixer")
       ]
     }
   },
diff --git a/pom.xml b/pom.xml
index 93f1464..151ffe2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -358,6 +358,7 @@ under the License.
                         <!-- artifacts created during release process -->
                         <exclude>release/**</exclude>
                         <exclude>paimon-web-ui/node_modules/**</exclude>
+                        <exclude>paimon-web-ui-new/node_modules/**</exclude>
                     </excludes>
                 </configuration>
             </plugin>

Reply via email to