diff --git a/.env.development b/.env.development
new file mode 100644
index 0000000000000000000000000000000000000000..b630d8702119e8d1e53943e703b622f5dbb5f580
--- /dev/null
+++ b/.env.development
@@ -0,0 +1,3 @@
+VITE_APP_ID = 623c3c2f1eca5ad5fca6c58a
+VITE_LOGIN_URL = https://omapi.test.osinfra.cn
+VITE_LOGOUT_URL = https://openeuler-usercenter.test.osinfra.cn
\ No newline at end of file
diff --git a/.env.production b/.env.production
new file mode 100644
index 0000000000000000000000000000000000000000..533f0c707122da09cac8b056aeb519baaa5eee44
--- /dev/null
+++ b/.env.production
@@ -0,0 +1,3 @@
+VITE_APP_ID = 623c3c2f1eca5ad5fca6c58a
+VITE_LOGIN_URL = https://openeuler-usercenter.test.osinfra.cn
+VITE_LOGOUT_URL = https://openeuler-usercenter.test.osinfra.cn
\ No newline at end of file
diff --git a/.eslintrc.cjs b/.eslintrc.cjs
new file mode 100644
index 0000000000000000000000000000000000000000..6f40582dda70241afd3bbd38da6853278bef4aaf
--- /dev/null
+++ b/.eslintrc.cjs
@@ -0,0 +1,15 @@
+/* eslint-env node */
+require('@rushstack/eslint-patch/modern-module-resolution')
+
+module.exports = {
+ root: true,
+ 'extends': [
+ 'plugin:vue/vue3-essential',
+ 'eslint:recommended',
+ '@vue/eslint-config-typescript',
+ '@vue/eslint-config-prettier/skip-formatting'
+ ],
+ parserOptions: {
+ ecmaVersion: 'latest'
+ }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..8ee54e8d343e466a213c8c30aa04be77126b170d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,30 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+.DS_Store
+dist
+dist-ssr
+coverage
+*.local
+
+/cypress/videos/
+/cypress/screenshots/
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+*.tsbuildinfo
diff --git a/.npmrc b/.npmrc
new file mode 100644
index 0000000000000000000000000000000000000000..7f082f23a3cccc824ba94eb6f6960fa6446ab17c
--- /dev/null
+++ b/.npmrc
@@ -0,0 +1 @@
+registry=https://registry.npmmirror.com
\ No newline at end of file
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000000000000000000000000000000000000..66d4c0d9d803a7017653eef72220ccacc9355a19
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://json.schemastore.org/prettierrc",
+ "semi": true,
+ "tabWidth": 2,
+ "singleQuote": true,
+ "printWidth": 160,
+ "trailingComma": "es5"
+}
diff --git a/.vite/deps/_metadata.json b/.vite/deps/_metadata.json
new file mode 100644
index 0000000000000000000000000000000000000000..d9b556fc2a3b978a5ada9a3fd9eb0a94c096daf5
--- /dev/null
+++ b/.vite/deps/_metadata.json
@@ -0,0 +1,8 @@
+{
+ "hash": "5eafe6e8",
+ "configHash": "78f48269",
+ "lockfileHash": "e3b0c442",
+ "browserHash": "ff4925f0",
+ "optimized": {},
+ "chunks": {}
+}
\ No newline at end of file
diff --git a/.vite/deps/package.json b/.vite/deps/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..3dbc1ca591c0557e35b6004aeba250e6a70b56e3
--- /dev/null
+++ b/.vite/deps/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000000000000000000000000000000000000..009a534854de25d5e19b02bc42f012129ab8f962
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,8 @@
+{
+ "recommendations": [
+ "Vue.volar",
+ "Vue.vscode-typescript-vue-plugin",
+ "dbaeumer.vscode-eslint",
+ "esbenp.prettier-vscode"
+ ]
+}
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..169b2cd3be3742ad6eae786385f3144ceb8be532
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,101 @@
+FROM node:18.14.1 as Builder
+
+RUN mkdir -p /home/easysoftware/web
+WORKDIR /home/easysoftware/web
+COPY . /home/easysoftware/web
+
+RUN npm install pnpm -g
+RUN pnpm install
+RUN pnpm build-only
+
+FROM swr.cn-north-4.myhuaweicloud.com/opensourceway/openeuler/nginx:1.24.0-22.03-lts-sp1 as NginxBuilder
+
+FROM openeuler/openeuler:22.03-lts-sp1
+
+ENV PATH /usr/share/nginx/sbin:$PATH
+ENV NGINX_CONFIG_FILE /etc/nginx/nginx.conf
+ENV NGINX_CONFIG_PATH /etc/nginx/
+ENV NGINX_PID /var/run/nginx.pid
+ENV NGINX_USER nginx
+ENV NGINX_GROUP nginx
+ENV NGINX_BIN /usr/share/nginx/sbin/
+ENV NGINX_HOME /usr/share/nginx/
+ENV NGINX_EXE_FILE /usr/share/nginx/sbin/nginx
+ENV DST_PATH /etc/nginx/cert
+
+COPY --from=NginxBuilder /usr/share/nginx /usr/share/nginx
+COPY --from=NginxBuilder /usr/share/nginx/sbin/nginx /usr/share/nginx/sbin/nginx
+COPY --from=NginxBuilder /etc/nginx/modules /etc/nginx/modules
+COPY --from=NginxBuilder /etc/nginx/geoip /etc/nginx/geoip
+COPY --from=NginxBuilder /etc/nginx/mime.types /etc/nginx/mime.types
+
+COPY --from=Builder /home/easysoftware/web/dist /usr/share/nginx/www/
+
+RUN yum update -y \
+ && yum install -y findutils passwd shadow \
+ && find /usr/share/nginx/www -type d -print0| xargs -0 chmod 500 \
+ && find /usr/share/nginx/www -type f -print0| xargs -0 chmod 400
+
+COPY ./deploy/nginx/nginx.conf /etc/nginx/nginx.conf
+
+RUN touch /var/run/nginx.pid \
+ && groupadd -g 1000 nginx \
+ && useradd -u 1000 -g nginx -s /sbin/nologin nginx \
+ && chown -R nginx:nginx /usr/share/nginx \
+ && find /usr/share/nginx -type d -print0 | xargs -0 chmod 500 \
+ && chmod 500 /usr/share/nginx/sbin/nginx \
+ && mkdir -p /var/log/nginx \
+ && chown -R nginx:nginx /var/log/nginx \
+ && chmod -R 640 /var/log/nginx \
+ && mkdir -p /var/lib/nginx/tmp/client_body \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/client_body \
+ && mkdir -p /var/lib/nginx/tmp/fastcgi \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/fastcgi \
+ && mkdir -p /var/lib/nginx/tmp/proxy \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/proxy \
+ && mkdir -p /var/lib/nginx/tmp/scgi \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/scgi \
+ && mkdir -p /var/lib/nginx/tmp/uwsgi \
+ && chown -R nginx:nginx /var/lib/nginx/tmp/uwsgi \
+ && chmod -R 500 /var/lib/nginx/ \
+ && chmod -R 750 /var/lib/nginx/tmp/proxy \
+ && chown -R nginx:nginx /var/lib/nginx/ \
+ && chown -R nginx:nginx /var/run/nginx.pid \
+ && chmod 640 /var/run/nginx.pid \
+ && chown -R nginx:nginx /etc/nginx \
+ && chmod 550 /etc/nginx \
+ && chmod 550 /etc/nginx/geoip/ \
+ && chmod 440 /etc/nginx/geoip/* \
+ && chmod 550 /etc/nginx/modules \
+ && chmod 440 /etc/nginx/modules/* \
+ && chmod 440 /etc/nginx/nginx.conf \
+ && chmod 440 /etc/nginx/mime.types \
+ && rm -rf /usr/share/nginx/html/ \
+ && rm -rf /usr/share/nginx/logs/ \
+ && echo "umask 0027" >> /etc/bashrc \
+ && echo "set +o history" >> /etc/bashrc \
+ && sed -i "s|HISTSIZE=1000|HISTSIZE=0|" /etc/profile \
+ && sed -i "s|PASS_MAX_DAYS[ \t]*99999|PASS_MAX_DAYS 30|" /etc/login.defs \
+ && passwd -l $NGINX_USER \
+ && yum clean all \
+ && usermod -s /sbin/nologin sync \
+ && usermod -s /sbin/nologin shutdown \
+ && usermod -s /sbin/nologin halt \
+ && echo "export TMOUT=1800 readonly TMOUT" >> /etc/profile \
+ && rm -rf /usr/bin/gdb* \
+ && rm -rf /usr/share/gdb \
+ && rm -rf /usr/share/gcc-10.3.1 \
+ && yum remove gdb-gdbserver findutils passwd shadow -y
+
+COPY ./deploy/monitor.sh ./deploy/entrypoint.sh /etc/nginx/
+RUN chmod 500 /etc/nginx/monitor.sh \
+ && chmod 500 /etc/nginx/entrypoint.sh \
+ && chown nginx:nginx /etc/nginx/monitor.sh \
+ && chown nginx:nginx /etc/nginx/entrypoint.sh
+
+EXPOSE 8080
+
+USER nginx
+
+ENTRYPOINT ["/etc/nginx/entrypoint.sh"]
+
diff --git a/README.md b/README.md
index ecd60f603a624df8c690df5d8a0215984ded5909..16cc4832be65890a4758a13793b8fd7c8deda0b4 100644
--- a/README.md
+++ b/README.md
@@ -1,37 +1,46 @@
-# easy-software
+# app
-#### 介绍
-EasySoftware is a website to show the application ecosystem supported by openEuler,it also provides convenient feedback channels and dynamic perception capabilities
+This template should help get you started developing with Vue 3 in Vite.
-#### 软件架构
-软件架构说明
+## Recommended IDE Setup
+[VSCode](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
-#### 安装教程
+## Type Support for `.vue` Imports in TS
-1. xxxx
-2. xxxx
-3. xxxx
+TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
-#### 使用说明
+If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
-1. xxxx
-2. xxxx
-3. xxxx
+1. Disable the built-in TypeScript Extension
+ 1) Run `Extensions: Show Built-in Extensions` from VSCode's command palette
+ 2) Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
+2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
-#### 参与贡献
+## Customize configuration
-1. Fork 本仓库
-2. 新建 Feat_xxx 分支
-3. 提交代码
-4. 新建 Pull Request
+See [Vite Configuration Reference](https://vitejs.dev/config/).
+## Project Setup
-#### 特技
+```sh
+pnpm install
+```
-1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md
-2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com)
-3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目
-4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
-5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help)
-6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)
+### Compile and Hot-Reload for Development
+
+```sh
+pnpm dev
+```
+
+### Type-Check, Compile and Minify for Production
+
+```sh
+pnpm build
+```
+
+### Lint with [ESLint](https://eslint.org/)
+
+```sh
+pnpm lint
+```
diff --git a/auto-imports.d.ts b/auto-imports.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..08908edd6a4136cad144e7a483f291f9d9618be2
--- /dev/null
+++ b/auto-imports.d.ts
@@ -0,0 +1,5 @@
+// Generated by 'unplugin-auto-import'
+export {}
+declare global {
+
+}
diff --git a/components.d.ts b/components.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..7c448a193fa0149ea5b6cac6d60ae4d801833604
--- /dev/null
+++ b/components.d.ts
@@ -0,0 +1,30 @@
+/* eslint-disable */
+/* prettier-ignore */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+export {}
+
+declare module 'vue' {
+ export interface GlobalComponents {
+ AppBanner: typeof import('./src/components/AppBanner.vue')['default']
+ AppFeedback: typeof import('./src/components/AppFeedback.vue')['default']
+ AppFooter: typeof import('./src/components/AppFooter.vue')['default']
+ AppHeader: typeof import('./src/components/AppHeader.vue')['default']
+ AppSection: typeof import('./src/components/AppSection.vue')['default']
+ ContentWrapper: typeof import('./src/components/ContentWrapper.vue')['default']
+ ExternalLink: typeof import('./src/components/ExternalLink.vue')['default']
+ FilterCheckbox: typeof import('./src/components/filter/FilterCheckbox.vue')['default']
+ FilterHeader: typeof import('./src/components/filter/FilterHeader.vue')['default']
+ HeaderNav: typeof import('./src/components/HeaderNav.vue')['default']
+ OCardItem: typeof import('./src/components/OCardItem.vue')['default']
+ OCodeCopy: typeof import('./src/components/OCodeCopy.vue')['default']
+ OTableItemNew: typeof import('./src/components/OTableItemNew.vue')['default']
+ ResultNotFound: typeof import('./src/components/ResultNotFound.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
+ SearchFilter: typeof import('./src/components/search/SearchFilter.vue')['default']
+ SearchRecommend: typeof import('./src/components/search/SearchRecommend.vue')['default']
+ SearchTab: typeof import('./src/components/search/SearchTab.vue')['default']
+ }
+}
diff --git a/deploy/entrypoint.sh b/deploy/entrypoint.sh
new file mode 100644
index 0000000000000000000000000000000000000000..4602342eca40777fa9eeb9ec2af3af6ecf53b913
--- /dev/null
+++ b/deploy/entrypoint.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+bash /etc/nginx/monitor.sh $DET_URL $DST_PATH &
+nginx -g 'daemon off;'
\ No newline at end of file
diff --git a/deploy/monitor.sh b/deploy/monitor.sh
new file mode 100644
index 0000000000000000000000000000000000000000..ebfb6e6cdda04044ae3aae1e2fd4cb4e6b57ba5b
--- /dev/null
+++ b/deploy/monitor.sh
@@ -0,0 +1,33 @@
+#!/bin/bash
+# this script is for website monitoring,
+# when website is up, delete all cert file.
+
+HOST=$1
+DST_PATH=$2
+
+delete_file() {
+ if [ -d $DST_PATH ]; then
+ echo "found $DST_PATH" > /dev/stdout
+ rm -rf $DST_PATH/*
+ else
+ echo "$DST_PATH not found" > /dev/stdout
+ fi
+}
+
+while true;
+do
+ sleep 20
+ RET=$(curl -sIL -w "%{http_code}\n" -o /dev/null $HOST)
+ if [ $RET == "200" ]; then
+ echo "website is up!!!" > /dev/stdout
+ delete_file
+ if [ $? -eq 0 ]; then
+ echo "successful delete file, exit" > /dev/stdout
+ break
+ else
+ echo "failed to delete file" > /dev/stdout
+ fi
+ else
+ echo "waiting for website up, http_status: $RET" > /dev/stdout
+ fi
+done
diff --git a/deploy/nginx/nginx.conf b/deploy/nginx/nginx.conf
new file mode 100644
index 0000000000000000000000000000000000000000..6fd26249bd4e24b59b80cebab9ec14e2840fba2f
--- /dev/null
+++ b/deploy/nginx/nginx.conf
@@ -0,0 +1,200 @@
+user $NGINX_USER;
+
+error_log /dev/stdout info;
+
+pid /var/run/nginx.pid;
+
+worker_processes 2;
+worker_rlimit_nofile 4096;
+events {
+ use epoll;
+ worker_connections 1024;
+}
+
+http {
+ include /etc/nginx/mime.types;
+
+ log_format main '[$time_local] remote_addr: $http_x_real_ip, request: "$request", '
+ 'status: $status, body_bytes_sent: $body_bytes_sent, http_referer: "$http_referer", '
+ 'http_user_agent: "$http_user_agent"';
+
+ access_log /dev/stdout main;
+
+ server_tokens off;
+
+ autoindex off;
+
+ port_in_redirect off;
+ absolute_redirect off;
+
+ client_header_buffer_size 1k;
+ large_client_header_buffers 4 8k;
+ client_body_buffer_size 10K;
+ client_max_body_size 10k;
+
+ client_header_timeout 8;
+ client_body_timeout 8;
+ client_body_in_file_only off;
+ keepalive_timeout 5 5;
+ send_timeout 8;
+
+ proxy_hide_header X-Powered-By;
+ proxy_request_buffering off;
+
+ limit_conn_zone $binary_remote_addr zone=limitperip:10m;
+ limit_req_zone $binary_remote_addr zone=ratelimit:10m rate=1000r/s;
+
+ gzip on;
+ gzip_min_length 1k;
+ gzip_buffers 4 16k;
+ gzip_comp_level 5;
+ gzip_types text/plain application/x-javascript text/css application/xml text/javascript application/javascript application/x-httpd-php application/json;
+ gzip_vary on;
+
+ server {
+ listen 8080 ssl default_server;
+ server_name easysoftware.test.osinfra.cn;
+ charset utf-8;
+
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
+ add_header Content-Security-Policy "script-src 'self' *.baidu.com 'unsafe-inline' 'unsafe-eval' ; object-src 'none'; frame-src 'none'";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+ add_header Referrer-Policy "no-referrer";
+
+ limit_conn limitperip 10;
+ ssl_session_tickets off;
+ ssl_session_timeout 5m;
+ ssl_session_cache shared:SSL:10m;
+
+ ssl_certificate "cert/server.crt";
+ ssl_certificate_key "cert/server.key";
+ ssl_password_file "cert/abc.txt";
+ ssl_dhparam "cert/dhparam.pem";
+ ssl_ecdh_curve auto;
+ ssl_protocols TLSv1.2;
+ ssl_ciphers "ECDHE-RSA-AES256-GCM-SHA384";
+ ssl_prefer_server_ciphers on;
+ ssl_stapling on;
+ ssl_stapling_verify on;
+ resolver 8.8.8.8 8.8.4.4 valid=60s;
+ resolver_timeout 5s;
+
+
+ if ($request_method !~ ^(GET|HEAD|POST)$) {
+ return 444;
+ }
+
+ location ~ /\. {
+ deny all;
+ return 404;
+ }
+
+ location / {
+
+ limit_req zone=ratelimit burst=5 nodelay;
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ proxy_set_header Host $host;
+
+ location /assets {
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
+ add_header Content-Security-Policy "script-src 'self' 'unsafe-inline' 'unsafe-eval' ; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "public,max-age=1209600";
+ }
+
+ location / {
+ try_files $uri /index.html;
+ }
+
+ root /usr/share/nginx/www;
+ index index.html;
+ }
+
+ location ^~ /api-query/ {
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+
+ proxy_pass https://easysoftware-service.easysoftware.svc.cluster.local:8080/;
+ }
+
+ location ^~ /dsapi/ {
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+
+ proxy_pass https://dsapi.osinfra.cn/;
+ }
+
+ location ^~ /monitoring/ {
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+ proxy_redirect off;
+
+ proxy_pass https://easysoftware-monitoring.test.osinfra.cn/;
+ }
+
+ location ^~ /api-search/ {
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+
+ proxy_pass https://doc-search.test.osinfra.cn/;
+ }
+
+
+ location ^~ /api-omapi/ {
+ proxy_set_header X-Forwarded-For $http_x_real_ip;
+ add_header X-XSS-Protection "1; mode=block";
+ add_header X-Frame-Options DENY;
+ add_header X-Content-Type-Options nosniff;
+ add_header Content-Security-Policy "script-src 'self'; object-src 'none'; frame-src 'none'";
+ add_header Cache-Control "no-cache,no-store,must-revalidate";
+ add_header Pragma no-cache;
+ add_header Expires 0;
+
+ proxy_pass https://omapi.osinfra.cn/;
+ }
+
+
+ error_page 401 402 403 405 406 407 413 414 /error.html;
+ error_page 404 /404.html;
+ error_page 500 501 502 503 504 505 /error.html;
+
+
+ location = /404.html {
+ root /usr/share/nginx/www;
+ }
+
+ location = /error.html {
+ root /usr/share/nginx/www;
+ }
+ }
+}
\ No newline at end of file
diff --git a/env.d.ts b/env.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11f02fe2a0061d6e6e1f271b21da95423b448b32
--- /dev/null
+++ b/env.d.ts
@@ -0,0 +1 @@
+///
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..2d09ddcc493c3c40d345d2c70f4db3a3636cb437
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+ openEuler Easy Software
+
+
+
+
+
+
diff --git a/package.json b/package.json
new file mode 100644
index 0000000000000000000000000000000000000000..8ed4f5fba13a20c7e7753ef3b88d5fdbb1370543
--- /dev/null
+++ b/package.json
@@ -0,0 +1,54 @@
+{
+ "name": "app",
+ "version": "0.0.0",
+ "private": true,
+ "type": "module",
+ "scripts": {
+ "dev": "vite",
+ "build": "run-p type-check \"build-only {@}\" --",
+ "preview": "vite preview",
+ "build-only": "vite build",
+ "type-check": "vue-tsc --build --force",
+ "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore",
+ "format": "prettier --write src/",
+ "gen:token": "opensig-scripts gen:token --config ./src/tokens/token.config.ts"
+ },
+ "dependencies": {
+ "@opensig/opendesign": "0.0.64",
+ "@vueuse/core": "9.12.0",
+ "axios": "1.6.8",
+ "clipboard": "2.0.11",
+ "element-plus": "2.3.12",
+ "js-cookie": "3.0.5",
+ "markdown-it": "12.3.2",
+ "pinia": "2.1.6",
+ "vue": "3.3.4",
+ "vue-dompurify-html": "3.1.2",
+ "vue-i18n": "9.2.2",
+ "vue-router": "4.2.4",
+ "xss": "1.0.14"
+ },
+ "devDependencies": {
+ "@opensig/opensig-scripts": "0.0.13",
+ "@rushstack/eslint-patch": "^1.3.3",
+ "@tsconfig/node18": "^18.2.2",
+ "@types/markdown-it": "^13.0.7",
+ "@types/node": "^18.19.3",
+ "@vitejs/plugin-vue": "^4.5.2",
+ "@vitejs/plugin-vue-jsx": "^3.1.0",
+ "@vue/eslint-config-prettier": "^8.0.0",
+ "@vue/eslint-config-typescript": "^12.0.0",
+ "@vue/tsconfig": "^0.5.0",
+ "eslint": "^8.49.0",
+ "eslint-plugin-vue": "^9.17.0",
+ "npm-run-all2": "^6.1.1",
+ "prettier": "^3.0.3",
+ "sass": "^1.62.1",
+ "typescript": "~5.3.0",
+ "unplugin-auto-import": "^0.11.5",
+ "unplugin-icons": "^0.14.15",
+ "unplugin-vue-components": "^0.26.0",
+ "vite": "^5.0.10",
+ "vue-tsc": "^1.8.25"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..ba8ca15a879f5b2b2fb58aca06e9192d3c02fc94
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,3808 @@
+lockfileVersion: '6.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+dependencies:
+ '@opensig/opendesign':
+ specifier: 0.0.64
+ version: 0.0.64(vue@3.3.4)
+ '@vueuse/core':
+ specifier: 9.12.0
+ version: 9.12.0(vue@3.3.4)
+ axios:
+ specifier: 1.6.8
+ version: 1.6.8
+ clipboard:
+ specifier: 2.0.11
+ version: 2.0.11
+ element-plus:
+ specifier: 2.3.12
+ version: 2.3.12(vue@3.3.4)
+ js-cookie:
+ specifier: 3.0.5
+ version: 3.0.5
+ markdown-it:
+ specifier: 12.3.2
+ version: 12.3.2
+ pinia:
+ specifier: 2.1.6
+ version: 2.1.6(typescript@5.3.2)(vue@3.3.4)
+ vue:
+ specifier: 3.3.4
+ version: 3.3.4
+ vue-dompurify-html:
+ specifier: 3.1.2
+ version: 3.1.2(vue@3.3.4)
+ vue-i18n:
+ specifier: 9.2.2
+ version: 9.2.2(vue@3.3.4)
+ vue-router:
+ specifier: 4.2.4
+ version: 4.2.4(vue@3.3.4)
+ xss:
+ specifier: 1.0.14
+ version: 1.0.14
+
+devDependencies:
+ '@opensig/opensig-scripts':
+ specifier: 0.0.13
+ version: 0.0.13(@types/node@18.19.3)(vite@5.0.10)
+ '@rushstack/eslint-patch':
+ specifier: ^1.3.3
+ version: 1.7.2
+ '@tsconfig/node18':
+ specifier: ^18.2.2
+ version: 18.2.2
+ '@types/markdown-it':
+ specifier: ^13.0.7
+ version: 13.0.7
+ '@types/node':
+ specifier: ^18.19.3
+ version: 18.19.3
+ '@vitejs/plugin-vue':
+ specifier: ^4.5.2
+ version: 4.5.2(vite@5.0.10)(vue@3.3.4)
+ '@vitejs/plugin-vue-jsx':
+ specifier: ^3.1.0
+ version: 3.1.0(vite@5.0.10)(vue@3.3.4)
+ '@vue/eslint-config-prettier':
+ specifier: ^8.0.0
+ version: 8.0.0(eslint@8.57.0)(prettier@3.0.3)
+ '@vue/eslint-config-typescript':
+ specifier: ^12.0.0
+ version: 12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.2)
+ '@vue/tsconfig':
+ specifier: ^0.5.0
+ version: 0.5.1
+ eslint:
+ specifier: ^8.49.0
+ version: 8.57.0
+ eslint-plugin-vue:
+ specifier: ^9.17.0
+ version: 9.22.0(eslint@8.57.0)
+ npm-run-all2:
+ specifier: ^6.1.1
+ version: 6.1.2
+ prettier:
+ specifier: ^3.0.3
+ version: 3.0.3
+ sass:
+ specifier: ^1.62.1
+ version: 1.70.0
+ typescript:
+ specifier: ~5.3.0
+ version: 5.3.2
+ unplugin-auto-import:
+ specifier: ^0.11.5
+ version: 0.11.5(@vueuse/core@9.12.0)
+ unplugin-icons:
+ specifier: ^0.14.15
+ version: 0.14.15
+ unplugin-vue-components:
+ specifier: ^0.26.0
+ version: 0.26.0(vue@3.3.4)
+ vite:
+ specifier: ^5.0.10
+ version: 5.0.10(@types/node@18.19.3)(sass@1.70.0)
+ vue-tsc:
+ specifier: ^1.8.25
+ version: 1.8.25(typescript@5.3.2)
+
+packages:
+
+ /@aashutoshrathi/word-wrap@1.2.6:
+ resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /@ampproject/remapping@2.2.1:
+ resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.22
+ dev: true
+
+ /@antfu/install-pkg@0.1.1:
+ resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==}
+ dependencies:
+ execa: 5.1.1
+ find-up: 5.0.0
+ dev: true
+
+ /@antfu/utils@0.7.7:
+ resolution: {integrity: sha512-gFPqTG7otEJ8uP6wrhDv6mqwGWYZKNvAcCq6u9hOj0c+IKCEsY4L1oC9trPq2SaWIzAfHvqfBDxF591JkMf+kg==}
+ dev: true
+
+ /@babel/code-frame@7.23.5:
+ resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/highlight': 7.23.4
+ chalk: 2.4.2
+ dev: true
+
+ /@babel/compat-data@7.23.5:
+ resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/core@7.23.9:
+ resolution: {integrity: sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@ampproject/remapping': 2.2.1
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-compilation-targets': 7.23.6
+ '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.9)
+ '@babel/helpers': 7.23.9
+ '@babel/parser': 7.23.9
+ '@babel/template': 7.23.9
+ '@babel/traverse': 7.23.9
+ '@babel/types': 7.23.9
+ convert-source-map: 2.0.0
+ debug: 4.3.4
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/generator@7.23.6:
+ resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.22
+ jsesc: 2.5.2
+ dev: true
+
+ /@babel/helper-annotate-as-pure@7.22.5:
+ resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-compilation-targets@7.23.6:
+ resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/compat-data': 7.23.5
+ '@babel/helper-validator-option': 7.23.5
+ browserslist: 4.22.3
+ lru-cache: 5.1.1
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-create-class-features-plugin@7.23.9(@babel/core@7.23.9):
+ resolution: {integrity: sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.9)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ semver: 6.3.1
+ dev: true
+
+ /@babel/helper-environment-visitor@7.22.20:
+ resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-function-name@7.23.0:
+ resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.23.9
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-hoist-variables@7.22.5:
+ resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-member-expression-to-functions@7.23.0:
+ resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-module-imports@7.22.15:
+ resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-simple-access': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/helper-validator-identifier': 7.22.20
+ dev: true
+
+ /@babel/helper-optimise-call-expression@7.22.5:
+ resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-plugin-utils@7.22.5:
+ resolution: {integrity: sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.9):
+ resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-member-expression-to-functions': 7.23.0
+ '@babel/helper-optimise-call-expression': 7.22.5
+ dev: true
+
+ /@babel/helper-simple-access@7.22.5:
+ resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-skip-transparent-expression-wrappers@7.22.5:
+ resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-split-export-declaration@7.22.6:
+ resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/helper-string-parser@7.23.4:
+ resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-identifier@7.22.20:
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-option@7.23.5:
+ resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /@babel/helpers@7.23.9:
+ resolution: {integrity: sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/template': 7.23.9
+ '@babel/traverse': 7.23.9
+ '@babel/types': 7.23.9
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/highlight@7.23.4:
+ resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.22.20
+ chalk: 2.4.2
+ js-tokens: 4.0.0
+ dev: true
+
+ /@babel/parser@7.23.9:
+ resolution: {integrity: sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.23.9
+
+ /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.9):
+ resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-plugin-utils': 7.22.5
+ dev: true
+
+ /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.9):
+ resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-annotate-as-pure': 7.22.5
+ '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9)
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9)
+ dev: true
+
+ /@babel/runtime@7.23.9:
+ resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.1
+ dev: false
+
+ /@babel/template@7.23.9:
+ resolution: {integrity: sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/parser': 7.23.9
+ '@babel/types': 7.23.9
+ dev: true
+
+ /@babel/traverse@7.23.9:
+ resolution: {integrity: sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/generator': 7.23.6
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-hoist-variables': 7.22.5
+ '@babel/helper-split-export-declaration': 7.22.6
+ '@babel/parser': 7.23.9
+ '@babel/types': 7.23.9
+ debug: 4.3.4
+ globals: 11.12.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@babel/types@7.23.9:
+ resolution: {integrity: sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.23.4
+ '@babel/helper-validator-identifier': 7.22.20
+ to-fast-properties: 2.0.0
+
+ /@ctrl/tinycolor@3.6.1:
+ resolution: {integrity: sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /@element-plus/icons-vue@2.3.1(vue@3.3.4):
+ resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ vue: 3.3.4
+ dev: false
+
+ /@esbuild/aix-ppc64@0.19.12:
+ resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [aix]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64@0.19.12:
+ resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm@0.19.12:
+ resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64@0.19.12:
+ resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64@0.19.12:
+ resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64@0.19.12:
+ resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64@0.19.12:
+ resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64@0.19.12:
+ resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64@0.19.12:
+ resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm@0.19.12:
+ resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32@0.19.12:
+ resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64@0.19.12:
+ resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el@0.19.12:
+ resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64@0.19.12:
+ resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64@0.19.12:
+ resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x@0.19.12:
+ resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64@0.19.12:
+ resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64@0.19.12:
+ resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64@0.19.12:
+ resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64@0.19.12:
+ resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64@0.19.12:
+ resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32@0.19.12:
+ resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64@0.19.12:
+ resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0):
+ 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.57.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@eslint-community/regexpp@4.10.0:
+ resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ dev: true
+
+ /@eslint/eslintrc@2.1.4:
+ resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ ajv: 6.12.6
+ debug: 4.3.4
+ espree: 9.6.1
+ globals: 13.24.0
+ ignore: 5.3.1
+ import-fresh: 3.3.0
+ js-yaml: 4.1.0
+ minimatch: 3.1.2
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@eslint/js@8.57.0:
+ resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /@floating-ui/core@1.6.1:
+ resolution: {integrity: sha512-42UH54oPZHPdRHdw6BgoBD6cg/eVTmVrFcgeRDM3jbO7uxSoipVcmcIGFcA5jmOHO5apcyvBhkSKES3fQJnu7A==}
+ dependencies:
+ '@floating-ui/utils': 0.2.2
+ dev: false
+
+ /@floating-ui/dom@1.6.4:
+ resolution: {integrity: sha512-0G8R+zOvQsAG1pg2Q99P21jiqxqGBW1iRe/iXHsBRBxnpXKFI8QwbB4x5KmYLggNO5m34IQgOIu9SCRfR/WWiQ==}
+ dependencies:
+ '@floating-ui/core': 1.6.1
+ '@floating-ui/utils': 0.2.2
+ dev: false
+
+ /@floating-ui/utils@0.2.2:
+ resolution: {integrity: sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==}
+ dev: false
+
+ /@humanwhocodes/config-array@0.11.14:
+ resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==}
+ engines: {node: '>=10.10.0'}
+ dependencies:
+ '@humanwhocodes/object-schema': 2.0.2
+ debug: 4.3.4
+ minimatch: 3.1.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@humanwhocodes/module-importer@1.0.1:
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+ dev: true
+
+ /@humanwhocodes/object-schema@2.0.2:
+ resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==}
+ dev: true
+
+ /@iconify/types@2.0.0:
+ resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
+ dev: true
+
+ /@iconify/utils@2.1.20:
+ resolution: {integrity: sha512-t8TeKlYK/5i9yTY9VAGAE4P0qQHd/0vH+VSRO+bdpxlt8wqB6f2I0/IrciRsdeFZPMoL8IICgP7lgl2ZtbG8Tw==}
+ dependencies:
+ '@antfu/install-pkg': 0.1.1
+ '@antfu/utils': 0.7.7
+ '@iconify/types': 2.0.0
+ debug: 4.3.4
+ kolorist: 1.8.0
+ local-pkg: 0.5.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@intlify/core-base@9.2.2:
+ resolution: {integrity: sha512-JjUpQtNfn+joMbrXvpR4hTF8iJQ2sEFzzK3KIESOx+f+uwIjgw20igOyaIdhfsVVBCds8ZM64MoeNSx+PHQMkA==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/devtools-if': 9.2.2
+ '@intlify/message-compiler': 9.2.2
+ '@intlify/shared': 9.2.2
+ '@intlify/vue-devtools': 9.2.2
+ dev: false
+
+ /@intlify/devtools-if@9.2.2:
+ resolution: {integrity: sha512-4ttr/FNO29w+kBbU7HZ/U0Lzuh2cRDhP8UlWOtV9ERcjHzuyXVZmjyleESK6eVP60tGC9QtQW9yZE+JeRhDHkg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/shared': 9.2.2
+ dev: false
+
+ /@intlify/message-compiler@9.2.2:
+ resolution: {integrity: sha512-IUrQW7byAKN2fMBe8z6sK6riG1pue95e5jfokn8hA5Q3Bqy4MBJ5lJAofUsawQJYHeoPJ7svMDyBaVJ4d0GTtA==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/shared': 9.2.2
+ source-map: 0.6.1
+ dev: false
+
+ /@intlify/shared@9.2.2:
+ resolution: {integrity: sha512-wRwTpsslgZS5HNyM7uDQYZtxnbI12aGiBZURX3BTR9RFIKKRWpllTsgzHWvj3HKm3Y2Sh5LPC1r0PDCKEhVn9Q==}
+ engines: {node: '>= 14'}
+ dev: false
+
+ /@intlify/vue-devtools@9.2.2:
+ resolution: {integrity: sha512-+dUyqyCHWHb/UcvY1MlIpO87munedm3Gn6E9WWYdWrMuYLcoIoOEVDWSS8xSwtlPU+kA+MEQTP6Q1iI/ocusJg==}
+ engines: {node: '>= 14'}
+ dependencies:
+ '@intlify/core-base': 9.2.2
+ '@intlify/shared': 9.2.2
+ dev: false
+
+ /@jridgewell/gen-mapping@0.3.3:
+ resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ '@jridgewell/set-array': 1.1.2
+ '@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping': 0.3.22
+ dev: true
+
+ /@jridgewell/resolve-uri@3.1.1:
+ resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/set-array@1.1.2:
+ resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
+ engines: {node: '>=6.0.0'}
+ dev: true
+
+ /@jridgewell/source-map@0.3.5:
+ resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.3
+ '@jridgewell/trace-mapping': 0.3.22
+ dev: true
+
+ /@jridgewell/sourcemap-codec@1.4.15:
+ resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
+
+ /@jridgewell/trace-mapping@0.3.22:
+ resolution: {integrity: sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==}
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.1
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
+ /@microsoft/api-extractor-model@7.28.7(@types/node@18.19.3):
+ resolution: {integrity: sha512-4gCGGEQGHmbQmarnDcEWS2cjj0LtNuD3D6rh3ZcAyAYTkceAugAk2eyQHGdTcGX8w3qMjWCTU1TPb8xHnMM+Kg==}
+ dependencies:
+ '@microsoft/tsdoc': 0.14.2
+ '@microsoft/tsdoc-config': 0.16.2
+ '@rushstack/node-core-library': 3.64.2(@types/node@18.19.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ dev: true
+
+ /@microsoft/api-extractor@7.39.4(@types/node@18.19.3):
+ resolution: {integrity: sha512-6YvfkpbEqRQ0UPdVBc+lOiq7VlXi9kw8U3w+RcXCFDVc/UljlXU5l9fHEyuBAW1GGO2opUe+yf9OscWhoHANhg==}
+ hasBin: true
+ dependencies:
+ '@microsoft/api-extractor-model': 7.28.7(@types/node@18.19.3)
+ '@microsoft/tsdoc': 0.14.2
+ '@microsoft/tsdoc-config': 0.16.2
+ '@rushstack/node-core-library': 3.64.2(@types/node@18.19.3)
+ '@rushstack/rig-package': 0.5.1
+ '@rushstack/ts-command-line': 4.17.1
+ colors: 1.2.5
+ lodash: 4.17.21
+ resolve: 1.22.8
+ semver: 7.5.4
+ source-map: 0.6.1
+ typescript: 5.3.3
+ transitivePeerDependencies:
+ - '@types/node'
+ dev: true
+
+ /@microsoft/tsdoc-config@0.16.2:
+ resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
+ dependencies:
+ '@microsoft/tsdoc': 0.14.2
+ ajv: 6.12.6
+ jju: 1.4.0
+ resolve: 1.19.0
+ dev: true
+
+ /@microsoft/tsdoc@0.14.2:
+ resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
+ dev: true
+
+ /@nodelib/fs.scandir@2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+ dev: true
+
+ /@nodelib/fs.stat@2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /@nodelib/fs.walk@1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.17.0
+ dev: true
+
+ /@opensig/opendesign@0.0.64(vue@3.3.4):
+ resolution: {integrity: sha512-JA/YoFZVMlTyio+7yACHCs7097E0jlb/6oev1CfjRQd8eN5LU1NYnV/9j4dTALMAGXe2khqniOLNYXKS6Wrm+g==}
+ peerDependencies:
+ vue: ^3.1.0
+ dependencies:
+ date-fns: 2.30.0
+ vue: 3.3.4
+ dev: false
+
+ /@opensig/opensig-scripts@0.0.13(@types/node@18.19.3)(vite@5.0.10):
+ resolution: {integrity: sha512-FKxc1iLlHAABrOqui2HMA+cTlkFzwsPqvErfIjT3LEdLFsJLFMu5dlc7Wpms+AlErp/OdqgM+tpALsPmK3uowA==}
+ hasBin: true
+ dependencies:
+ '@rollup/plugin-terser': 0.2.1
+ '@vitejs/plugin-vue': 3.2.0(vite@5.0.10)(vue@3.3.4)
+ clean-css: 5.3.3
+ commander: 9.5.0
+ fs-extra: 11.2.0
+ glob: 8.1.0
+ sass: 1.70.0
+ svgo: 3.2.0
+ vite-plugin-dts: 2.3.0(@types/node@18.19.3)(vite@5.0.10)
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - '@types/node'
+ - rollup
+ - supports-color
+ - vite
+ dev: true
+
+ /@pkgr/core@0.1.1:
+ resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ dev: true
+
+ /@rollup/plugin-terser@0.2.1:
+ resolution: {integrity: sha512-hV52c8Oo6/cXZZxVVoRNBb4zh+EKSHS4I1sedWV5pf0O+hTLSkrf6w86/V0AZutYtwBguB6HLKwz89WDBfwGOA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.x || ^3.x
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ serialize-javascript: 6.0.2
+ smob: 0.0.6
+ terser: 5.27.0
+ dev: true
+
+ /@rollup/pluginutils@5.1.0:
+ resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ '@types/estree': 1.0.5
+ estree-walker: 2.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /@rollup/rollup-android-arm-eabi@4.9.6:
+ resolution: {integrity: sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-android-arm64@4.9.6:
+ resolution: {integrity: sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-arm64@4.9.6:
+ resolution: {integrity: sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-x64@4.9.6:
+ resolution: {integrity: sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm-gnueabihf@4.9.6:
+ resolution: {integrity: sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-gnu@4.9.6:
+ resolution: {integrity: sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-musl@4.9.6:
+ resolution: {integrity: sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-riscv64-gnu@4.9.6:
+ resolution: {integrity: sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-gnu@4.9.6:
+ resolution: {integrity: sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-musl@4.9.6:
+ resolution: {integrity: sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-arm64-msvc@4.9.6:
+ resolution: {integrity: sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-ia32-msvc@4.9.6:
+ resolution: {integrity: sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-x64-msvc@4.9.6:
+ resolution: {integrity: sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rushstack/eslint-patch@1.7.2:
+ resolution: {integrity: sha512-RbhOOTCNoCrbfkRyoXODZp75MlpiHMgbE5MEBZAnnnLyQNgrigEj4p0lzsMDyc1zVsJDLrivB58tgg3emX0eEA==}
+ dev: true
+
+ /@rushstack/node-core-library@3.64.2(@types/node@18.19.3):
+ resolution: {integrity: sha512-n1S2VYEklONiwKpUyBq/Fym6yAsfsCXrqFabuOMcCuj4C+zW+HyaspSHXJCKqkMxfjviwe/c9+DUqvRWIvSN9Q==}
+ peerDependencies:
+ '@types/node': '*'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ dependencies:
+ '@types/node': 18.19.3
+ colors: 1.2.5
+ fs-extra: 7.0.1
+ import-lazy: 4.0.0
+ jju: 1.4.0
+ resolve: 1.22.8
+ semver: 7.5.4
+ z-schema: 5.0.5
+ dev: true
+
+ /@rushstack/rig-package@0.5.1:
+ resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==}
+ dependencies:
+ resolve: 1.22.8
+ strip-json-comments: 3.1.1
+ dev: true
+
+ /@rushstack/ts-command-line@4.17.1:
+ resolution: {integrity: sha512-2jweO1O57BYP5qdBGl6apJLB+aRIn5ccIRTPDyULh0KMwVzFqWtw6IZWt1qtUoZD/pD2RNkIOosH6Cq45rIYeg==}
+ dependencies:
+ '@types/argparse': 1.0.38
+ argparse: 1.0.10
+ colors: 1.2.5
+ string-argv: 0.3.2
+ dev: true
+
+ /@sxzz/popperjs-es@2.11.7:
+ resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==}
+ dev: false
+
+ /@trysound/sax@0.2.0:
+ resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /@ts-morph/common@0.19.0:
+ resolution: {integrity: sha512-Unz/WHmd4pGax91rdIKWi51wnVUW11QttMEPpBiBgIewnc9UQIX7UDLxr5vRlqeByXCwhkF6VabSsI0raWcyAQ==}
+ dependencies:
+ fast-glob: 3.3.2
+ minimatch: 7.4.6
+ mkdirp: 2.1.6
+ path-browserify: 1.0.1
+ dev: true
+
+ /@tsconfig/node18@18.2.2:
+ resolution: {integrity: sha512-d6McJeGsuoRlwWZmVIeE8CUA27lu6jLjvv1JzqmpsytOYYbVi1tHZEnwCNVOXnj4pyLvneZlFlpXUK+X9wBWyw==}
+ dev: true
+
+ /@types/argparse@1.0.38:
+ resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
+ dev: true
+
+ /@types/estree@1.0.5:
+ resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==}
+ dev: true
+
+ /@types/json-schema@7.0.15:
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ dev: true
+
+ /@types/linkify-it@3.0.5:
+ resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==}
+ dev: true
+
+ /@types/lodash-es@4.17.12:
+ resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==}
+ dependencies:
+ '@types/lodash': 4.17.0
+ dev: false
+
+ /@types/lodash@4.17.0:
+ resolution: {integrity: sha512-t7dhREVv6dbNj0q17X12j7yDG4bD/DHYX7o5/DbDxobP0HnGPgpRz2Ej77aL7TZT3DSw13fqUTj8J4mMnqa7WA==}
+ dev: false
+
+ /@types/markdown-it@13.0.7:
+ resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==}
+ dependencies:
+ '@types/linkify-it': 3.0.5
+ '@types/mdurl': 1.0.5
+ dev: true
+
+ /@types/mdurl@1.0.5:
+ resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==}
+ dev: true
+
+ /@types/node@18.19.3:
+ resolution: {integrity: sha512-k5fggr14DwAytoA/t8rPrIz++lXK7/DqckthCmoZOKNsEbJkId4Z//BqgApXBUGrGddrigYa1oqheo/7YmW4rg==}
+ dependencies:
+ undici-types: 5.26.5
+ dev: true
+
+ /@types/semver@7.5.8:
+ resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==}
+ dev: true
+
+ /@types/web-bluetooth@0.0.16:
+ resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==}
+
+ /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@eslint-community/regexpp': 4.10.0
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.2)
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.3.2)
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.2)
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.3.4
+ eslint: 8.57.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ natural-compare: 1.4.0
+ semver: 7.5.4
+ ts-api-utils: 1.2.1(typescript@5.3.2)
+ typescript: 5.3.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.2)
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.3.4
+ eslint: 8.57.0
+ typescript: 5.3.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/scope-manager@6.21.0:
+ resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/visitor-keys': 6.21.0
+ dev: true
+
+ /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.2)
+ '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.2)
+ debug: 4.3.4
+ eslint: 8.57.0
+ ts-api-utils: 1.2.1(typescript@5.3.2)
+ typescript: 5.3.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/types@6.21.0:
+ resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dev: true
+
+ /@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.2):
+ resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/visitor-keys': 6.21.0
+ debug: 4.3.4
+ globby: 11.1.0
+ is-glob: 4.0.3
+ minimatch: 9.0.3
+ semver: 7.6.0
+ ts-api-utils: 1.2.1(typescript@5.3.2)
+ typescript: 5.3.2
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@types/json-schema': 7.0.15
+ '@types/semver': 7.5.8
+ '@typescript-eslint/scope-manager': 6.21.0
+ '@typescript-eslint/types': 6.21.0
+ '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.2)
+ eslint: 8.57.0
+ semver: 7.6.0
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+ dev: true
+
+ /@typescript-eslint/visitor-keys@6.21.0:
+ resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
+ engines: {node: ^16.0.0 || >=18.0.0}
+ dependencies:
+ '@typescript-eslint/types': 6.21.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ dev: true
+
+ /@vitejs/plugin-vue-jsx@3.1.0(vite@5.0.10)(vue@3.3.4):
+ resolution: {integrity: sha512-w9M6F3LSEU5kszVb9An2/MmXNxocAnUb3WhRr8bHlimhDrXNt6n6D2nJQR3UXpGlZHh/EsgouOHCsM8V3Ln+WA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0 || ^5.0.0
+ vue: ^3.0.0
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.9)
+ '@vue/babel-plugin-jsx': 1.2.1(@babel/core@7.23.9)
+ vite: 5.0.10(@types/node@18.19.3)(sass@1.70.0)
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vitejs/plugin-vue@3.2.0(vite@5.0.10)(vue@3.3.4):
+ resolution: {integrity: sha512-E0tnaL4fr+qkdCNxJ+Xd0yM31UwMkQje76fsDVBBUCoGOUPexu2VDUYHL8P4CwV+zMvWw6nlRw19OnRKmYAJpw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^3.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 5.0.10(@types/node@18.19.3)(sass@1.70.0)
+ vue: 3.3.4
+ dev: true
+
+ /@vitejs/plugin-vue@4.5.2(vite@5.0.10)(vue@3.3.4):
+ resolution: {integrity: sha512-UGR3DlzLi/SaVBPX0cnSyE37vqxU3O6chn8l0HJNzQzDia6/Au2A4xKv+iIJW8w2daf80G7TYHhi1pAUjdZ0bQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0 || ^5.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 5.0.10(@types/node@18.19.3)(sass@1.70.0)
+ vue: 3.3.4
+ dev: true
+
+ /@volar/language-core@1.11.1:
+ resolution: {integrity: sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==}
+ dependencies:
+ '@volar/source-map': 1.11.1
+ dev: true
+
+ /@volar/source-map@1.11.1:
+ resolution: {integrity: sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==}
+ dependencies:
+ muggle-string: 0.3.1
+ dev: true
+
+ /@volar/typescript@1.11.1:
+ resolution: {integrity: sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==}
+ dependencies:
+ '@volar/language-core': 1.11.1
+ path-browserify: 1.0.1
+ dev: true
+
+ /@vue/babel-helper-vue-transform-on@1.2.1:
+ resolution: {integrity: sha512-jtEXim+pfyHWwvheYwUwSXm43KwQo8nhOBDyjrUITV6X2tB7lJm6n/+4sqR8137UVZZul5hBzWHdZ2uStYpyRQ==}
+ dev: true
+
+ /@vue/babel-plugin-jsx@1.2.1(@babel/core@7.23.9):
+ resolution: {integrity: sha512-Yy9qGktktXhB39QE99So/BO2Uwm/ZG+gpL9vMg51ijRRbINvgbuhyJEi4WYmGRMx/MSTfK0xjgZ3/MyY+iLCEg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ dependencies:
+ '@babel/core': 7.23.9
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.9)
+ '@babel/template': 7.23.9
+ '@babel/traverse': 7.23.9
+ '@babel/types': 7.23.9
+ '@vue/babel-helper-vue-transform-on': 1.2.1
+ '@vue/babel-plugin-resolve-type': 1.2.1(@babel/core@7.23.9)
+ camelcase: 6.3.0
+ html-tags: 3.3.1
+ svg-tags: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vue/babel-plugin-resolve-type@1.2.1(@babel/core@7.23.9):
+ resolution: {integrity: sha512-IOtnI7pHunUzHS/y+EG/yPABIAp0VN8QhQ0UCS09jeMVxgAnI9qdOzO85RXdQGxq+aWCdv8/+k3W0aYO6j/8fQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ dependencies:
+ '@babel/code-frame': 7.23.5
+ '@babel/core': 7.23.9
+ '@babel/helper-module-imports': 7.22.15
+ '@babel/helper-plugin-utils': 7.22.5
+ '@babel/parser': 7.23.9
+ '@vue/compiler-sfc': 3.4.15
+ dev: true
+
+ /@vue/compiler-core@3.3.4:
+ resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/shared': 3.3.4
+ estree-walker: 2.0.2
+ source-map-js: 1.0.2
+
+ /@vue/compiler-core@3.4.15:
+ resolution: {integrity: sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/shared': 3.4.15
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.0.2
+ dev: true
+
+ /@vue/compiler-dom@3.3.4:
+ resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==}
+ dependencies:
+ '@vue/compiler-core': 3.3.4
+ '@vue/shared': 3.3.4
+
+ /@vue/compiler-dom@3.4.15:
+ resolution: {integrity: sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==}
+ dependencies:
+ '@vue/compiler-core': 3.4.15
+ '@vue/shared': 3.4.15
+ dev: true
+
+ /@vue/compiler-sfc@3.3.4:
+ resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/compiler-core': 3.3.4
+ '@vue/compiler-dom': 3.3.4
+ '@vue/compiler-ssr': 3.3.4
+ '@vue/reactivity-transform': 3.3.4
+ '@vue/shared': 3.3.4
+ estree-walker: 2.0.2
+ magic-string: 0.30.5
+ postcss: 8.4.33
+ source-map-js: 1.0.2
+
+ /@vue/compiler-sfc@3.4.15:
+ resolution: {integrity: sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/compiler-core': 3.4.15
+ '@vue/compiler-dom': 3.4.15
+ '@vue/compiler-ssr': 3.4.15
+ '@vue/shared': 3.4.15
+ estree-walker: 2.0.2
+ magic-string: 0.30.5
+ postcss: 8.4.33
+ source-map-js: 1.0.2
+ dev: true
+
+ /@vue/compiler-ssr@3.3.4:
+ resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==}
+ dependencies:
+ '@vue/compiler-dom': 3.3.4
+ '@vue/shared': 3.3.4
+
+ /@vue/compiler-ssr@3.4.15:
+ resolution: {integrity: sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==}
+ dependencies:
+ '@vue/compiler-dom': 3.4.15
+ '@vue/shared': 3.4.15
+ dev: true
+
+ /@vue/devtools-api@6.5.1:
+ resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==}
+ dev: false
+
+ /@vue/eslint-config-prettier@8.0.0(eslint@8.57.0)(prettier@3.0.3):
+ resolution: {integrity: sha512-55dPqtC4PM/yBjhAr+yEw6+7KzzdkBuLmnhBrDfp4I48+wy+Giqqj9yUr5T2uD/BkBROjjmqnLZmXRdOx/VtQg==}
+ peerDependencies:
+ eslint: '>= 8.0.0'
+ prettier: '>= 3.0.0'
+ dependencies:
+ eslint: 8.57.0
+ eslint-config-prettier: 8.10.0(eslint@8.57.0)
+ eslint-plugin-prettier: 5.1.3(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@3.0.3)
+ prettier: 3.0.3
+ transitivePeerDependencies:
+ - '@types/eslint'
+ dev: true
+
+ /@vue/eslint-config-typescript@12.0.0(eslint-plugin-vue@9.22.0)(eslint@8.57.0)(typescript@5.3.2):
+ resolution: {integrity: sha512-StxLFet2Qe97T8+7L8pGlhYBBr8Eg05LPuTDVopQV6il+SK6qqom59BA/rcFipUef2jD8P2X44Vd8tMFytfvlg==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.2.0 || ^7.0.0 || ^8.0.0
+ eslint-plugin-vue: ^9.0.0
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.3.2)
+ '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.2)
+ eslint: 8.57.0
+ eslint-plugin-vue: 9.22.0(eslint@8.57.0)
+ typescript: 5.3.2
+ vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@vue/language-core@1.8.25(typescript@5.3.2):
+ resolution: {integrity: sha512-NJk/5DnAZlpvXX8BdWmHI45bWGLViUaS3R/RMrmFSvFMSbJKuEODpM4kR0F0Ofv5SFzCWuNiMhxameWpVdQsnA==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@volar/language-core': 1.11.1
+ '@volar/source-map': 1.11.1
+ '@vue/compiler-dom': 3.4.15
+ '@vue/shared': 3.4.15
+ computeds: 0.0.1
+ minimatch: 9.0.3
+ muggle-string: 0.3.1
+ path-browserify: 1.0.1
+ typescript: 5.3.2
+ vue-template-compiler: 2.7.16
+ dev: true
+
+ /@vue/reactivity-transform@3.3.4:
+ resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==}
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@vue/compiler-core': 3.3.4
+ '@vue/shared': 3.3.4
+ estree-walker: 2.0.2
+ magic-string: 0.30.5
+
+ /@vue/reactivity@3.3.4:
+ resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==}
+ dependencies:
+ '@vue/shared': 3.3.4
+
+ /@vue/runtime-core@3.3.4:
+ resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==}
+ dependencies:
+ '@vue/reactivity': 3.3.4
+ '@vue/shared': 3.3.4
+
+ /@vue/runtime-dom@3.3.4:
+ resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==}
+ dependencies:
+ '@vue/runtime-core': 3.3.4
+ '@vue/shared': 3.3.4
+ csstype: 3.1.3
+
+ /@vue/server-renderer@3.3.4(vue@3.3.4):
+ resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==}
+ peerDependencies:
+ vue: 3.3.4
+ dependencies:
+ '@vue/compiler-ssr': 3.3.4
+ '@vue/shared': 3.3.4
+ vue: 3.3.4
+
+ /@vue/shared@3.3.4:
+ resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
+
+ /@vue/shared@3.4.15:
+ resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==}
+ dev: true
+
+ /@vue/tsconfig@0.5.1:
+ resolution: {integrity: sha512-VcZK7MvpjuTPx2w6blwnwZAu5/LgBUtejFOi3pPGQFXQN5Ela03FUtd2Qtg4yWGGissVL0dr6Ro1LfOFh+PCuQ==}
+ dev: true
+
+ /@vueuse/core@9.12.0(vue@3.3.4):
+ resolution: {integrity: sha512-h/Di8Bvf6xRcvS/PvUVheiMYYz3U0tH3X25YxONSaAUBa841ayMwxkuzx/DGUMCW/wHWzD8tRy2zYmOC36r4sg==}
+ dependencies:
+ '@types/web-bluetooth': 0.0.16
+ '@vueuse/metadata': 9.12.0
+ '@vueuse/shared': 9.12.0(vue@3.3.4)
+ vue-demi: 0.14.6(vue@3.3.4)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ /@vueuse/metadata@9.12.0:
+ resolution: {integrity: sha512-9oJ9MM9lFLlmvxXUqsR1wLt1uF7EVbP5iYaHJYqk+G2PbMjY6EXvZeTjbdO89HgoF5cI6z49o2zT/jD9SVoNpQ==}
+
+ /@vueuse/shared@9.12.0(vue@3.3.4):
+ resolution: {integrity: sha512-TWuJLACQ0BVithVTRbex4Wf1a1VaRuSpVeyEd4vMUWl54PzlE0ciFUshKCXnlLuD0lxIaLK4Ypj3NXYzZh4+SQ==}
+ dependencies:
+ vue-demi: 0.14.6(vue@3.3.4)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+
+ /acorn-jsx@5.3.2(acorn@8.11.3):
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.11.3
+ dev: true
+
+ /acorn@8.11.3:
+ resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ /ajv@6.12.6:
+ resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+ dev: true
+
+ /ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-styles@3.2.1:
+ resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
+ engines: {node: '>=4'}
+ dependencies:
+ color-convert: 1.9.3
+ dev: true
+
+ /ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+ dependencies:
+ color-convert: 2.0.1
+ dev: true
+
+ /ansi-styles@6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.1
+ dev: true
+
+ /argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+ dependencies:
+ sprintf-js: 1.0.3
+ dev: true
+
+ /argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ /array-union@2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /async-validator@4.2.5:
+ resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==}
+ dev: false
+
+ /asynckit@0.4.0:
+ resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
+ dev: false
+
+ /axios@1.6.8:
+ resolution: {integrity: sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==}
+ dependencies:
+ follow-redirects: 1.15.6
+ form-data: 4.0.0
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+ dev: false
+
+ /balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+ dev: true
+
+ /binary-extensions@2.2.0:
+ resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: true
+
+ /brace-expansion@1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+ dev: true
+
+ /brace-expansion@2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
+ /braces@3.0.2:
+ resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.0.1
+ dev: true
+
+ /browserslist@4.22.3:
+ resolution: {integrity: sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001581
+ electron-to-chromium: 1.4.648
+ node-releases: 2.0.14
+ update-browserslist-db: 1.0.13(browserslist@4.22.3)
+ dev: true
+
+ /buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: true
+
+ /callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /caniuse-lite@1.0.30001581:
+ resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==}
+ dev: true
+
+ /chalk@2.4.2:
+ resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
+ engines: {node: '>=4'}
+ dependencies:
+ ansi-styles: 3.2.1
+ escape-string-regexp: 1.0.5
+ supports-color: 5.5.0
+ dev: true
+
+ /chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+ dev: true
+
+ /chokidar@3.5.3:
+ resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==}
+ engines: {node: '>= 8.10.0'}
+ dependencies:
+ anymatch: 3.1.3
+ braces: 3.0.2
+ glob-parent: 5.1.2
+ is-binary-path: 2.1.0
+ is-glob: 4.0.3
+ normalize-path: 3.0.0
+ readdirp: 3.6.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /clean-css@5.3.3:
+ resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
+ engines: {node: '>= 10.0'}
+ dependencies:
+ source-map: 0.6.1
+ dev: true
+
+ /clipboard@2.0.11:
+ resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==}
+ dependencies:
+ good-listener: 1.2.2
+ select: 1.1.2
+ tiny-emitter: 2.1.0
+ dev: false
+
+ /code-block-writer@12.0.0:
+ resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==}
+ dev: true
+
+ /color-convert@1.9.3:
+ resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
+ dependencies:
+ color-name: 1.1.3
+ dev: true
+
+ /color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+ dependencies:
+ color-name: 1.1.4
+ dev: true
+
+ /color-name@1.1.3:
+ resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
+ dev: true
+
+ /color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+ dev: true
+
+ /colors@1.2.5:
+ resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==}
+ engines: {node: '>=0.1.90'}
+ dev: true
+
+ /combined-stream@1.0.8:
+ resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
+ engines: {node: '>= 0.8'}
+ dependencies:
+ delayed-stream: 1.0.0
+ dev: false
+
+ /commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ /commander@7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: true
+
+ /commander@9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+ dev: true
+
+ /computeds@0.0.1:
+ resolution: {integrity: sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==}
+ dev: true
+
+ /concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ dev: true
+
+ /convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ dev: true
+
+ /cross-spawn@7.0.3:
+ resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
+ engines: {node: '>= 8'}
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+ dev: true
+
+ /css-select@5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.1.0
+ nth-check: 2.1.1
+ dev: true
+
+ /css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.0.2
+ dev: true
+
+ /css-tree@2.3.1:
+ resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+ dependencies:
+ mdn-data: 2.0.30
+ source-map-js: 1.0.2
+ dev: true
+
+ /css-what@6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /cssfilter@0.0.10:
+ resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==}
+ dev: false
+
+ /csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+ dependencies:
+ css-tree: 2.2.1
+ dev: true
+
+ /csstype@3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ /date-fns@2.30.0:
+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+ engines: {node: '>=0.11'}
+ dependencies:
+ '@babel/runtime': 7.23.9
+ dev: false
+
+ /dayjs@1.11.11:
+ resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==}
+ dev: false
+
+ /de-indent@1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ dev: true
+
+ /debug@4.3.4:
+ resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.2
+ dev: true
+
+ /deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+ dev: true
+
+ /delayed-stream@1.0.0:
+ resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
+ engines: {node: '>=0.4.0'}
+ dev: false
+
+ /delegate@3.2.0:
+ resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==}
+ dev: false
+
+ /dir-glob@3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: true
+
+ /doctrine@3.0.0:
+ resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ esutils: 2.0.3
+ dev: true
+
+ /dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: true
+
+ /domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: true
+
+ /domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /dompurify@2.5.2:
+ resolution: {integrity: sha512-5vSyvxRAb45EoWwAktUT3AYqAwXK4FL7si22Cgj46U6ICsj/YJczCN+Bk7WNABIQmpWRymGfslMhrRUZkQNnqA==}
+ dev: false
+
+ /domutils@3.1.0:
+ resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==}
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: true
+
+ /electron-to-chromium@1.4.648:
+ resolution: {integrity: sha512-EmFMarXeqJp9cUKu/QEciEApn0S/xRcpZWuAm32U7NgoZCimjsilKXHRO9saeEW55eHZagIDg6XTUOv32w9pjg==}
+ dev: true
+
+ /element-plus@2.3.12(vue@3.3.4):
+ resolution: {integrity: sha512-fAWpbKCyt+l1dsqSNPOs/F/dBN4Wp5CGAyxbiS5zqDwI4q3QPM+LxLU2h3GUHMIBtMGCvmsG98j5HPMkTKkvcA==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@ctrl/tinycolor': 3.6.1
+ '@element-plus/icons-vue': 2.3.1(vue@3.3.4)
+ '@floating-ui/dom': 1.6.4
+ '@popperjs/core': /@sxzz/popperjs-es@2.11.7
+ '@types/lodash': 4.17.0
+ '@types/lodash-es': 4.17.12
+ '@vueuse/core': 9.12.0(vue@3.3.4)
+ async-validator: 4.2.5
+ dayjs: 1.11.11
+ escape-html: 1.0.3
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21)
+ memoize-one: 6.0.0
+ normalize-wheel-es: 1.2.0
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ dev: false
+
+ /entities@2.1.0:
+ resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==}
+ dev: false
+
+ /entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+ dev: true
+
+ /esbuild@0.19.12:
+ resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.19.12
+ '@esbuild/android-arm': 0.19.12
+ '@esbuild/android-arm64': 0.19.12
+ '@esbuild/android-x64': 0.19.12
+ '@esbuild/darwin-arm64': 0.19.12
+ '@esbuild/darwin-x64': 0.19.12
+ '@esbuild/freebsd-arm64': 0.19.12
+ '@esbuild/freebsd-x64': 0.19.12
+ '@esbuild/linux-arm': 0.19.12
+ '@esbuild/linux-arm64': 0.19.12
+ '@esbuild/linux-ia32': 0.19.12
+ '@esbuild/linux-loong64': 0.19.12
+ '@esbuild/linux-mips64el': 0.19.12
+ '@esbuild/linux-ppc64': 0.19.12
+ '@esbuild/linux-riscv64': 0.19.12
+ '@esbuild/linux-s390x': 0.19.12
+ '@esbuild/linux-x64': 0.19.12
+ '@esbuild/netbsd-x64': 0.19.12
+ '@esbuild/openbsd-x64': 0.19.12
+ '@esbuild/sunos-x64': 0.19.12
+ '@esbuild/win32-arm64': 0.19.12
+ '@esbuild/win32-ia32': 0.19.12
+ '@esbuild/win32-x64': 0.19.12
+ dev: true
+
+ /escalade@3.1.1:
+ resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+ dev: false
+
+ /escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+ dev: true
+
+ /escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /eslint-config-prettier@8.10.0(eslint@8.57.0):
+ resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+ dependencies:
+ eslint: 8.57.0
+ dev: true
+
+ /eslint-plugin-prettier@5.1.3(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@3.0.3):
+ resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '*'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+ dependencies:
+ eslint: 8.57.0
+ eslint-config-prettier: 8.10.0(eslint@8.57.0)
+ prettier: 3.0.3
+ prettier-linter-helpers: 1.0.0
+ synckit: 0.8.8
+ dev: true
+
+ /eslint-plugin-vue@9.22.0(eslint@8.57.0):
+ resolution: {integrity: sha512-7wCXv5zuVnBtZE/74z4yZ0CM8AjH6bk4MQGm7hZjUC2DBppKU5ioeOk5LGSg/s9a1ZJnIsdPLJpXnu1Rc+cVHg==}
+ 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(eslint@8.57.0)
+ eslint: 8.57.0
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 6.0.15
+ semver: 7.6.0
+ vue-eslint-parser: 9.4.2(eslint@8.57.0)
+ xml-name-validator: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /eslint-scope@7.2.2:
+ resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+ dev: true
+
+ /eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /eslint@8.57.0:
+ resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0)
+ '@eslint-community/regexpp': 4.10.0
+ '@eslint/eslintrc': 2.1.4
+ '@eslint/js': 8.57.0
+ '@humanwhocodes/config-array': 0.11.14
+ '@humanwhocodes/module-importer': 1.0.1
+ '@nodelib/fs.walk': 1.2.8
+ '@ungap/structured-clone': 1.2.0
+ ajv: 6.12.6
+ chalk: 4.1.2
+ cross-spawn: 7.0.3
+ debug: 4.3.4
+ doctrine: 3.0.0
+ escape-string-regexp: 4.0.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 6.0.1
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ globals: 13.24.0
+ graphemer: 1.4.0
+ ignore: 5.3.1
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ is-path-inside: 3.0.3
+ js-yaml: 4.1.0
+ json-stable-stringify-without-jsonify: 1.0.1
+ levn: 0.4.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.2
+ natural-compare: 1.4.0
+ optionator: 0.9.3
+ strip-ansi: 6.0.1
+ text-table: 0.2.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /espree@9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.11.3
+ acorn-jsx: 5.3.2(acorn@8.11.3)
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /esquery@1.5.0:
+ resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
+ engines: {node: '>=0.10'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+ dependencies:
+ estraverse: 5.3.0
+ dev: true
+
+ /estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ /esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+ dependencies:
+ cross-spawn: 7.0.3
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+ dev: true
+
+ /fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+ dev: true
+
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
+ dev: true
+
+ /fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ dev: true
+
+ /fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+ dev: true
+
+ /fastq@1.17.0:
+ resolution: {integrity: sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==}
+ dependencies:
+ reusify: 1.0.4
+ dev: true
+
+ /file-entry-cache@6.0.1:
+ resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flat-cache: 3.2.0
+ dev: true
+
+ /fill-range@7.0.1:
+ resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
+ /find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+ dev: true
+
+ /flat-cache@3.2.0:
+ resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==}
+ engines: {node: ^10.12.0 || >=12.0.0}
+ dependencies:
+ flatted: 3.3.1
+ keyv: 4.5.4
+ rimraf: 3.0.2
+ dev: true
+
+ /flatted@3.3.1:
+ resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==}
+ dev: true
+
+ /follow-redirects@1.15.6:
+ resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ debug: '*'
+ peerDependenciesMeta:
+ debug:
+ optional: true
+ dev: false
+
+ /form-data@4.0.0:
+ resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==}
+ engines: {node: '>= 6'}
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ mime-types: 2.1.35
+ dev: false
+
+ /fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs-extra@11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs-extra@7.0.1:
+ resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
+ engines: {node: '>=6 <7 || >=8'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: true
+
+ /fs.realpath@1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: true
+
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+ dev: true
+
+ /gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+ dev: true
+
+ /get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ is-glob: 4.0.3
+ dev: true
+
+ /glob@7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ 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
+
+ /glob@8.1.0:
+ resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 5.1.6
+ once: 1.4.0
+ dev: true
+
+ /globals@11.12.0:
+ resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /globals@13.24.0:
+ resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==}
+ engines: {node: '>=8'}
+ dependencies:
+ type-fest: 0.20.2
+ dev: true
+
+ /globby@11.1.0:
+ resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
+ engines: {node: '>=10'}
+ dependencies:
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ ignore: 5.3.1
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: true
+
+ /good-listener@1.2.2:
+ resolution: {integrity: sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==}
+ dependencies:
+ delegate: 3.2.0
+ dev: false
+
+ /graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+ dev: true
+
+ /graphemer@1.4.0:
+ resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
+ dev: true
+
+ /has-flag@3.0.0:
+ resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /hasown@2.0.0:
+ resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==}
+ engines: {node: '>= 0.4'}
+ dependencies:
+ function-bind: 1.1.2
+ dev: true
+
+ /he@1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ dev: true
+
+ /html-tags@3.3.1:
+ resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+ dev: true
+
+ /ignore@5.3.1:
+ resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /immutable@4.3.5:
+ resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==}
+ dev: true
+
+ /import-fresh@3.3.0:
+ resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ engines: {node: '>=6'}
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+ dev: true
+
+ /import-lazy@4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /inflight@1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+ dev: true
+
+ /inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+ dev: true
+
+ /is-binary-path@2.1.0:
+ resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
+ engines: {node: '>=8'}
+ dependencies:
+ binary-extensions: 2.2.0
+ dev: true
+
+ /is-core-module@2.13.1:
+ resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==}
+ dependencies:
+ hasown: 2.0.0
+ dev: true
+
+ /is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+ dev: true
+
+ /is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+ dev: true
+
+ /is-path-inside@3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ dev: true
+
+ /jju@1.4.0:
+ resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
+ dev: true
+
+ /js-cookie@3.0.5:
+ resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==}
+ engines: {node: '>=14'}
+ dev: false
+
+ /js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: true
+
+ /js-yaml@4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
+ /jsesc@2.5.2:
+ resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ dev: true
+
+ /json-parse-even-better-errors@3.0.1:
+ resolution: {integrity: sha512-aatBvbL26wVUCLmbWdCpeu9iF5wOyWpagiKkInA+kfws3sWdBrTnsvN2CKcyCYyUrc7rebNBlK6+kteg7ksecg==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
+ /json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ dev: true
+
+ /json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+ dev: true
+
+ /json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: true
+
+ /jsonc-parser@3.2.1:
+ resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==}
+ dev: true
+
+ /jsonfile@4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /jsonfile@6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ dependencies:
+ json-buffer: 3.0.1
+ dev: true
+
+ /kolorist@1.8.0:
+ resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==}
+ dev: true
+
+ /levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /linkify-it@3.0.3:
+ resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==}
+ dependencies:
+ uc.micro: 1.0.6
+ dev: false
+
+ /local-pkg@0.4.3:
+ resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
+ engines: {node: '>=14'}
+ dev: true
+
+ /local-pkg@0.5.0:
+ resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==}
+ engines: {node: '>=14'}
+ dependencies:
+ mlly: 1.5.0
+ pkg-types: 1.0.3
+ dev: true
+
+ /locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-locate: 5.0.0
+ dev: true
+
+ /lodash-es@4.17.21:
+ resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==}
+ dev: false
+
+ /lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21):
+ resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==}
+ peerDependencies:
+ '@types/lodash-es': '*'
+ lodash: '*'
+ lodash-es: '*'
+ dependencies:
+ '@types/lodash-es': 4.17.12
+ lodash: 4.17.21
+ lodash-es: 4.17.21
+ dev: false
+
+ /lodash.get@4.4.2:
+ resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
+ dev: true
+
+ /lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ dev: true
+
+ /lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+ dev: true
+
+ /lodash@4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+
+ /lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+ dependencies:
+ yallist: 3.1.1
+ dev: true
+
+ /lru-cache@6.0.0:
+ resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
+ engines: {node: '>=10'}
+ dependencies:
+ yallist: 4.0.0
+ dev: true
+
+ /magic-string@0.26.7:
+ resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==}
+ engines: {node: '>=12'}
+ dependencies:
+ sourcemap-codec: 1.4.8
+ dev: true
+
+ /magic-string@0.27.0:
+ resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
+ /magic-string@0.29.0:
+ resolution: {integrity: sha512-WcfidHrDjMY+eLjlU+8OvwREqHwpgCeKVBUpQ3OhYYuvfaYCUgcbuBzappNzZvg/v8onU3oQj+BYpkOJe9Iw4Q==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
+
+ /magic-string@0.30.5:
+ resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.4.15
+
+ /markdown-it@12.3.2:
+ resolution: {integrity: sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ entities: 2.1.0
+ linkify-it: 3.0.3
+ mdurl: 1.0.1
+ uc.micro: 1.0.6
+ dev: false
+
+ /mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+ dev: true
+
+ /mdn-data@2.0.30:
+ resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==}
+ dev: true
+
+ /mdurl@1.0.1:
+ resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==}
+ dev: false
+
+ /memoize-one@6.0.0:
+ resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==}
+ dev: false
+
+ /memorystream@0.3.1:
+ resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
+ engines: {node: '>= 0.10.0'}
+ dev: true
+
+ /merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+ dev: true
+
+ /merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+ dev: true
+
+ /micromatch@4.0.5:
+ resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.2
+ picomatch: 2.3.1
+ dev: true
+
+ /mime-db@1.52.0:
+ resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
+ engines: {node: '>= 0.6'}
+ dev: false
+
+ /mime-types@2.1.35:
+ resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
+ engines: {node: '>= 0.6'}
+ dependencies:
+ mime-db: 1.52.0
+ dev: false
+
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /minimatch@3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+ dev: true
+
+ /minimatch@5.1.6:
+ resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimatch@7.4.6:
+ resolution: {integrity: sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==}
+ engines: {node: '>=10'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimatch@9.0.3:
+ resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /mkdirp@2.1.6:
+ resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dev: true
+
+ /mlly@1.5.0:
+ resolution: {integrity: sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==}
+ dependencies:
+ acorn: 8.11.3
+ pathe: 1.1.2
+ pkg-types: 1.0.3
+ ufo: 1.3.2
+ dev: true
+
+ /ms@2.1.2:
+ resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
+ dev: true
+
+ /muggle-string@0.3.1:
+ resolution: {integrity: sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==}
+ dev: true
+
+ /nanoid@3.3.7:
+ resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ /natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+ dev: true
+
+ /node-releases@2.0.14:
+ resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==}
+ dev: true
+
+ /normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /normalize-wheel-es@1.2.0:
+ resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==}
+ dev: false
+
+ /npm-normalize-package-bin@3.0.1:
+ resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
+ /npm-run-all2@6.1.2:
+ resolution: {integrity: sha512-WwwnS8Ft+RpXve6T2EIEVpFLSqN+ORHRvgNk3H9N62SZXjmzKoRhMFg3I17TK3oMaAEr+XFbRirWS2Fn3BCPSg==}
+ engines: {node: ^14.18.0 || >=16.0.0, npm: '>= 8'}
+ hasBin: true
+ dependencies:
+ ansi-styles: 6.2.1
+ cross-spawn: 7.0.3
+ memorystream: 0.3.1
+ minimatch: 9.0.3
+ pidtree: 0.6.0
+ read-package-json-fast: 3.0.2
+ shell-quote: 1.8.1
+ dev: true
+
+ /npm-run-path@4.0.1:
+ resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-key: 3.1.1
+ dev: true
+
+ /nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
+ /once@1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+ dev: true
+
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
+ /optionator@0.9.3:
+ resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ '@aashutoshrathi/word-wrap': 1.2.6
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ dev: true
+
+ /p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ yocto-queue: 0.1.0
+ dev: true
+
+ /p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+ dependencies:
+ p-limit: 3.1.0
+ dev: true
+
+ /parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+ dependencies:
+ callsites: 3.1.0
+ dev: true
+
+ /path-browserify@1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+ dev: true
+
+ /path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-is-absolute@1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+ dev: true
+
+ /path-type@4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ dev: true
+
+ /picocolors@1.0.0:
+ resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
+
+ /picomatch@2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+ dev: true
+
+ /pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+ dev: true
+
+ /pinia@2.1.6(typescript@5.3.2)(vue@3.3.4):
+ resolution: {integrity: sha512-bIU6QuE5qZviMmct5XwCesXelb5VavdOWKWaB17ggk++NUwQWWbP5YnsONTk3b752QkW9sACiR81rorpeOMSvQ==}
+ peerDependencies:
+ '@vue/composition-api': ^1.4.0
+ typescript: '>=4.4.4'
+ vue: ^2.6.14 || ^3.3.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/devtools-api': 6.5.1
+ typescript: 5.3.2
+ vue: 3.3.4
+ vue-demi: 0.14.6(vue@3.3.4)
+ dev: false
+
+ /pkg-types@1.0.3:
+ resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
+ dependencies:
+ jsonc-parser: 3.2.1
+ mlly: 1.5.0
+ pathe: 1.1.2
+ dev: true
+
+ /postcss-selector-parser@6.0.15:
+ resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==}
+ engines: {node: '>=4'}
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+ dev: true
+
+ /postcss@8.4.33:
+ resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.7
+ picocolors: 1.0.0
+ source-map-js: 1.0.2
+
+ /prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+ dev: true
+
+ /prettier-linter-helpers@1.0.0:
+ resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
+ engines: {node: '>=6.0.0'}
+ dependencies:
+ fast-diff: 1.3.0
+ dev: true
+
+ /prettier@3.0.3:
+ resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dev: true
+
+ /proxy-from-env@1.1.0:
+ resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
+ dev: false
+
+ /punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ dev: true
+
+ /randombytes@2.1.0:
+ resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ dependencies:
+ safe-buffer: 5.2.1
+ dev: true
+
+ /read-package-json-fast@3.0.2:
+ resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dependencies:
+ json-parse-even-better-errors: 3.0.1
+ npm-normalize-package-bin: 3.0.1
+ dev: true
+
+ /readdirp@3.6.0:
+ resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
+ engines: {node: '>=8.10.0'}
+ dependencies:
+ picomatch: 2.3.1
+ dev: true
+
+ /regenerator-runtime@0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+ dev: false
+
+ /resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+ dev: true
+
+ /resolve@1.19.0:
+ resolution: {integrity: sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==}
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ dev: true
+
+ /resolve@1.22.8:
+ resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
+ hasBin: true
+ dependencies:
+ is-core-module: 2.13.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+ dev: true
+
+ /reusify@1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ dev: true
+
+ /rimraf@3.0.2:
+ resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
+ hasBin: true
+ dependencies:
+ glob: 7.2.3
+ dev: true
+
+ /rollup@4.9.6:
+ resolution: {integrity: sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+ dependencies:
+ '@types/estree': 1.0.5
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.9.6
+ '@rollup/rollup-android-arm64': 4.9.6
+ '@rollup/rollup-darwin-arm64': 4.9.6
+ '@rollup/rollup-darwin-x64': 4.9.6
+ '@rollup/rollup-linux-arm-gnueabihf': 4.9.6
+ '@rollup/rollup-linux-arm64-gnu': 4.9.6
+ '@rollup/rollup-linux-arm64-musl': 4.9.6
+ '@rollup/rollup-linux-riscv64-gnu': 4.9.6
+ '@rollup/rollup-linux-x64-gnu': 4.9.6
+ '@rollup/rollup-linux-x64-musl': 4.9.6
+ '@rollup/rollup-win32-arm64-msvc': 4.9.6
+ '@rollup/rollup-win32-ia32-msvc': 4.9.6
+ '@rollup/rollup-win32-x64-msvc': 4.9.6
+ fsevents: 2.3.3
+ dev: true
+
+ /run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+ dev: true
+
+ /safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ dev: true
+
+ /sass@1.70.0:
+ resolution: {integrity: sha512-uUxNQ3zAHeAx5nRFskBnrWzDUJrrvpCPD5FNAoRvTi0WwremlheES3tg+56PaVtCs5QDRX5CBLxxKMDJMEa1WQ==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+ dependencies:
+ chokidar: 3.5.3
+ immutable: 4.3.5
+ source-map-js: 1.0.2
+ dev: true
+
+ /scule@1.2.0:
+ resolution: {integrity: sha512-CRCmi5zHQnSoeCik9565PONMg0kfkvYmcSqrbOJY4txFfy1wvVULV4FDaiXhUblUgahdqz3F2NwHZ8i4eBTwUw==}
+ dev: true
+
+ /select@1.1.2:
+ resolution: {integrity: sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==}
+ dev: false
+
+ /semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+ dev: true
+
+ /semver@7.5.4:
+ resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /semver@7.6.0:
+ resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ lru-cache: 6.0.0
+ dev: true
+
+ /serialize-javascript@6.0.2:
+ resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ dependencies:
+ randombytes: 2.1.0
+ dev: true
+
+ /shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+ dependencies:
+ shebang-regex: 3.0.0
+ dev: true
+
+ /shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /shell-quote@1.8.1:
+ resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
+ dev: true
+
+ /signal-exit@3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /slash@3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /smob@0.0.6:
+ resolution: {integrity: sha512-V21+XeNni+tTyiST1MHsa84AQhT1aFZipzPpOFAVB8DkHzwJyjjAmt9bgwnuZiZWnIbMo2duE29wybxv/7HWUw==}
+ dev: true
+
+ /source-map-js@1.0.2:
+ resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: true
+
+ /source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ /sourcemap-codec@1.4.8:
+ resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==}
+ deprecated: Please use @jridgewell/sourcemap-codec instead
+ dev: true
+
+ /sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+ dev: true
+
+ /string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+ dev: true
+
+ /strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-final-newline@2.0.0:
+ resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
+ engines: {node: '>=6'}
+ dev: true
+
+ /strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /strip-literal@1.3.0:
+ resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
+ dependencies:
+ acorn: 8.11.3
+ dev: true
+
+ /supports-color@5.5.0:
+ resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
+ engines: {node: '>=4'}
+ dependencies:
+ has-flag: 3.0.0
+ dev: true
+
+ /supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+ dependencies:
+ has-flag: 4.0.0
+ dev: true
+
+ /supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+ dev: true
+
+ /svg-tags@1.0.0:
+ resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==}
+ dev: true
+
+ /svgo@3.2.0:
+ resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==}
+ engines: {node: '>=14.0.0'}
+ hasBin: true
+ dependencies:
+ '@trysound/sax': 0.2.0
+ commander: 7.2.0
+ css-select: 5.1.0
+ css-tree: 2.3.1
+ css-what: 6.1.0
+ csso: 5.0.5
+ picocolors: 1.0.0
+ dev: true
+
+ /synckit@0.8.8:
+ resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ dependencies:
+ '@pkgr/core': 0.1.1
+ tslib: 2.6.2
+ dev: true
+
+ /terser@5.27.0:
+ resolution: {integrity: sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dependencies:
+ '@jridgewell/source-map': 0.3.5
+ acorn: 8.11.3
+ commander: 2.20.3
+ source-map-support: 0.5.21
+ dev: true
+
+ /text-table@0.2.0:
+ resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
+ dev: true
+
+ /tiny-emitter@2.1.0:
+ resolution: {integrity: sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==}
+ dev: false
+
+ /to-fast-properties@2.0.0:
+ resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
+ engines: {node: '>=4'}
+
+ /to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+ dev: true
+
+ /ts-api-utils@1.2.1(typescript@5.3.2):
+ resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==}
+ engines: {node: '>=16'}
+ peerDependencies:
+ typescript: '>=4.2.0'
+ dependencies:
+ typescript: 5.3.2
+ dev: true
+
+ /ts-morph@18.0.0:
+ resolution: {integrity: sha512-Kg5u0mk19PIIe4islUI/HWRvm9bC1lHejK4S0oh1zaZ77TMZAEmQC0sHQYiu2RgCQFZKXz1fMVi/7nOOeirznA==}
+ dependencies:
+ '@ts-morph/common': 0.19.0
+ code-block-writer: 12.0.0
+ dev: true
+
+ /tslib@2.6.2:
+ resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
+ dev: true
+
+ /type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+ dependencies:
+ prelude-ls: 1.2.1
+ dev: true
+
+ /type-fest@0.20.2:
+ resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /typescript@5.3.2:
+ resolution: {integrity: sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ /typescript@5.3.3:
+ resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+ dev: true
+
+ /uc.micro@1.0.6:
+ resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==}
+ dev: false
+
+ /ufo@1.3.2:
+ resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==}
+ dev: true
+
+ /undici-types@5.26.5:
+ resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
+ dev: true
+
+ /unimport@1.3.0:
+ resolution: {integrity: sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==}
+ dependencies:
+ '@rollup/pluginutils': 5.1.0
+ escape-string-regexp: 5.0.0
+ fast-glob: 3.3.2
+ local-pkg: 0.4.3
+ magic-string: 0.27.0
+ mlly: 1.5.0
+ pathe: 1.1.2
+ pkg-types: 1.0.3
+ scule: 1.2.0
+ strip-literal: 1.3.0
+ unplugin: 1.6.0
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /universalify@0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+ dev: true
+
+ /universalify@2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /unplugin-auto-import@0.11.5(@vueuse/core@9.12.0):
+ resolution: {integrity: sha512-nvbL2AQwLRR8wbHpJ6L1EBVNmjN045RSedTa4NtsGRkSQFXkI1iKHs4dTqJwcKZsnFrZOAKtLPiN1/oQTObLZw==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@vueuse/core': '*'
+ peerDependenciesMeta:
+ '@vueuse/core':
+ optional: true
+ dependencies:
+ '@antfu/utils': 0.7.7
+ '@rollup/pluginutils': 5.1.0
+ '@vueuse/core': 9.12.0(vue@3.3.4)
+ local-pkg: 0.4.3
+ magic-string: 0.26.7
+ unimport: 1.3.0
+ unplugin: 1.6.0
+ transitivePeerDependencies:
+ - rollup
+ dev: true
+
+ /unplugin-icons@0.14.15:
+ resolution: {integrity: sha512-J6YBA+fUzVM2IZPXCK3Pnk36jYVwQ6lkjRgOnZaXNIxpMDsmwDqrE1AGJ0zUbfuEoOa90OBGc0OPfN1r+qlSIQ==}
+ peerDependencies:
+ '@svgr/core': '>=5.5.0'
+ '@vue/compiler-sfc': ^3.0.2
+ vue-template-compiler: ^2.6.12
+ vue-template-es2015-compiler: ^1.9.0
+ peerDependenciesMeta:
+ '@svgr/core':
+ optional: true
+ '@vue/compiler-sfc':
+ optional: true
+ vue-template-compiler:
+ optional: true
+ vue-template-es2015-compiler:
+ optional: true
+ dependencies:
+ '@antfu/install-pkg': 0.1.1
+ '@antfu/utils': 0.7.7
+ '@iconify/utils': 2.1.20
+ debug: 4.3.4
+ kolorist: 1.8.0
+ local-pkg: 0.4.3
+ unplugin: 1.6.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /unplugin-vue-components@0.26.0(vue@3.3.4):
+ resolution: {integrity: sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@babel/parser': ^7.15.8
+ '@nuxt/kit': ^3.2.2
+ vue: 2 || 3
+ peerDependenciesMeta:
+ '@babel/parser':
+ optional: true
+ '@nuxt/kit':
+ optional: true
+ dependencies:
+ '@antfu/utils': 0.7.7
+ '@rollup/pluginutils': 5.1.0
+ chokidar: 3.5.3
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ local-pkg: 0.4.3
+ magic-string: 0.30.5
+ minimatch: 9.0.3
+ resolve: 1.22.8
+ unplugin: 1.6.0
+ vue: 3.3.4
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /unplugin@1.6.0:
+ resolution: {integrity: sha512-BfJEpWBu3aE/AyHx8VaNE/WgouoQxgH9baAiH82JjX8cqVyi3uJQstqwD5J+SZxIK326SZIhsSZlALXVBCknTQ==}
+ dependencies:
+ acorn: 8.11.3
+ chokidar: 3.5.3
+ webpack-sources: 3.2.3
+ webpack-virtual-modules: 0.6.1
+ dev: true
+
+ /update-browserslist-db@1.0.13(browserslist@4.22.3):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.22.3
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
+ /uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+ dependencies:
+ punycode: 2.3.1
+ dev: true
+
+ /util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ dev: true
+
+ /validator@13.11.0:
+ resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==}
+ engines: {node: '>= 0.10'}
+ dev: true
+
+ /vite-plugin-dts@2.3.0(@types/node@18.19.3)(vite@5.0.10):
+ resolution: {integrity: sha512-WbJgGtsStgQhdm3EosYmIdTGbag5YQpZ3HXWUAPCDyoXI5qN6EY0V7NXq0lAmnv9hVQsvh0htbYcg0Or5Db9JQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: '>=2.9.0'
+ dependencies:
+ '@babel/parser': 7.23.9
+ '@microsoft/api-extractor': 7.39.4(@types/node@18.19.3)
+ '@rollup/pluginutils': 5.1.0
+ '@rushstack/node-core-library': 3.64.2(@types/node@18.19.3)
+ debug: 4.3.4
+ fast-glob: 3.3.2
+ fs-extra: 10.1.0
+ kolorist: 1.8.0
+ magic-string: 0.29.0
+ ts-morph: 18.0.0
+ vite: 5.0.10(@types/node@18.19.3)(sass@1.70.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - rollup
+ - supports-color
+ dev: true
+
+ /vite@5.0.10(@types/node@18.19.3)(sass@1.70.0):
+ resolution: {integrity: sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ '@types/node': 18.19.3
+ esbuild: 0.19.12
+ postcss: 8.4.33
+ rollup: 4.9.6
+ sass: 1.70.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /vue-demi@0.13.11(vue@3.3.4):
+ resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.3.4
+ dev: false
+
+ /vue-demi@0.14.6(vue@3.3.4):
+ resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.3.4
+
+ /vue-dompurify-html@3.1.2(vue@3.3.4):
+ resolution: {integrity: sha512-2xCnSuog5+OPUtmeAwPZY/6oV9YKuLhjgcl5EUw3jKbmhnyPo8YyCczCeRNGBorVcz1fCGm6PEOIUSXNS8I0ZA==}
+ peerDependencies:
+ vue: ^2.7.0 || ^3.0.0
+ dependencies:
+ dompurify: 2.5.2
+ vue: 3.3.4
+ vue-demi: 0.13.11(vue@3.3.4)
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ dev: false
+
+ /vue-eslint-parser@9.4.2(eslint@8.57.0):
+ resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: '>=6.0.0'
+ dependencies:
+ debug: 4.3.4
+ eslint: 8.57.0
+ eslint-scope: 7.2.2
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ esquery: 1.5.0
+ lodash: 4.17.21
+ semver: 7.5.4
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /vue-i18n@9.2.2(vue@3.3.4):
+ resolution: {integrity: sha512-yswpwtj89rTBhegUAv9Mu37LNznyu3NpyLQmozF3i1hYOhwpG8RjcjIFIIfnu+2MDZJGSZPXaKWvnQA71Yv9TQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ '@intlify/core-base': 9.2.2
+ '@intlify/shared': 9.2.2
+ '@intlify/vue-devtools': 9.2.2
+ '@vue/devtools-api': 6.5.1
+ vue: 3.3.4
+ dev: false
+
+ /vue-router@4.2.4(vue@3.3.4):
+ resolution: {integrity: sha512-9PISkmaCO02OzPVOMq2w82ilty6+xJmQrarYZDkjZBfl4RvYAlt4PKnEX21oW4KTtWfa9OuO/b3qk1Od3AEdCQ==}
+ peerDependencies:
+ vue: ^3.2.0
+ dependencies:
+ '@vue/devtools-api': 6.5.1
+ vue: 3.3.4
+ dev: false
+
+ /vue-template-compiler@2.7.16:
+ resolution: {integrity: sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ dev: true
+
+ /vue-tsc@1.8.25(typescript@5.3.2):
+ resolution: {integrity: sha512-lHsRhDc/Y7LINvYhZ3pv4elflFADoEOo67vfClAfF2heVHpHmVquLSjojgCSIwzA4F0Pc4vowT/psXCYcfk+iQ==}
+ hasBin: true
+ peerDependencies:
+ typescript: '*'
+ dependencies:
+ '@volar/typescript': 1.11.1
+ '@vue/language-core': 1.8.25(typescript@5.3.2)
+ semver: 7.5.4
+ typescript: 5.3.2
+ dev: true
+
+ /vue@3.3.4:
+ resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==}
+ dependencies:
+ '@vue/compiler-dom': 3.3.4
+ '@vue/compiler-sfc': 3.3.4
+ '@vue/runtime-dom': 3.3.4
+ '@vue/server-renderer': 3.3.4(vue@3.3.4)
+ '@vue/shared': 3.3.4
+
+ /webpack-sources@3.2.3:
+ resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
+ engines: {node: '>=10.13.0'}
+ dev: true
+
+ /webpack-virtual-modules@0.6.1:
+ resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==}
+ dev: true
+
+ /which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /wrappy@1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+ dev: true
+
+ /xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /xss@1.0.14:
+ resolution: {integrity: sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==}
+ engines: {node: '>= 0.10.0'}
+ hasBin: true
+ dependencies:
+ commander: 2.20.3
+ cssfilter: 0.0.10
+ dev: false
+
+ /yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+ dev: true
+
+ /yallist@4.0.0:
+ resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
+ dev: true
+
+ /yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /z-schema@5.0.5:
+ resolution: {integrity: sha512-D7eujBWkLa3p2sIpJA0d1pr7es+a7m0vFAnZLlCEKq/Ij2k0MLi9Br2UPxoxdYystm5K1yeBGzub0FlYUEWj2Q==}
+ engines: {node: '>=8.0.0'}
+ hasBin: true
+ dependencies:
+ lodash.get: 4.4.2
+ lodash.isequal: 4.5.0
+ validator: 13.11.0
+ optionalDependencies:
+ commander: 9.5.0
+ dev: true
diff --git a/public/favicon.ico b/public/favicon.ico
new file mode 100644
index 0000000000000000000000000000000000000000..ba6134a0ab94b8dd83d098e059d3c4dd93dd1041
Binary files /dev/null and b/public/favicon.ico differ
diff --git a/src/@types/app.ts b/src/@types/app.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4412386759c4d63a63d337859a6f424105269caa
--- /dev/null
+++ b/src/@types/app.ts
@@ -0,0 +1,27 @@
+export interface AppItemT {
+ category: string | null;
+ description: string | null;
+ iconUrl: string | null;
+ name: string;
+ tags: string[];
+ pkgIds: PkgIdsT;
+}
+export interface PkgIdsT {
+ EPKG: string;
+ IMAGE: string;
+ RPM: string;
+};
+
+export interface AppT {
+ name: string;
+ children: AppItemT[];
+}
+
+export interface AppInfoT {
+ name: string;
+ cover: string;
+ repository: string;
+ size: string;
+ source_code: string;
+ bin_code: string;
+}
diff --git a/src/@types/components/navTab.ts b/src/@types/components/navTab.ts
new file mode 100644
index 0000000000000000000000000000000000000000..581a386b0f9d7e7ede125d84c8809b9e663969b9
--- /dev/null
+++ b/src/@types/components/navTab.ts
@@ -0,0 +1,10 @@
+export interface SelectedItemT {
+ value: string | number;
+ label: string;
+ // 路由跳转 router.push
+ path?: string;
+ // 外链跳转 window.open
+ herf?: string;
+ // 外链跳转参数
+ target?: string;
+}
diff --git a/src/@types/domain.ts b/src/@types/domain.ts
new file mode 100644
index 0000000000000000000000000000000000000000..29d679e2dfd060120d4f899368b2dce8adb79c09
--- /dev/null
+++ b/src/@types/domain.ts
@@ -0,0 +1,14 @@
+export interface SearchAppT {
+ name: string;
+ os: string;
+ arch: string;
+ category: string;
+ timeOrder: string;
+}
+
+export interface PkgPageSizeT {
+ pageNum?: number;
+ pageSize?: number;
+ timeOrder?: string;
+ name: string;
+}
diff --git a/src/@types/locale.ts b/src/@types/locale.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b166a3d425d02a1cbcceff3efc38215bc20413df
--- /dev/null
+++ b/src/@types/locale.ts
@@ -0,0 +1 @@
+export type LocaleT = 'zh' | 'en';
diff --git a/src/@types/response.ts b/src/@types/response.ts
new file mode 100644
index 0000000000000000000000000000000000000000..ad1fd8e4ec87982b2760b47045346647d1839261
--- /dev/null
+++ b/src/@types/response.ts
@@ -0,0 +1,5 @@
+export interface ResponseT {
+ code: string | number;
+ msg: string;
+ data: T;
+}
diff --git a/src/@types/search.ts b/src/@types/search.ts
new file mode 100644
index 0000000000000000000000000000000000000000..db817346b2b64ebf0f86a225533fb025f7394267
--- /dev/null
+++ b/src/@types/search.ts
@@ -0,0 +1,24 @@
+export interface RecommendSubItemT {
+ name: string;
+ pkgId: string;
+ version?: string
+}
+
+
+export interface RecommendItemT {
+ docCount: number;
+ key: string;
+ nameDocs?: RecommendSubItemT[];
+}
+
+
+export interface SearchParamsT {
+ value: string;
+ filter: string;
+}
+
+
+export interface MenuCountT {
+ key: string;
+ docCount: number;
+}
\ No newline at end of file
diff --git a/src/App.vue b/src/App.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9698053c2727a862d1fc2aa78b6588a7fa234814
--- /dev/null
+++ b/src/App.vue
@@ -0,0 +1,72 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/api/api-domain.ts b/src/api/api-domain.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0a9e47b1b6c713b989c015b25e06c9d55d518336
--- /dev/null
+++ b/src/api/api-domain.ts
@@ -0,0 +1,64 @@
+import { request } from '@/shared/axios';
+import type { AxiosResponse } from '@/shared/axios';
+import type { PkgPageSizeT } from '@/@types/domain';
+
+
+
+/**
+ * 上游兼容应用全景
+ * @name getAppVersion
+ * @param {string} type - 类型
+ * @param {string} id - 应用id
+ */
+export function getAppVersion(params: PkgPageSizeT) {
+ const url = `/api-query/appVersion`;
+ return request
+ .get(url, {
+ params
+ })
+ .then((res: AxiosResponse) => res?.data);
+}
+
+
+interface ColumnT {
+ name: string;
+ column: string;
+}
+
+export function getStat() {
+ const url = `/api-query/field/stat`;
+ return request.get(url).then((res: AxiosResponse) => res?.data);
+}
+
+interface DetailT {
+ appPkgId: string;
+ epkgPkgId: string;
+ rpmPkgId: string;
+}
+export function getDetail(params: DetailT) {
+ const url = `/api-query/field/detail`;
+ return request.get(url, { params }).then((res: AxiosResponse) => res?.data);
+}
+
+export function queryDownload(params: { app: string }) {
+ const url = '/dsapi/query/software/app/download?community=software';
+ return request.get(url, { params }).then((res: AxiosResponse) => res?.data);
+}
+
+// 领域应用
+export function getSearchAllColumn(params: ColumnT) {
+ const url = `/api-query/field/column`;
+ return request.get(url, { params }).then((res: AxiosResponse) => res?.data);
+}
+
+export function getSearchAllFiled(params: any) {
+ const url = `/api-query/field`;
+ return request.get(url, { params }).then((res: AxiosResponse) => res?.data);
+}
+
+//Tags
+
+export function getTags(id: string) {
+ const url = `/api-query/apppkg/tags?name=${id}`;
+ return request.get(url).then((res: AxiosResponse) => res?.data);
+}
\ No newline at end of file
diff --git a/src/api/api-feedback.ts b/src/api/api-feedback.ts
new file mode 100644
index 0000000000000000000000000000000000000000..23c258fd5b26416ee452a02d71b67cfaeb3cc7d7
--- /dev/null
+++ b/src/api/api-feedback.ts
@@ -0,0 +1,26 @@
+import { request } from '@/shared/axios';
+import type { AxiosResponse } from '@/shared/axios';
+import type { ResponseT } from '@/@types/response';
+
+
+interface FeedbackT {
+ feedbackPageUrl: string;
+ feedbackText: string;
+ feedbackValue: number;
+}
+
+
+/**
+ * 用户反馈
+ * @name postFeedback
+ * @param {Object} params
+ * @param {string} params.feedbackPageUrl - 评分页面
+ * @param {string} params.feedbackText - 评分内容
+ * @param {string} params.feedbackValue - 评分
+ * @return {Promise>} 返回一个 Promise,解析为提交的反馈信息是否成功的反馈信息
+ */
+
+export function postFeedback(params: FeedbackT): Promise> {
+ const url = '/dsapi/query/nps?community=software';
+ return request.post(url, params).then((res: AxiosResponse) => res?.data);
+}
diff --git a/src/api/api-search.ts b/src/api/api-search.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e0c2925cbc617671b6f42f07510e909f875703c
--- /dev/null
+++ b/src/api/api-search.ts
@@ -0,0 +1,52 @@
+import { request } from '@/shared/axios';
+import type { AxiosResponse } from '@/shared/axios';
+
+interface SearchT {
+ keyword: string;
+ pageNum: number;
+ pageSize: number;
+ dataType: string;
+}
+
+/**
+ * 搜索
+ * @name getSearchData
+ * @param {Object} params
+ * @param {string} params.keyword - 关键字
+ * @param {number} params.pageNum - 分页
+ * @param {number} params.pageSize - 分页数量
+ * @param {string} params.dataType - 过滤
+ * @return {Promise>} 返回一个 Promise,解析为提交的反馈信息是否成功的反馈信息
+ */
+
+export function getSearchData(params: SearchT) {
+ const url = '/api-search/software/docs';
+ return request.post(url, params).then((res: AxiosResponse) => res?.data);
+}
+
+
+export function getSearchRecommend(name: string, type?: string) {
+ const url = `/api-search/software/word?query=${name}&dataType=${type}`;
+ return request.post(url, {
+ headers: {
+ 'Content-Type': 'application/json;charset=UTF-8',
+ },
+ }).then((res: AxiosResponse) => res?.data);
+}
+
+
+
+export function getSearchCount(params: {
+ keyword: string
+}) {
+ const url = '/api-search/software/count';
+ return request.post(url, params).then((res: AxiosResponse) => res?.data);
+}
+
+
+
+
+export function getSearchDataAll(params: SearchT) {
+ const url = '/api-search/software/docsAll';
+ return request.post(url, params).then((res: AxiosResponse) => res?.data);
+}
diff --git a/src/api/api-upstream.ts b/src/api/api-upstream.ts
new file mode 100644
index 0000000000000000000000000000000000000000..70041353d66ad7784b207e7bb298cea48e0815c8
--- /dev/null
+++ b/src/api/api-upstream.ts
@@ -0,0 +1,17 @@
+import { request } from '@/shared/axios';
+import type { AxiosResponse } from '@/shared/axios';
+
+/**
+ * 应用筛选
+ * @name queryPkg
+ * @param {string} type - 类型
+ * @param {string} timeOrder - 排序
+ * @param {number} pageNum - 分页
+ * @param {number} pageSize - 分页数量
+ */
+
+export function getUpstream(name: string) {
+ const url = `/monitoring/api/v2/projects/?name=${name}`;
+ return request.get(url).then((res: AxiosResponse) => res?.data);
+}
+
diff --git a/src/assets/404.png b/src/assets/404.png
new file mode 100644
index 0000000000000000000000000000000000000000..9649a1b3b9e05a9f3c3d4dd9e3d452ee4114e6f7
Binary files /dev/null and b/src/assets/404.png differ
diff --git a/src/assets/Icon-M365-25x25.png b/src/assets/Icon-M365-25x25.png
new file mode 100644
index 0000000000000000000000000000000000000000..e369a4bae9dea2202b974f5115a75f4680252c30
Binary files /dev/null and b/src/assets/Icon-M365-25x25.png differ
diff --git a/src/assets/Icon-Word-25x25.png b/src/assets/Icon-Word-25x25.png
new file mode 100644
index 0000000000000000000000000000000000000000..8e36370adb42c2f7c43a11abfea7e009854e1c2c
Binary files /dev/null and b/src/assets/Icon-Word-25x25.png differ
diff --git a/src/assets/avatar.png b/src/assets/avatar.png
new file mode 100644
index 0000000000000000000000000000000000000000..48b288543d0e8a3af3f7d4f0ea3fbeb424fb4031
Binary files /dev/null and b/src/assets/avatar.png differ
diff --git a/src/assets/banner/banner.jpg b/src/assets/banner/banner.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..62321f842e2b93cc9ae0322446975b2d5c2bb2c8
Binary files /dev/null and b/src/assets/banner/banner.jpg differ
diff --git a/src/assets/bg.jpg b/src/assets/bg.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..62321f842e2b93cc9ae0322446975b2d5c2bb2c8
Binary files /dev/null and b/src/assets/bg.jpg differ
diff --git a/src/assets/card-bg.png b/src/assets/card-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..c02d8d99af2836070ca8779a5eb08f4fbc31c000
Binary files /dev/null and b/src/assets/card-bg.png differ
diff --git a/src/assets/default.png b/src/assets/default.png
new file mode 100644
index 0000000000000000000000000000000000000000..932ae5daad76b0b0fcdc5670cbcbe9eef15e8e4d
Binary files /dev/null and b/src/assets/default.png differ
diff --git a/src/assets/email.svg b/src/assets/email.svg
new file mode 100644
index 0000000000000000000000000000000000000000..efdb177e392cc42c9a40d16763e1671115c0f036
--- /dev/null
+++ b/src/assets/email.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/assets/footer-logo1.png b/src/assets/footer-logo1.png
new file mode 100644
index 0000000000000000000000000000000000000000..80f97536b255acb11f11412c2ee3b3a836e21a43
Binary files /dev/null and b/src/assets/footer-logo1.png differ
diff --git a/src/assets/footer/51cto.png b/src/assets/footer/51cto.png
new file mode 100644
index 0000000000000000000000000000000000000000..ad23c8864144205ec040b464cd9f27ce63d2a2d8
Binary files /dev/null and b/src/assets/footer/51cto.png differ
diff --git a/src/assets/footer/atom-logo.png b/src/assets/footer/atom-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..17451ffc7b013e3c7c3ceae5f362b695e1c96b8e
Binary files /dev/null and b/src/assets/footer/atom-logo.png differ
diff --git a/src/assets/footer/atom-logo.svg b/src/assets/footer/atom-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0cce03d0379659ecc5f3ec9113f747633ec0f287
--- /dev/null
+++ b/src/assets/footer/atom-logo.svg
@@ -0,0 +1,16 @@
+
+
\ No newline at end of file
diff --git a/src/assets/footer/atom-pc.png b/src/assets/footer/atom-pc.png
new file mode 100644
index 0000000000000000000000000000000000000000..a5feafdd08c47ed32452b9ad23364bf28f1df44d
Binary files /dev/null and b/src/assets/footer/atom-pc.png differ
diff --git a/src/assets/footer/bilibili.png b/src/assets/footer/bilibili.png
new file mode 100644
index 0000000000000000000000000000000000000000..c7c07526ce6be5b436aa14774af78ff29c9a407b
Binary files /dev/null and b/src/assets/footer/bilibili.png differ
diff --git a/src/assets/footer/bilibili@2x.png b/src/assets/footer/bilibili@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9a53a60c02e8918aff5598f62466ca1396bd0fa1
Binary files /dev/null and b/src/assets/footer/bilibili@2x.png differ
diff --git a/src/assets/footer/code-xzs.png b/src/assets/footer/code-xzs.png
new file mode 100644
index 0000000000000000000000000000000000000000..e78a9836a8e294921ad2da821bdb9daa384e87d9
Binary files /dev/null and b/src/assets/footer/code-xzs.png differ
diff --git a/src/assets/footer/code-zgz.png b/src/assets/footer/code-zgz.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba38aaee5973fac8246cfa37ff0f1d5bc92e193d
Binary files /dev/null and b/src/assets/footer/code-zgz.png differ
diff --git a/src/assets/footer/csdn.png b/src/assets/footer/csdn.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4fd71d08f709f03832ceb8889154d75b2556ff0
Binary files /dev/null and b/src/assets/footer/csdn.png differ
diff --git a/src/assets/footer/footer-bg-mo.png b/src/assets/footer/footer-bg-mo.png
new file mode 100644
index 0000000000000000000000000000000000000000..6e527ca485015a15ad0fb0f497ef9f43053092d8
Binary files /dev/null and b/src/assets/footer/footer-bg-mo.png differ
diff --git a/src/assets/footer/footer-bg.png b/src/assets/footer/footer-bg.png
new file mode 100644
index 0000000000000000000000000000000000000000..7d1337c78284795708a7108be3999001a2adc279
Binary files /dev/null and b/src/assets/footer/footer-bg.png differ
diff --git a/src/assets/footer/footer-bg1.png b/src/assets/footer/footer-bg1.png
new file mode 100644
index 0000000000000000000000000000000000000000..be4dbf4cecb7cbceac40a69a74f6b631c637129f
Binary files /dev/null and b/src/assets/footer/footer-bg1.png differ
diff --git a/src/assets/footer/footer-logo2.png b/src/assets/footer/footer-logo2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a7a1f28ff53132ca991eb82e7ee5a0f9af2498a9
Binary files /dev/null and b/src/assets/footer/footer-logo2.png differ
diff --git a/src/assets/footer/img-gzh.png b/src/assets/footer/img-gzh.png
new file mode 100644
index 0000000000000000000000000000000000000000..afc3f345e603e73aa297c656ee2e15b085945b18
Binary files /dev/null and b/src/assets/footer/img-gzh.png differ
diff --git a/src/assets/footer/img-xzs.png b/src/assets/footer/img-xzs.png
new file mode 100644
index 0000000000000000000000000000000000000000..de17acbd32440e608d227645a2d9b4425cb0bda8
Binary files /dev/null and b/src/assets/footer/img-xzs.png differ
diff --git a/src/assets/footer/infoq.png b/src/assets/footer/infoq.png
new file mode 100644
index 0000000000000000000000000000000000000000..d1d02c1e374b67d79b2594713da02e353d529696
Binary files /dev/null and b/src/assets/footer/infoq.png differ
diff --git a/src/assets/footer/juejin.png b/src/assets/footer/juejin.png
new file mode 100644
index 0000000000000000000000000000000000000000..245b8384eb0c7994cc42984ed749dd5046344017
Binary files /dev/null and b/src/assets/footer/juejin.png differ
diff --git a/src/assets/footer/linkedin@2x.png b/src/assets/footer/linkedin@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e181c63772a046c23285c7c9c7c2c618f66fb55
Binary files /dev/null and b/src/assets/footer/linkedin@2x.png differ
diff --git a/src/assets/footer/oschina.png b/src/assets/footer/oschina.png
new file mode 100644
index 0000000000000000000000000000000000000000..1551d3b87509c33f0a7b1259581bfb9e9ccdd8ad
Binary files /dev/null and b/src/assets/footer/oschina.png differ
diff --git a/src/assets/footer/reddit-square@2x.png b/src/assets/footer/reddit-square@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..1afe2ed5b29397a24d70f8299afda81eee53b92d
Binary files /dev/null and b/src/assets/footer/reddit-square@2x.png differ
diff --git a/src/assets/footer/twitter@2x.png b/src/assets/footer/twitter@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..89902141da391b2d8132769a9ee91116f1ffa5fd
Binary files /dev/null and b/src/assets/footer/twitter@2x.png differ
diff --git a/src/assets/footer/youtube@2x.png b/src/assets/footer/youtube@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..bb9192d95653bcc18e1dbea2c9062f1d55ee3e08
Binary files /dev/null and b/src/assets/footer/youtube@2x.png differ
diff --git a/src/assets/gitee.svg b/src/assets/gitee.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f33753cd18c246c7e958c5b277826b744b3e1f7a
--- /dev/null
+++ b/src/assets/gitee.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icon-copy.svg b/src/assets/icon-copy.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d816405cbd58c4e1108f383a6ff478df69c407fc
--- /dev/null
+++ b/src/assets/icon-copy.svg
@@ -0,0 +1,10 @@
+
+
diff --git a/src/assets/icon/apppkg.svg b/src/assets/icon/apppkg.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4f5acb216f1a98763b5685b0b82b06cef702e505
--- /dev/null
+++ b/src/assets/icon/apppkg.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/icon/epkg.svg b/src/assets/icon/epkg.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f900bf4a061f1869cab9abc2b26234a9f9695fcf
--- /dev/null
+++ b/src/assets/icon/epkg.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/icon/icon-arch.svg b/src/assets/icon/icon-arch.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9e9e5195b8e9f05dd3bb16b4926df47c1cbcd181
--- /dev/null
+++ b/src/assets/icon/icon-arch.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/src/assets/icon/icon-category.svg b/src/assets/icon/icon-category.svg
new file mode 100644
index 0000000000000000000000000000000000000000..11e8cdd14c0ec98b759e3030c73b2644cd5037f8
--- /dev/null
+++ b/src/assets/icon/icon-category.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/assets/icon/icon-os.svg b/src/assets/icon/icon-os.svg
new file mode 100644
index 0000000000000000000000000000000000000000..93f649ae59cd26faad21cdbc0462a6ccc17b83ca
--- /dev/null
+++ b/src/assets/icon/icon-os.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/icon/image.svg b/src/assets/icon/image.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f4a7c0e2445d9fb3c0b6ff76e8a364c059f6d30c
--- /dev/null
+++ b/src/assets/icon/image.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/icon/rpm.svg b/src/assets/icon/rpm.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6c16c7e1997fc4bdbc5388cc18eb4526c9d987f1
--- /dev/null
+++ b/src/assets/icon/rpm.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/logo.png b/src/assets/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb7b8af86025b8f27fa3b2539300b24a0487895f
Binary files /dev/null and b/src/assets/logo.png differ
diff --git a/src/assets/logo.svg b/src/assets/logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..291baca7d896b6d9ed122e9574f880cc9da48463
--- /dev/null
+++ b/src/assets/logo.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/src/assets/logo_dark.png b/src/assets/logo_dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..76d8bbf67d605e448c61450bd4db86daf539737a
Binary files /dev/null and b/src/assets/logo_dark.png differ
diff --git a/src/assets/logo_dark.svg b/src/assets/logo_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c13a22f49ac9c40c2d2fba85bc7614daad9dfbe2
--- /dev/null
+++ b/src/assets/logo_dark.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/src/assets/openeuler-logo-dark.png b/src/assets/openeuler-logo-dark.png
new file mode 100644
index 0000000000000000000000000000000000000000..9d6e4ff70bf6864af29f5fa00fc46d2dc59d57a1
Binary files /dev/null and b/src/assets/openeuler-logo-dark.png differ
diff --git a/src/assets/openeuler-logo.png b/src/assets/openeuler-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..274721a4e5acb882fd3c1b5fa8bcf95c2f6bf8aa
Binary files /dev/null and b/src/assets/openeuler-logo.png differ
diff --git a/src/assets/openeuler-logo.svg b/src/assets/openeuler-logo.svg
new file mode 100644
index 0000000000000000000000000000000000000000..291baca7d896b6d9ed122e9574f880cc9da48463
--- /dev/null
+++ b/src/assets/openeuler-logo.svg
@@ -0,0 +1,29 @@
+
+
\ No newline at end of file
diff --git a/src/assets/qrcode.png b/src/assets/qrcode.png
new file mode 100644
index 0000000000000000000000000000000000000000..ea524b978506fb77676aee485d468f2af3abd51a
Binary files /dev/null and b/src/assets/qrcode.png differ
diff --git a/src/assets/quickissue-logo.png b/src/assets/quickissue-logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..0da6e43d0b6e3458338008b681783ea4fad596c0
Binary files /dev/null and b/src/assets/quickissue-logo.png differ
diff --git a/src/assets/style/category/content/index.scss b/src/assets/style/category/content/index.scss
new file mode 100644
index 0000000000000000000000000000000000000000..e60a6610067a49a651f145fe15b091d04f7e4955
--- /dev/null
+++ b/src/assets/style/category/content/index.scss
@@ -0,0 +1,46 @@
+.pkg-content {
+ position: relative;
+ min-height: 680px;
+}
+.filter-sidebar {
+ position: relative;
+
+ .filter-text {
+ @include text1;
+ color: var(--o-color-info3);
+ }
+ .filter-title {
+ @include text1;
+ font-weight: 600;
+ color: var(--o-color-info1);
+ display: flex;
+ align-items: center;
+ .o-icon {
+ width: 24px;
+ height: 24px;
+ margin-right: 8px;
+ }
+ }
+}
+.search-result {
+ margin-bottom: 24px;
+ padding: 0 24px;
+ .text {
+ @include text1;
+ color: var(--o-color-info3);
+ }
+
+ .search-filter-tags {
+ display: flex;
+ gap: 8px;
+ flex-wrap: wrap;
+ margin-top: 8px;
+ }
+}
+
+.pagination-box {
+ display: flex;
+ align-items: center;
+ justify-content: flex-end;
+ margin: 40px 0;
+}
diff --git a/src/assets/style/global.scss b/src/assets/style/global.scss
new file mode 100644
index 0000000000000000000000000000000000000000..587afe969bb348a2d4f0adea00fde895247c1e2e
--- /dev/null
+++ b/src/assets/style/global.scss
@@ -0,0 +1,39 @@
+html {
+ --layout-pkg-radius: 4px;
+}
+:root {
+ --o-radius_control-xs: 4px;
+ --o-radius_control-s: 4px;
+ --o-radius_control-m: 4px;
+ --o-radius_control-l: 4px;
+}
+
+.o-btn {
+ --btn-radius: var(--btn-height);
+}
+.o-tag {
+ border-radius: var(--tag-height);
+}
+.o-icon {
+ svg {
+ fill: currentColor;
+ }
+}
+.o-card {
+ --card-cover-radius: 0;
+ --card-radius: 0;
+}
+
+.o-dialog {
+ --dlg-radius: var(--layout-pkg-radius);
+}
+// 分页器圆角重置
+.o-pagination-round-pill {
+ --pagination-radius: 4px;
+ .o-pagination-select {
+ --select-radius: 4px;
+ }
+ .o-pagination-input {
+ --input-radius: 4px;
+ }
+}
diff --git a/src/assets/style/mixin/common.scss b/src/assets/style/mixin/common.scss
new file mode 100644
index 0000000000000000000000000000000000000000..653c17c08d06259fc2cf4766c4c99425493aa83e
--- /dev/null
+++ b/src/assets/style/mixin/common.scss
@@ -0,0 +1,27 @@
+@mixin in-dark {
+ [data-o-theme='dark'] {
+ @content;
+ }
+}
+
+@mixin img-in-dark {
+ filter: brightness(80%) grayscale(20%) contrast(1.2);
+}
+
+@mixin scrollbar {
+ &::-webkit-scrollbar-track {
+ border-radius: 4px;
+ background-color: var(--o-color-fill1);
+ }
+
+ &::-webkit-scrollbar {
+ width: 6px;
+ height: 6px;
+ background-color: var(--o-color-fill1);
+ }
+
+ &::-webkit-scrollbar-thumb {
+ border-radius: 4px;
+ background: var(--o-color-control1);
+ }
+}
diff --git a/src/assets/style/mixin/font.scss b/src/assets/style/mixin/font.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f3dc947be12e68e5d04361f9b90de206e42b4e86
--- /dev/null
+++ b/src/assets/style/mixin/font.scss
@@ -0,0 +1,243 @@
+@use '@/assets/style/mixin/screen.scss' as *;
+
+// 一级数据展示
+@mixin display1 {
+ font-size: 56px;
+ line-height: 80px;
+ @include respond-to('laptop') {
+ font-size: 48px;
+ line-height: 64px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 40px;
+ line-height: 56px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 40px;
+ line-height: 56px;
+ }
+ @include respond-to('phone') {
+ font-size: 22px;
+ line-height: 30px;
+ }
+}
+
+// 二级数据展示
+@mixin display2 {
+ font-size: 48px;
+ line-height: 64px;
+ @include respond-to('laptop') {
+ font-size: 40px;
+ line-height: 56px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 32px;
+ line-height: 44px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 32px;
+ line-height: 44px;
+ }
+ @include respond-to('phone') {
+ font-size: 20px;
+ line-height: 28px;
+ }
+}
+
+// 三级数据展示
+@mixin display3 {
+ font-size: 40px;
+ line-height: 56px;
+ @include respond-to('laptop') {
+ font-size: 32px;
+ line-height: 44px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 24px;
+ line-height: 32px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 22px;
+ line-height: 30px;
+ }
+ @include respond-to('phone') {
+ font-size: 18px;
+ line-height: 26px;
+ }
+}
+
+// 一级标题
+@mixin h1 {
+ font-size: 32px;
+ line-height: 44px;
+ @include respond-to('laptop') {
+ font-size: 20px;
+ line-height: 28px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 20px;
+ line-height: 28px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 18px;
+ line-height: 26px;
+ }
+ @include respond-to('phone') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+}
+
+// 二级标题
+@mixin h2 {
+ font-size: 24px;
+ line-height: 32px;
+ @include respond-to('laptop') {
+ font-size: 20px;
+ line-height: 28px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 18px;
+ line-height: 26px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 18px;
+ line-height: 26px;
+ }
+ @include respond-to('phone') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+}
+
+// 三级标题
+@mixin h3 {
+ font-size: 22px;
+ line-height: 30px;
+ @include respond-to('laptop') {
+ font-size: 18px;
+ line-height: 26px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ @include respond-to('phone') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+}
+
+// 四级标题
+@mixin h4 {
+ font-size: 20px;
+ line-height: 28px;
+ @include respond-to('laptop') {
+ font-size: 18px;
+ line-height: 26px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ @include respond-to('phone') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+}
+
+// 常规正文
+@mixin text1 {
+ font-size: 16px;
+ line-height: 24px;
+ @include respond-to('laptop') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+ @include respond-to('phone') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+}
+
+// 大号正文
+@mixin text2 {
+ font-size: 18px;
+ line-height: 26px;
+ @include respond-to('laptop') {
+ font-size: 16px;
+ line-height: 24px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+ @include respond-to('phone') {
+ font-size: 14px;
+ line-height: 22px;
+ }
+}
+
+// 提示文本1
+@mixin tip1 {
+ font-size: 14px;
+ line-height: 22px;
+ @include respond-to('laptop') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+ @include respond-to('phone') {
+ font-size: 10px;
+ line-height: 16px;
+ }
+}
+
+// 提示文本2
+@mixin tip2 {
+ font-size: 12px;
+ line-height: 18px;
+ @include respond-to('laptop') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+ @include respond-to('pad_h') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+ @include respond-to('pad_v') {
+ font-size: 12px;
+ line-height: 18px;
+ }
+ @include respond-to('phone') {
+ font-size: 10px;
+ line-height: 16px;
+ }
+}
diff --git a/src/assets/style/mixin/screen.scss b/src/assets/style/mixin/screen.scss
new file mode 100644
index 0000000000000000000000000000000000000000..4ae3eddaa5eac6bdad0251f31e87f70f5f6d76ac
--- /dev/null
+++ b/src/assets/style/mixin/screen.scss
@@ -0,0 +1,73 @@
+// 断点定义
+$breakpoints: (
+ // phone
+ 'phone': (0, 600px),
+ '>phone': 601px,
+ // pad
+ 'pad': (601px, 1200px),
+ '<=pad': (0, 1200px),
+ '>pad': 1201px,
+ // pad-v
+ 'pad_v': (601px, 840px),
+ '<=pad_v': (0, 840px),
+ '>pad_v': 841px,
+ // pad-h
+ 'pad_h': (841px, 1200px),
+ // laptop
+ 'laptop': (1201px, 1440px),
+ '<=laptop': (0, 1440px),
+ '>laptop': 1441px,
+ 'pad-laptop': (601px, 1440px),
+ 'pad_v-laptop': (841px, 1440px)
+);
+
+@mixin respond-to($breakname) {
+ $bp: map-get($breakpoints, $breakname);
+ @if type-of($bp) == 'list' {
+ $min: nth($bp, 1);
+ $max: nth($bp, 2);
+ @if $min == 0 {
+ @media (max-width: $max) {
+ @content;
+ }
+ } @else {
+ @media (min-width: $min) and (max-width: $max) {
+ @content;
+ }
+ }
+ } @else {
+ @media (min-width: $bp) {
+ @content;
+ }
+ }
+}
+
+@mixin hoverable($hover: hover) {
+ @media (hover: $hover) {
+ @content;
+ }
+}
+
+@mixin hover() {
+ @media (hover: hover) {
+ &:hover {
+ @content;
+ }
+ }
+}
+
+@mixin me-hover() {
+ @content;
+ @media (hover: hover) {
+ &:hover {
+ @content;
+ }
+ }
+}
+
+@mixin x-hover() {
+ transition: all var(--o-duration-m1) var(--o-easing-standard-in);
+ @include hover {
+ transform: rotate(180deg);
+ }
+}
diff --git a/src/assets/style/theme/dark.token.css b/src/assets/style/theme/dark.token.css
new file mode 100644
index 0000000000000000000000000000000000000000..a948fb9eb6098cb97466336cf46f261ea4c4c990
--- /dev/null
+++ b/src/assets/style/theme/dark.token.css
@@ -0,0 +1,2194 @@
+/* theme: opendesign.dark */
+[data-o-theme="dark"] {
+ /**
+ * @name
+ * @type palette
+ * @group white
+ * @description
+ */
+ --o-white: 255, 255, 255;
+ /**
+ * @name
+ * @type palette
+ * @group black
+ * @description
+ */
+ --o-black: 0, 0, 0;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-1: 11, 21, 55;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-2: 16, 30, 77;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-3: 27, 48, 113;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-4: 40, 68, 149;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-5: 55, 91, 184;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-6: 72, 116, 220;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-7: 105, 143, 227 ;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-8: 140, 171, 234;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-9: 176, 199, 241;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-10: 215, 227, 248;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-1: 81, 46, 9;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-2: 121, 75, 15;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-3: 161, 107, 22;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-4: 202, 143, 30;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-5: 242, 183, 38;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-6: 245, 202, 80;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-7: 247, 219, 122;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-8: 250, 234, 166;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-9: 252, 246, 210;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-10: 254, 251, 237;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-1: 77, 24, 0;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-2: 120, 42, 1;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-3: 163, 68, 8;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-4: 207, 97, 19;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-5: 250, 130, 33;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-6: 251, 143, 43;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-7: 252, 174, 91;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-8: 253, 202, 139;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-9: 254, 227, 188;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-10: 255, 248, 237;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-1: 77, 0, 17;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-2: 115, 3, 24;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-3: 153, 9, 31;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-4: 192, 17, 37;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-5: 230, 28, 43;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-6: 235, 35, 45;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-7: 240, 82, 85;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-8: 245, 132, 130;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-9: 250, 183, 180;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-10: 255, 234, 232;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-1: 0, 77, 42;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-2: 2, 102, 53;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-3: 10, 127, 66;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-4: 22, 152, 80;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-5: 36, 177, 95;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-6: 51, 193, 104;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-7: 90, 208, 131;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-8: 135, 224, 163;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-9: 185, 239, 200;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-10: 240, 255, 244;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-1: 77, 30, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-2: 116, 51, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-3: 154, 76, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-4: 193, 105, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-5: 231, 137, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-6: 236, 165, 47;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-7: 241, 191, 96;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-8: 245, 215, 147;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-9: 250, 237, 200;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-10: 253, 247, 232;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-1: 53, 70, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-2: 82, 105, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-3: 112, 141, 1;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-4: 143, 176, 2;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-5: 175, 211, 5;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-6: 184, 220, 48;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-7: 196, 229, 95;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-8: 212, 237, 145;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-9: 231, 246, 198;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-10: 244, 251, 231;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-1: 33, 60, 7;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-2: 51, 90, 11;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-3: 70, 119, 16;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-4: 91, 149, 21;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-5: 112, 179, 27;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-6: 184, 220, 48;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-7: 166, 209, 103;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-8: 195, 225, 148;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-9: 225, 240, 199;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-10: 242, 247, 231;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-1: 0, 60, 48;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-2: 0, 90, 71;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-3: 0, 119, 93;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-4: 0, 149, 113;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-5: 0, 179, 133;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-6: 39, 194, 152;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-7: 84, 209, 173;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-8: 135, 225, 197;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-9: 192, 240, 224;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-10: 228, 247, 241;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-1: 0, 52, 60;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-2: 0, 79, 90;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-3: 0, 107, 119;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-4: 0, 137, 149;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-5: 39, 186, 194;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-6: 84, 205, 209;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-7: 92, 208, 212;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-8: 135, 223, 225;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-9: 192, 240, 240;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-10: 228, 247, 247;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-1: 0, 47, 76;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-2: 0, 72, 115;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-3: 0, 99, 153;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-4: 0, 127, 191;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-5: 0, 156, 229;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-6: 47, 178, 234;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-7: 96, 198, 239;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-8: 147, 218, 245;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-9: 200, 237, 250;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-10: 232, 247, 252;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-1: 0, 43, 97;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-2: 0, 61, 133;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-3: 0, 80, 169;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-4: 0, 100, 204;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-5: 0, 122, 240;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-6: 49, 151, 243;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-7: 98, 178, 246;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-8: 149, 205, 249;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-9: 202, 231, 252;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-10: 233, 245, 254;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-1: 0, 0, 0;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-2: 18, 18, 20;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-3: 28, 26, 28;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-4: 36, 36, 39;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-5: 43, 43, 47;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-6: 53, 53, 57;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-7: 63, 63, 67;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-8: 85, 85, 88;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-9: 118, 118, 122;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-10: 156, 156, 159;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-11: 181, 181, 185;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-12: 208, 208, 210;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-13: 235, 235, 238;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-14: 255,255, 255;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-1: 5, 19, 101;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-2: 10, 28, 118;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-3: 16, 38, 138;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-4: 23, 50, 159;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-5: 31, 63, 179;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-6: 66, 96, 194;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-7: 106, 131, 209;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-8: 150, 170, 225;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-9: 209, 218, 241;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-10: 232, 236, 247;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-1: 34, 0, 109;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-2: 39, 2, 130;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-3: 46, 7, 150;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-4: 53, 13, 171;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-5: 61, 20, 191;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-6: 97, 62, 201;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-7: 150, 130, 223;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-8: 182, 169, 233;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-9: 217, 210, 244;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-10: 240, 237, 250;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-1: 60, 0, 97;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-2: 77, 0, 118;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-3: 95, 0, 138;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-4: 114, 0, 159;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-5: 135, 2, 179;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-6: 161, 41, 194;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-7: 187, 85, 209;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-8: 211, 136, 225;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-9: 234, 192, 240;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-10: 245, 228, 247;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-1: 81, 0, 51;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-2: 117, 0, 70;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-3: 153, 0, 86;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-4: 188, 0, 100;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-5: 224, 0, 112;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-6: 230, 46, 132;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-7: 236, 95, 156;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-8: 243, 146, 184;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-9: 249, 199, 217;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-10: 252, 232, 239;
+ /**
+ * @name
+ * @type color
+ * @group base
+ * @description
+ */
+ --o-color-white: rgb(var(--o-white));
+ /**
+ * @name
+ * @type color
+ * @group base
+ * @description
+ */
+ --o-color-black: rgb(var(--o-black));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 常规
+ */
+ --o-color-primary1: rgb(var(--o-kleinblue-5));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 悬浮
+ */
+ --o-color-primary2: rgb(var(--o-kleinblue-4));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 激活
+ */
+ --o-color-primary3: rgb(var(--o-kleinblue-7));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 禁用
+ */
+ --o-color-primary4: rgb(var(--o-kleinblue-3));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 常规-浅
+ */
+ --o-color-primary1-light: rgb(var(--o-kleinblue-2));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 悬浮-浅
+ */
+ --o-color-primary2-light: rgb(var(--o-kleinblue-3));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 激活-浅
+ */
+ --o-color-primary3-light: rgb(var(--o-kleinblue-4));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 禁用-浅
+ */
+ --o-color-primary4-light: rgb(var(--o-kleinblue-1));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 常规
+ */
+ --o-color-success1: rgb(var(--o-green-6));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 悬浮
+ */
+ --o-color-success2: rgb(var(--o-green-4));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 激活
+ */
+ --o-color-success3: rgb(var(--o-green-7));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 禁用
+ */
+ --o-color-success4: rgb(var(--o-green-3));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 常规-浅
+ */
+ --o-color-success1-light: rgb(var(--o-green-2));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 悬浮-浅
+ */
+ --o-color-success2-light: rgb(var(--o-green-3));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 激活-浅
+ */
+ --o-color-success3-light: rgb(var(--o-green-4));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 禁用-浅
+ */
+ --o-color-success4-light: rgb(var(--o-green-1));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 常规
+ */
+ --o-color-warning1: rgb(var(--o-orange-6));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 悬浮
+ */
+ --o-color-warning2: rgb(var(--o-orange-4));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 激活
+ */
+ --o-color-warning3: rgb(var(--o-orange-7));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 禁用
+ */
+ --o-color-warning4: rgb(var(--o-orange-3));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 常规-浅
+ */
+ --o-color-warning1-light: rgb(var(--o-orange-2));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 悬浮-浅
+ */
+ --o-color-warning2-light: rgb(var(--o-orange-3));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 激活-浅
+ */
+ --o-color-warning3-light: rgb(var(--o-orange-4));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 禁用-浅
+ */
+ --o-color-warning4-light: rgb(var(--o-orange-1));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 常规
+ */
+ --o-color-danger1: rgb(var(--o-red-6));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 悬浮
+ */
+ --o-color-danger2: rgb(var(--o-red-4));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 激活
+ */
+ --o-color-danger3: rgb(var(--o-red-7));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 禁用
+ */
+ --o-color-danger4: rgb(var(--o-red-3));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 常规-浅
+ */
+ --o-color-danger1-light: rgb(var(--o-red-2));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 悬浮-浅
+ */
+ --o-color-danger2-light: rgb(var(--o-red-3));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 激活-浅
+ */
+ --o-color-danger3-light: rgb(var(--o-red-4));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 禁用-浅
+ */
+ --o-color-danger4-light: rgb(var(--o-red-1));
+ /**
+ * @name
+ * @type color
+ * @group fill
+ * @description 一级填充:页面背景
+ */
+ --o-color-fill1: rgb(var(--o-mixedgray-3));
+ /**
+ * @name
+ * @type color
+ * @group fill
+ * @description 二级填充:区块/卡片
+ */
+ --o-color-fill2: rgb(var(--o-mixedgray-4));
+ /**
+ * @name
+ * @type color
+ * @group fill
+ * @description 三级填充:卡片
+ */
+ --o-color-fill3: rgb(var(--o-mixedgray-5));
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 常规,常用于边框
+ */
+ --o-color-control1: rgba(var(--o-mixedgray-10), 0.25);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 悬浮,常用于边框
+ */
+ --o-color-control2: rgba(var(--o-mixedgray-10), 0.6);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 激活,常用于边框
+ */
+ --o-color-control3: rgba(var(--o-mixedgray-10), 0.8);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 禁用,常用于边框
+ */
+ --o-color-control4: rgba(var(--o-mixedgray-10), 0.15);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 常规-浅,常用于背景
+ */
+ --o-color-control1-light: rgb(var(--o-mixedgray-7), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 悬浮-浅,常用于背景
+ */
+ --o-color-control2-light: rgb(var(--o-mixedgray-5), 1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 激活-浅,常用于背景
+ */
+ --o-color-control3-light: rgb(var(--o-mixedgray-6), 1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 禁用-浅,常用于背景
+ */
+ --o-color-control4-light: rgb(var(--o-mixedgray-5), 1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 很浅,常用于表格背景色
+ */
+ --o-color-control-light: rgb(var(--o-mixedgray-4), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 一级/强调/标题
+ */
+ --o-color-info1: rgba(var(--o-mixedgray-14), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 二级/次强调/正文
+ */
+ --o-color-info2: rgba(var(--o-mixedgray-14), 0.8);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 三级/辅助信息
+ */
+ --o-color-info3: rgba(var(--o-mixedgray-14), 0.6);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 置灰/禁用
+ */
+ --o-color-info4: rgba(var(--o-mixedgray-14), 0.4);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 一级/次强调/正文反色
+ */
+ --o-color-info1-inverse: rgba(var(--o-mixedgray-1), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 二级/辅助信息反色
+ */
+ --o-color-info2-inverse: rgba(var(--o-mixedgray-1), 0.8);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 三级/辅助信息反色
+ */
+ --o-color-info3-inverse: rgba(var(--o-mixedgray-1), 0.6);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 置灰/禁用反色
+ */
+ --o-color-info4-inverse: rgba(var(--o-mixedgray-1), 0.4);
+ /**
+ * @name
+ * @type color
+ * @group mask
+ * @description 全局遮罩
+ */
+ --o-color-mask1: rgba(var(--o-mixedgray-14), 0.4);
+ /**
+ * @name
+ * @type color
+ * @group mask
+ * @description 局部遮罩
+ */
+ --o-color-mask2: rgba(var(--o-mixedgray-4), 0.2);
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 常规
+ */
+ --o-color-link1: rgba(var(--o-kleinblue-5));
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 悬浮
+ */
+ --o-color-link2: rgba(var(--o-kleinblue-4));
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 激活
+ */
+ --o-color-link3: rgba(var(--o-kleinblue-7));
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 禁用
+ */
+ --o-color-link4: rgba(var(--o-kleinblue-3));
+ /**
+ * @name 阴影1
+ * @type shadow
+ * @group shadow
+ * @description 用于卡片、小弹窗、楼层阴影
+ */
+ --o-shadow-1: 0 3px 8px rgba(var(--o-mixedgray-1), 0.08);
+ /**
+ * @name 阴影2
+ * @type shadow
+ * @group shadow
+ * @description 用于卡片悬浮阴影
+ */
+ --o-shadow-2: 0 2px 24px rgba(var(--o-mixedgray-1), 0.15);
+ /**
+ * @name 阴影3
+ * @type shadow
+ * @group shadow
+ * @description 用于提示阴影
+ */
+ --o-shadow-3: 0 8px 40px rgba(var(--o-mixedgray-1), 0.1);
+ /**
+ * @name 间距1
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距1
+ */
+ --o-gap-1: 4px;
+ /**
+ * @name 间距2
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距2
+ */
+ --o-gap-2: 8px;
+ /**
+ * @name 间距3
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距3
+ */
+ --o-gap-3: 12px;
+ /**
+ * @name 间距4
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距4
+ */
+ --o-gap-4: 16px;
+ /**
+ * @name 间距5
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距5
+ */
+ --o-gap-5: 24px;
+ /**
+ * @name 间距6
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距6
+ */
+ --o-gap-6: 32px;
+ /**
+ * @name 间距7
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距7
+ */
+ --o-gap-7: 40px;
+ /**
+ * @name 间距8
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距8
+ */
+ --o-gap-8: 48px;
+ /**
+ * @name 间距9
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距9
+ */
+ --o-gap-9: 64px;
+ /**
+ * @name 间距10
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距10
+ */
+ --o-gap-10: 72px;
+ /**
+ * @name 超小尺寸
+ * @type size
+ * @group control_size
+ * @description 超小尺寸
+ */
+ --o-control_size-2xs: 14px;
+ /**
+ * @name 小尺寸
+ * @type size
+ * @group control_size
+ * @description 小尺寸
+ */
+ --o-control_size-xs: 16px;
+ /**
+ * @name 小尺寸
+ * @type size
+ * @group control_size
+ * @description 小尺寸
+ */
+ --o-control_size-s: 24px;
+ /**
+ * @name 中尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-m: 32px;
+ /**
+ * @name 大尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-l: 40px;
+ /**
+ * @name 大尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-xl: 48px;
+ /**
+ * @name 大尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-2xl: 56px;
+ /**
+ * @name 超小尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 超小尺寸图标
+ */
+ --o-icon_size-xs: 16px;
+ /**
+ * @name 小尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 小尺寸图标
+ */
+ --o-icon_size-s: 20px;
+ /**
+ * @name 中尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 中尺寸图标
+ */
+ --o-icon_size-m: 24px;
+ /**
+ * @name 大尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 大尺寸图标
+ */
+ --o-icon_size-l: 32px;
+ /**
+ * @name 超大尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 超大尺寸图标
+ */
+ --o-icon_size-xl: 40px;
+ /**
+ * @name 2xl尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 2xl尺寸图标
+ */
+ --o-icon_size-2xl: 48px;
+ /**
+ * @name 3xl尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 3xl尺寸图标
+ */
+ --o-icon_size-3xl: 56px;
+ /**
+ * @name 4xl尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 4xl尺寸图标
+ */
+ --o-icon_size-4xl: 64px;
+ /**
+ * @name 超小尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 超小尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-xs: 16px;
+ /**
+ * @name 小尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 小尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-s: 20px;
+ /**
+ * @name 中尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 中尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-m: 24px;
+ /**
+ * @name 大尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 大尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-l: 32px;
+ /**
+ * @name 超大尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 超大尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-xl: 40px;
+ /**
+ * @name 一级数据展示
+ * @type font
+ * @group font_size
+ * @description 一级数据展示
+ */
+ --o-font_size-display1: 56px;
+ /**
+ * @name 二级数据展示
+ * @type font
+ * @group font_size
+ * @description 二级数据展示
+ */
+ --o-font_size-display2: 48px;
+ /**
+ * @name 三级数据展示
+ * @type font
+ * @group font_size
+ * @description 三级数据展示
+ */
+ --o-font_size-display3: 40px;
+ /**
+ * @name 一级标题
+ * @type font
+ * @group font_size
+ * @description 一级标题
+ */
+ --o-font_size-h1: 32px;
+ /**
+ * @name 二级标题
+ * @type font
+ * @group font_size
+ * @description 二级标题
+ */
+ --o-font_size-h2: 24px;
+ /**
+ * @name 三级标题
+ * @type font
+ * @group font_size
+ * @description 三级标题
+ */
+ --o-font_size-h3: 22px;
+ /**
+ * @name 四级标题
+ * @type font
+ * @group font_size
+ * @description 四级标题
+ */
+ --o-font_size-h4: 20px;
+ /**
+ * @name 常规正文
+ * @type font
+ * @group font_size
+ * @description 常规正文
+ */
+ --o-font_size-text1: 16px;
+ /**
+ * @name 大号正文
+ * @type font
+ * @group font_size
+ * @description 大号正文
+ */
+ --o-font_size-text2: 18px;
+ /**
+ * @name 提示文本1
+ * @type font
+ * @group font_size
+ * @description 提示文本1
+ */
+ --o-font_size-tip1: 14px;
+ /**
+ * @name 提示文本2
+ * @type font
+ * @group font_size
+ * @description 提示文本2
+ */
+ --o-font_size-tip2: 12px;
+ /**
+ * @name 一级数据展示
+ * @type font
+ * @group line_height
+ * @description 一级数据展示
+ */
+ --o-line_height-display1: 80px;
+ /**
+ * @name 二级数据展示
+ * @type font
+ * @group line_height
+ * @description 二级数据展示
+ */
+ --o-line_height-display2: 64px;
+ /**
+ * @name 三级数据展示
+ * @type font
+ * @group line_height
+ * @description 三级数据展示
+ */
+ --o-line_height-display3: 56px;
+ /**
+ * @name 一级标题
+ * @type font
+ * @group line_height
+ * @description 一级标题
+ */
+ --o-line_height-h1: 44px;
+ /**
+ * @name 二级标题
+ * @type font
+ * @group line_height
+ * @description 二级标题
+ */
+ --o-line_height-h2: 32px;
+ /**
+ * @name 三级标题
+ * @type font
+ * @group line_height
+ * @description 三级标题
+ */
+ --o-line_height-h3: 30px;
+ /**
+ * @name 四级标题
+ * @type font
+ * @group line_height
+ * @description 四级标题
+ */
+ --o-line_height-h4: 28px;
+ /**
+ * @name 正文
+ * @type font
+ * @group line_height
+ * @description 正文
+ */
+ --o-line_height-text1: 24px;
+ /**
+ * @name 正文-大
+ * @type font
+ * @group line_height
+ * @description 正文-大
+ */
+ --o-line_height-text2: 26x;
+ /**
+ * @name 提示文本1
+ * @type font
+ * @group line_height
+ * @description 提示文本1
+ */
+ --o-line_height-tip1: 22px;
+ /**
+ * @name 提示文本2
+ * @type font
+ * @group line_height
+ * @description 提示文本2
+ */
+ --o-line_height-tip2: 18px;
+ /**
+ * @name 超小尺寸圆角
+ * @type size
+ * @group radius
+ * @description 超小尺寸圆角
+ */
+ --o-radius-xs: 4px;
+ /**
+ * @name 小尺寸圆角
+ * @type size
+ * @group radius
+ * @description 小尺寸圆角
+ */
+ --o-radius-s: 8px;
+ /**
+ * @name 中尺寸圆角
+ * @type size
+ * @group radius
+ * @description 中尺寸圆角
+ */
+ --o-radius-m: 12px;
+ /**
+ * @name 大尺寸圆角
+ * @type size
+ * @group radius
+ * @description 大尺寸圆角
+ */
+ --o-radius-l: 16px;
+ /**
+ * @name 大尺寸圆角
+ * @type size
+ * @group radius
+ * @description 大尺寸圆角,一般用于卡片
+ */
+ --o-radius-xl: 24px;
+ /**
+ * @name 超小尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 超小尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-xs: 4px;
+ /**
+ * @name 小尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 小尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-s: 8px;
+ /**
+ * @name 中尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 中尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-m: 12px;
+ /**
+ * @name 大尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 大尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-l: 16px;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于退出屏幕的动画
+ */
+ --o-duration-s: 200ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为standard-in时进入屏幕的动画
+ */
+ --o-duration-m1: 250ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为standard时开始、结束的动画
+ */
+ --o-duration-m2: 300ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为emphasized-in时进入屏幕的动画
+ */
+ --o-duration-m3: 400ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为emphasized时开始、结束的动画
+ */
+ --o-duration-l: 500ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为emphasized时,轮播切换动画
+ */
+ --o-duration-xl: 1000ms;
+ /**
+ * @name 线性动画曲线
+ * @type animation
+ * @group easing
+ * @description 线性曲线
+ */
+ --o-easing-linear: cubic-bezier(0, 0, 1, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于组件
+ */
+ --o-easing-standard: cubic-bezier(0.2, 0, 0, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于组件
+ */
+ --o-easing-standard-in: cubic-bezier(0, 0, 0, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于组件
+ */
+ --o-easing-standard-out: cubic-bezier(0.3, 0, 1, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于大卡片、场景切换
+ */
+ --o-easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于大卡片、场景切换
+ */
+ --o-easing-emphasized-in: cubic-bezier(0.3, 0, 0.8, 0.15);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于大卡片、场景切换
+ */
+ --o-easing-emphasized-out: cubic-bezier(0.05, 0.7, 0.1, 1);
+}
\ No newline at end of file
diff --git a/src/assets/style/theme/default-light.token.css b/src/assets/style/theme/default-light.token.css
new file mode 100644
index 0000000000000000000000000000000000000000..4c91801f0459894c5ac0b11a5ef41b3dca66c059
--- /dev/null
+++ b/src/assets/style/theme/default-light.token.css
@@ -0,0 +1,2194 @@
+/* theme: opendesign.light */
+:root,[data-o-theme="light"] {
+ /**
+ * @name
+ * @type palette
+ * @group white
+ * @description
+ */
+ --o-white: 255, 255, 255;
+ /**
+ * @name
+ * @type palette
+ * @group black
+ * @description
+ */
+ --o-black: 0, 0, 0;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-1: 227, 234, 246;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-2: 190, 206, 237;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-3: 132, 161, 220;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-4: 81, 119, 202;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-5: 37, 81, 185;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-6: 0, 47, 167;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-7: 0, 39, 147;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-8: 0, 31, 126;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-9: 0, 24, 126;
+ /**
+ * @name
+ * @type palette
+ * @group kleinblue
+ * @description
+ */
+ --o-kleinblue-10: 0, 18, 85;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-1: 254, 252, 233;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-2: 252, 248, 202;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-3: 249, 237, 149;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-4: 246, 224, 98;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-5: 243, 207, 49;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-6: 240, 188, 6;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-7: 200, 147, 0;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-8: 160, 109, 0;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-9: 120, 76, 0;
+ /**
+ * @name
+ * @type palette
+ * @group yellow
+ * @description
+ */
+ --o-yellow-10: 80, 47, 0;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-1: 255, 246, 232;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-2: 254, 226, 186;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-3: 253, 202, 140;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-4: 252, 176, 95;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-5: 251, 147, 50;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-6: 250, 115, 5;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-7: 207, 88, 3;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-8: 163, 64, 2;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-9: 120, 42, 1;
+ /**
+ * @name
+ * @type palette
+ * @group orange
+ * @description
+ */
+ --o-orange-10: 77, 24, 0;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-1: 255, 234, 232;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-2: 250, 185, 182;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-3: 245, 136, 134;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-4: 240, 87, 90;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-5: 235, 43, 52;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-6: 230, 0, 18;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-7: 192, 0, 22;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-8: 153, 0, 23;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-9: 115, 0, 21;
+ /**
+ * @name
+ * @type palette
+ * @group red
+ * @description
+ */
+ --o-red-10: 77, 0, 17;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-1: 232, 255, 238;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-2: 177, 239, 195;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-3: 128, 224, 158;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-4: 84, 208, 127;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-5: 45, 193, 101;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-6: 11, 177, 81;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-7: 7, 152, 72;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-8: 4, 127, 63;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-9: 2, 102, 53;
+ /**
+ * @name
+ * @type palette
+ * @group green
+ * @description
+ */
+ --o-green-10: 0, 77, 42;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-1: 253, 247, 232;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-2: 250, 237, 200;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-3: 245, 215, 147;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-4: 241, 191, 96;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-5: 236, 165, 47;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-6: 231, 137, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-7: 193, 105, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-8: 154, 76, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-9: 116, 51, 0;
+ /**
+ * @name
+ * @type palette
+ * @group amber
+ * @description
+ */
+ --o-amber-10: 77, 30, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-1: 243, 250, 230;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-2: 229, 244, 195;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-3: 208, 233, 140;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-4: 191, 223, 89;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-5: 177, 212, 42;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-6: 167, 201, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-7: 136, 168, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-8: 107, 134, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-9: 78, 101, 0;
+ /**
+ * @name
+ * @type palette
+ * @group lime
+ * @description
+ */
+ --o-lime-10: 51, 67, 0;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-1: 242, 247, 231;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-2: 225, 240, 199;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-3: 195, 225, 148;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-4: 166, 209, 103;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-5: 138, 194, 62;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-6: 112, 179, 27;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-7: 91, 149, 21;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-8: 70, 119, 16;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-9: 51, 90, 11;
+ /**
+ * @name
+ * @type palette
+ * @group light-green
+ * @description
+ */
+ --o-light-green-10: 33, 60, 7;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-1: 228, 247, 241;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-2: 192, 240, 224;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-3: 135, 225, 197;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-4: 84, 209, 173;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-5: 39, 194, 152;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-6: 0, 179, 133;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-7: 0, 149, 113;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-8: 0, 119, 93;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-9: 0, 90, 71;
+ /**
+ * @name
+ * @type palette
+ * @group teal
+ * @description
+ */
+ --o-teal-10: 0, 60, 48;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-1: 228, 247, 247;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-2: 192, 240, 240;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-3: 135, 223, 225;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-4: 84, 205, 209;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-5: 39, 186, 194;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-6: 0, 167, 179;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-7: 0, 137, 149;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-8: 0, 107, 119;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-9: 0, 79, 90;
+ /**
+ * @name
+ * @type palette
+ * @group cyan
+ * @description
+ */
+ --o-cyan-10: 0, 52, 60;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-1: 232, 247, 252;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-2: 200, 237, 250;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-3: 147, 218, 245;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-4: 96, 198, 239;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-5: 47, 178, 234;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-6: 0, 156, 229;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-7: 0, 127, 191;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-8: 0, 99, 153;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-9: 0, 72, 115;
+ /**
+ * @name
+ * @type palette
+ * @group light-blue
+ * @description
+ */
+ --o-light-blue-10: 0, 47, 76;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-1: 233, 245, 254;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-2: 202, 231, 252;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-3: 149, 205, 249;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-4: 98, 178, 246;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-5: 49, 151, 243;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-6: 0, 122, 240;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-7: 0, 100, 204;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-8: 0, 80, 169;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-9: 0, 61, 133;
+ /**
+ * @name
+ * @type palette
+ * @group blue
+ * @description
+ */
+ --o-blue-10: 0, 43, 97;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-1: 255, 255, 255;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-2: 240, 243, 245;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-3: 237, 237, 240;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-4: 232, 232, 235;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-5: 222, 222, 227;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-6: 212, 212, 217;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-7: 186, 186, 191;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-8: 149, 149, 157;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-9: 111, 111, 117;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-10: 85 , 85, 92;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-11: 61, 61, 66;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-12: 37, 37, 41;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-13: 21, 21, 23;
+ /**
+ * @name
+ * @type palette
+ * @group mixedgray
+ * @description
+ */
+ --o-mixedgray-14: 0, 0, 0;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-1: 232, 236, 247;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-2: 200, 211, 240;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-3: 150, 170, 225;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-4: 106, 131, 209;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-5: 66, 96, 194;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-6: 31, 63, 179;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-7: 23, 50, 159;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-8: 16, 38, 138;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-9: 10, 28, 118;
+ /**
+ * @name
+ * @type palette
+ * @group indigo
+ * @description
+ */
+ --o-indigo-10: 5, 19, 101;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-1: 234, 231, 249;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-2: 206, 199, 242;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-3: 163, 147, 229;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-4: 124, 100, 217;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-5: 90, 58, 204;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-6: 61, 20, 191;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-7: 53, 13, 171;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-8: 46, 7, 150;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-9: 39, 2, 130;
+ /**
+ * @name
+ * @type palette
+ * @group violet
+ * @description
+ */
+ --o-violet-10: 34, 0, 109;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-1: 245, 228, 247;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-2: 234, 192, 240;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-3: 211, 136, 225;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-4: 187, 85, 209;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-5: 161, 41, 194;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-6: 135, 2, 179;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-7: 114, 0, 159;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-8: 95, 0, 138;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-9: 77, 0, 118;
+ /**
+ * @name
+ * @type palette
+ * @group purple
+ * @description
+ */
+ --o-purple-10: 60, 0, 97;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-1: 252, 232, 239;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-2: 249, 199, 217;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-3: 243, 146, 184;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-4: 236, 95, 156;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-5: 230, 46, 132;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-6: 224, 0, 112;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-7: 188, 0, 100;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-8: 153, 0, 86;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-9: 117, 0, 70;
+ /**
+ * @name
+ * @type palette
+ * @group pink
+ * @description
+ */
+ --o-pink-10: 81, 0, 51;
+ /**
+ * @name
+ * @type color
+ * @group base
+ * @description
+ */
+ --o-color-white: rgb(var(--o-white));
+ /**
+ * @name
+ * @type color
+ * @group base
+ * @description
+ */
+ --o-color-black: rgb(var(--o-black));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 常规
+ */
+ --o-color-primary1: rgb(var(--o-kleinblue-6));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 悬浮
+ */
+ --o-color-primary2: rgb(var(--o-kleinblue-4));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 激活
+ */
+ --o-color-primary3: rgb(var(--o-kleinblue-7));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 禁用
+ */
+ --o-color-primary4: rgb(var(--o-kleinblue-3));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 常规-浅
+ */
+ --o-color-primary1-light: rgb(var(--o-kleinblue-2));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 悬浮-浅
+ */
+ --o-color-primary2-light: rgb(var(--o-kleinblue-3));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 激活-浅
+ */
+ --o-color-primary3-light: rgb(var(--o-kleinblue-4));
+ /**
+ * @name
+ * @type color
+ * @group primary
+ * @description 禁用-浅
+ */
+ --o-color-primary4-light: rgb(var(--o-kleinblue-1));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 常规
+ */
+ --o-color-success1: rgb(var(--o-green-6));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 悬浮
+ */
+ --o-color-success2: rgb(var(--o-green-4));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 激活
+ */
+ --o-color-success3: rgb(var(--o-green-7));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 禁用
+ */
+ --o-color-success4: rgb(var(--o-green-3));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 常规-浅
+ */
+ --o-color-success1-light: rgb(var(--o-green-2));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 悬浮-浅
+ */
+ --o-color-success2-light: rgb(var(--o-green-3));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 激活-浅
+ */
+ --o-color-success3-light: rgb(var(--o-green-4));
+ /**
+ * @name
+ * @type color
+ * @group success
+ * @description 禁用-浅
+ */
+ --o-color-success4-light: rgb(var(--o-green-1));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 常规
+ */
+ --o-color-warning1: rgb(var(--o-orange-6));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 悬浮
+ */
+ --o-color-warning2: rgb(var(--o-orange-4));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 激活
+ */
+ --o-color-warning3: rgb(var(--o-orange-7));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 禁用
+ */
+ --o-color-warning4: rgb(var(--o-orange-3));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 常规-浅
+ */
+ --o-color-warning1-light: rgb(var(--o-orange-2));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 悬浮-浅
+ */
+ --o-color-warning2-light: rgb(var(--o-orange-3));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 激活-浅
+ */
+ --o-color-warning3-light: rgb(var(--o-orange-4));
+ /**
+ * @name
+ * @type color
+ * @group warning
+ * @description 禁用-浅
+ */
+ --o-color-warning4-light: rgb(var(--o-orange-1));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 常规
+ */
+ --o-color-danger1: rgb(var(--o-red-6));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 悬浮
+ */
+ --o-color-danger2: rgb(var(--o-red-4));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 激活
+ */
+ --o-color-danger3: rgb(var(--o-red-7));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 禁用
+ */
+ --o-color-danger4: rgb(var(--o-red-3));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 常规-浅
+ */
+ --o-color-danger1-light: rgb(var(--o-red-2));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 悬浮-浅
+ */
+ --o-color-danger2-light: rgb(var(--o-red-3));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 激活-浅
+ */
+ --o-color-danger3-light: rgb(var(--o-red-4));
+ /**
+ * @name
+ * @type color
+ * @group danger
+ * @description 禁用-浅
+ */
+ --o-color-danger4-light: rgb(var(--o-red-1));
+ /**
+ * @name
+ * @type color
+ * @group fill
+ * @description 一级填充:页面背景
+ */
+ --o-color-fill1: rgb(var(--o-mixedgray-2));
+ /**
+ * @name
+ * @type color
+ * @group fill
+ * @description 二级填充:区块/卡片
+ */
+ --o-color-fill2: rgb(var(--o-mixedgray-1));
+ /**
+ * @name
+ * @type color
+ * @group fill
+ * @description 三级填充:卡片
+ */
+ --o-color-fill3: rgb(var(--o-mixedgray-3));
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 常规,常用于边框
+ */
+ --o-color-control1: rgba(var(--o-mixedgray-10), 0.25);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 悬浮,常用于边框
+ */
+ --o-color-control2: rgba(var(--o-mixedgray-10), 0.6);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 激活,常用于边框
+ */
+ --o-color-control3: rgba(var(--o-mixedgray-10), 0.8);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 禁用,常用于边框
+ */
+ --o-color-control4: rgba(var(--o-mixedgray-10), 0.1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 常规-浅,常用于背景
+ */
+ --o-color-control1-light: rgb(var(--o-mixedgray-5), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 悬浮-浅,常用于背景
+ */
+ --o-color-control2-light: rgb(var(--o-mixedgray-3), 1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 激活-浅,常用于背景
+ */
+ --o-color-control3-light: rgb(var(--o-mixedgray-4), 1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 禁用-浅,常用于背景
+ */
+ --o-color-control4-light: rgb(var(--o-mixedgray-3), 1);
+ /**
+ * @name
+ * @type color
+ * @group control
+ * @description 很浅,常用于表格背景色
+ */
+ --o-color-control-light: rgb(var(--o-mixedgray-1), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 一级/强调/标题
+ */
+ --o-color-info1: rgba(var(--o-mixedgray-14), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 二级/次强调/正文
+ */
+ --o-color-info2: rgba(var(--o-mixedgray-14), 0.8);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 三级/辅助信息
+ */
+ --o-color-info3: rgba(var(--o-mixedgray-14), 0.6);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 置灰/禁用
+ */
+ --o-color-info4: rgba(var(--o-mixedgray-14), 0.4);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 一级/次强调/正文反色
+ */
+ --o-color-info1-inverse: rgba(var(--o-mixedgray-1), 1.0);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 二级/辅助信息反色
+ */
+ --o-color-info2-inverse: rgba(var(--o-mixedgray-1), 0.8);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 三级/辅助信息反色
+ */
+ --o-color-info3-inverse: rgba(var(--o-mixedgray-1), 0.6);
+ /**
+ * @name
+ * @type color
+ * @group info
+ * @description 置灰/禁用反色
+ */
+ --o-color-info4-inverse: rgba(var(--o-mixedgray-1), 0.4);
+ /**
+ * @name
+ * @type color
+ * @group mask
+ * @description 全局遮罩
+ */
+ --o-color-mask1: rgba(var(--o-mixedgray-14), 0.4);
+ /**
+ * @name
+ * @type color
+ * @group mask
+ * @description 局部遮罩
+ */
+ --o-color-mask2: rgba(var(--o-mixedgray-1), 0.2);
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 常规
+ */
+ --o-color-link1: rgba(var(--o-kleinblue-6));
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 悬浮
+ */
+ --o-color-link2: rgba(var(--o-kleinblue-4));
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 激活
+ */
+ --o-color-link3: rgba(var(--o-kleinblue-7));
+ /**
+ * @name
+ * @type color
+ * @group link
+ * @description 禁用
+ */
+ --o-color-link4: rgba(var(--o-kleinblue-3));
+ /**
+ * @name 阴影1
+ * @type shadow
+ * @group shadow
+ * @description 用于卡片、小弹窗、楼层阴影
+ */
+ --o-shadow-1: 0 3px 8px rgba(var(--o-mixedgray-9), 0.08);
+ /**
+ * @name 阴影2
+ * @type shadow
+ * @group shadow
+ * @description 用于卡片悬浮阴影
+ */
+ --o-shadow-2: 0 2px 24px rgba(var(--o-mixedgray-9), 0.15);
+ /**
+ * @name 阴影3
+ * @type shadow
+ * @group shadow
+ * @description 用于提示阴影
+ */
+ --o-shadow-3: 0 8px 40px rgba(var(--o-mixedgray-9), 0.1);
+ /**
+ * @name 间距1
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距1
+ */
+ --o-gap-1: 4px;
+ /**
+ * @name 间距2
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距2
+ */
+ --o-gap-2: 8px;
+ /**
+ * @name 间距3
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距3
+ */
+ --o-gap-3: 12px;
+ /**
+ * @name 间距4
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距4
+ */
+ --o-gap-4: 16px;
+ /**
+ * @name 间距5
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距5
+ */
+ --o-gap-5: 24px;
+ /**
+ * @name 间距6
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距6
+ */
+ --o-gap-6: 32px;
+ /**
+ * @name 间距7
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距7
+ */
+ --o-gap-7: 40px;
+ /**
+ * @name 间距8
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距8
+ */
+ --o-gap-8: 48px;
+ /**
+ * @name 间距9
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距9
+ */
+ --o-gap-9: 64px;
+ /**
+ * @name 间距10
+ * @type gap
+ * @group gap
+ * @description 用于组件之间的间距10
+ */
+ --o-gap-10: 72px;
+ /**
+ * @name 超小尺寸
+ * @type size
+ * @group control_size
+ * @description 超小尺寸
+ */
+ --o-control_size-2xs: 14px;
+ /**
+ * @name 小尺寸
+ * @type size
+ * @group control_size
+ * @description 小尺寸
+ */
+ --o-control_size-xs: 16px;
+ /**
+ * @name 小尺寸
+ * @type size
+ * @group control_size
+ * @description 小尺寸
+ */
+ --o-control_size-s: 24px;
+ /**
+ * @name 中尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-m: 32px;
+ /**
+ * @name 大尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-l: 40px;
+ /**
+ * @name 大尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-xl: 48px;
+ /**
+ * @name 大尺寸
+ * @type size
+ * @group control_size
+ * @description 尺寸
+ */
+ --o-control_size-2xl: 56px;
+ /**
+ * @name 超小尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 超小尺寸图标
+ */
+ --o-icon_size-xs: 16px;
+ /**
+ * @name 小尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 小尺寸图标
+ */
+ --o-icon_size-s: 20px;
+ /**
+ * @name 中尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 中尺寸图标
+ */
+ --o-icon_size-m: 24px;
+ /**
+ * @name 大尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 大尺寸图标
+ */
+ --o-icon_size-l: 32px;
+ /**
+ * @name 超大尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 超大尺寸图标
+ */
+ --o-icon_size-xl: 40px;
+ /**
+ * @name 2xl尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 2xl尺寸图标
+ */
+ --o-icon_size-2xl: 48px;
+ /**
+ * @name 3xl尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 3xl尺寸图标
+ */
+ --o-icon_size-3xl: 56px;
+ /**
+ * @name 4xl尺寸图标
+ * @type size
+ * @group icon_size
+ * @description 4xl尺寸图标
+ */
+ --o-icon_size-4xl: 64px;
+ /**
+ * @name 超小尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 超小尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-xs: 16px;
+ /**
+ * @name 小尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 小尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-s: 20px;
+ /**
+ * @name 中尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 中尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-m: 24px;
+ /**
+ * @name 大尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 大尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-l: 32px;
+ /**
+ * @name 超大尺寸图标
+ * @type size
+ * @group icon_size_control
+ * @description 超大尺寸控件图标(组件使用)
+ */
+ --o-icon_size_control-xl: 40px;
+ /**
+ * @name 一级数据展示
+ * @type font
+ * @group font_size
+ * @description 一级数据展示
+ */
+ --o-font_size-display1: 56px;
+ /**
+ * @name 二级数据展示
+ * @type font
+ * @group font_size
+ * @description 二级数据展示
+ */
+ --o-font_size-display2: 48px;
+ /**
+ * @name 三级数据展示
+ * @type font
+ * @group font_size
+ * @description 三级数据展示
+ */
+ --o-font_size-display3: 40px;
+ /**
+ * @name 一级标题
+ * @type font
+ * @group font_size
+ * @description 一级标题
+ */
+ --o-font_size-h1: 32px;
+ /**
+ * @name 二级标题
+ * @type font
+ * @group font_size
+ * @description 二级标题
+ */
+ --o-font_size-h2: 24px;
+ /**
+ * @name 三级标题
+ * @type font
+ * @group font_size
+ * @description 三级标题
+ */
+ --o-font_size-h3: 22px;
+ /**
+ * @name 四级标题
+ * @type font
+ * @group font_size
+ * @description 四级标题
+ */
+ --o-font_size-h4: 20px;
+ /**
+ * @name 常规正文
+ * @type font
+ * @group font_size
+ * @description 常规正文
+ */
+ --o-font_size-text1: 16px;
+ /**
+ * @name 大号正文
+ * @type font
+ * @group font_size
+ * @description 大号正文
+ */
+ --o-font_size-text2: 18px;
+ /**
+ * @name 提示文本1
+ * @type font
+ * @group font_size
+ * @description 提示文本1
+ */
+ --o-font_size-tip1: 14px;
+ /**
+ * @name 提示文本2
+ * @type font
+ * @group font_size
+ * @description 提示文本2
+ */
+ --o-font_size-tip2: 12px;
+ /**
+ * @name 一级数据展示
+ * @type font
+ * @group line_height
+ * @description 一级数据展示
+ */
+ --o-line_height-display1: 80px;
+ /**
+ * @name 二级数据展示
+ * @type font
+ * @group line_height
+ * @description 二级数据展示
+ */
+ --o-line_height-display2: 64px;
+ /**
+ * @name 三级数据展示
+ * @type font
+ * @group line_height
+ * @description 三级数据展示
+ */
+ --o-line_height-display3: 56px;
+ /**
+ * @name 一级标题
+ * @type font
+ * @group line_height
+ * @description 一级标题
+ */
+ --o-line_height-h1: 44px;
+ /**
+ * @name 二级标题
+ * @type font
+ * @group line_height
+ * @description 二级标题
+ */
+ --o-line_height-h2: 32px;
+ /**
+ * @name 三级标题
+ * @type font
+ * @group line_height
+ * @description 三级标题
+ */
+ --o-line_height-h3: 30px;
+ /**
+ * @name 四级标题
+ * @type font
+ * @group line_height
+ * @description 四级标题
+ */
+ --o-line_height-h4: 28px;
+ /**
+ * @name 正文
+ * @type font
+ * @group line_height
+ * @description 正文
+ */
+ --o-line_height-text1: 24px;
+ /**
+ * @name 正文-大
+ * @type font
+ * @group line_height
+ * @description 正文-大
+ */
+ --o-line_height-text2: 26px;
+ /**
+ * @name 提示文本1
+ * @type font
+ * @group line_height
+ * @description 提示文本1
+ */
+ --o-line_height-tip1: 22px;
+ /**
+ * @name 提示文本2
+ * @type font
+ * @group line_height
+ * @description 提示文本2
+ */
+ --o-line_height-tip2: 18px;
+ /**
+ * @name 超小尺寸圆角
+ * @type size
+ * @group radius
+ * @description 超小尺寸圆角
+ */
+ --o-radius-xs: 4px;
+ /**
+ * @name 小尺寸圆角
+ * @type size
+ * @group radius
+ * @description 小尺寸圆角
+ */
+ --o-radius-s: 8px;
+ /**
+ * @name 中尺寸圆角
+ * @type size
+ * @group radius
+ * @description 中尺寸圆角
+ */
+ --o-radius-m: 12px;
+ /**
+ * @name 大尺寸圆角
+ * @type size
+ * @group radius
+ * @description 大尺寸圆角
+ */
+ --o-radius-l: 16px;
+ /**
+ * @name 大尺寸圆角
+ * @type size
+ * @group radius
+ * @description 大尺寸圆角,一般用于卡片
+ */
+ --o-radius-xl: 24px;
+ /**
+ * @name 超小尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 超小尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-xs: 4px;
+ /**
+ * @name 小尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 小尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-s: 8px;
+ /**
+ * @name 中尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 中尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-m: 12px;
+ /**
+ * @name 大尺寸控件圆角
+ * @type size
+ * @group radius_control
+ * @description 大尺寸控件圆角(组件使用)
+ */
+ --o-radius_control-l: 16px;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于退出屏幕的动画
+ */
+ --o-duration-s: 200ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为standard-in时进入屏幕的动画
+ */
+ --o-duration-m1: 250ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为standard时开始、结束的动画
+ */
+ --o-duration-m2: 300ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为emphasized-in时进入屏幕的动画
+ */
+ --o-duration-m3: 400ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为emphasized时开始、结束的动画
+ */
+ --o-duration-l: 500ms;
+ /**
+ * @name 持续时间
+ * @type animation
+ * @group duration
+ * @description 用于当曲线为emphasized时,轮播切换动画
+ */
+ --o-duration-xl: 1000ms;
+ /**
+ * @name 线性动画曲线
+ * @type animation
+ * @group easing
+ * @description 线性曲线
+ */
+ --o-easing-linear: cubic-bezier(0, 0, 1, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于组件
+ */
+ --o-easing-standard: cubic-bezier(0.2, 0, 0, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于组件
+ */
+ --o-easing-standard-in: cubic-bezier(0, 0, 0, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于组件
+ */
+ --o-easing-standard-out: cubic-bezier(0.3, 0, 1, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于大卡片、场景切换
+ */
+ --o-easing-emphasized: cubic-bezier(0.2, 0, 0, 1);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于大卡片、场景切换
+ */
+ --o-easing-emphasized-in: cubic-bezier(0.3, 0, 0.8, 0.15);
+ /**
+ * @name 动画曲线
+ * @type animation
+ * @group easing
+ * @description 用于大卡片、场景切换
+ */
+ --o-easing-emphasized-out: cubic-bezier(0.05, 0.7, 0.1, 1);
+}
\ No newline at end of file
diff --git a/src/assets/style/theme/index.scss b/src/assets/style/theme/index.scss
new file mode 100644
index 0000000000000000000000000000000000000000..cdba673c3dd5694e13e2a801fcae022968f2038c
--- /dev/null
+++ b/src/assets/style/theme/index.scss
@@ -0,0 +1 @@
+@use './pagination.scss' as *;
diff --git a/src/assets/style/theme/pagination.scss b/src/assets/style/theme/pagination.scss
new file mode 100644
index 0000000000000000000000000000000000000000..7f7fae83198164c58387d2207362dc707c612605
--- /dev/null
+++ b/src/assets/style/theme/pagination.scss
@@ -0,0 +1,9 @@
+.o-pagination {
+ --pagination-item-bg-color-hover: var(--o-color-primary2);
+ --pagination-item-bg-color-active: var(--o-color-control3);
+ --pagination-item-bg-color-current: var(--o-color-primary1);
+
+ --pagination-item-color-hover: var(--o-color-info1-inverse);
+ --pagination-item-color-active: var(--o-color-info1-inverse);
+ --pagination-item-color-current: var(--o-color-info1-inverse);
+}
diff --git a/src/assets/svg-icons/icon-add.svg b/src/assets/svg-icons/icon-add.svg
new file mode 100644
index 0000000000000000000000000000000000000000..11e3230a5b4954a76ee54046b1effe463f5209fc
--- /dev/null
+++ b/src/assets/svg-icons/icon-add.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-arrow-down.svg b/src/assets/svg-icons/icon-arrow-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..77e4467ddbad4a66869232eeb4b9dbec3211ccd9
--- /dev/null
+++ b/src/assets/svg-icons/icon-arrow-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-arrow-left.svg b/src/assets/svg-icons/icon-arrow-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d2ed73df5e27d2584fc5e73be185753fe40eb27b
--- /dev/null
+++ b/src/assets/svg-icons/icon-arrow-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-arrow-right.svg b/src/assets/svg-icons/icon-arrow-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8fb12e950642d316c03a2a5a9d8658b4c8de78cb
--- /dev/null
+++ b/src/assets/svg-icons/icon-arrow-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-arrow-up.svg b/src/assets/svg-icons/icon-arrow-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8cc6e1dfe60e4c190f65e2474e766c57fa8e76d2
--- /dev/null
+++ b/src/assets/svg-icons/icon-arrow-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-calendar.svg b/src/assets/svg-icons/icon-calendar.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c26edb02afcb32c8303681ac5cb824445488fa56
--- /dev/null
+++ b/src/assets/svg-icons/icon-calendar.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-caret-Up.svg b/src/assets/svg-icons/icon-caret-Up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..03121068a7a5dbe743502c6628009b7b400ca2f9
--- /dev/null
+++ b/src/assets/svg-icons/icon-caret-Up.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-caret-down.svg b/src/assets/svg-icons/icon-caret-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e31cc42dc4d177967a73e6c5b028d2b5692b3a6b
--- /dev/null
+++ b/src/assets/svg-icons/icon-caret-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-caret-left.svg b/src/assets/svg-icons/icon-caret-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f793b4d1c7fb58f1f9f72372cab3edce00912f8d
--- /dev/null
+++ b/src/assets/svg-icons/icon-caret-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-caret-right.svg b/src/assets/svg-icons/icon-caret-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1653ce5aa977a1549b3d1ae81ff279ec9559c7f7
--- /dev/null
+++ b/src/assets/svg-icons/icon-caret-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-checked.svg b/src/assets/svg-icons/icon-checked.svg
new file mode 100644
index 0000000000000000000000000000000000000000..3a16019a87937ec89cec62c1f5507240e1e4e03e
--- /dev/null
+++ b/src/assets/svg-icons/icon-checked.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-chevron-down.svg b/src/assets/svg-icons/icon-chevron-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e3d8377a6a4827bdd7d3b279191b14cc96b0d9cd
--- /dev/null
+++ b/src/assets/svg-icons/icon-chevron-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-chevron-left.svg b/src/assets/svg-icons/icon-chevron-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e16d62b12b00713d6587e6283c55af39d827e299
--- /dev/null
+++ b/src/assets/svg-icons/icon-chevron-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-chevron-right.svg b/src/assets/svg-icons/icon-chevron-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5802e8f3279da6293c9c6ab4d0b527fcaa347afa
--- /dev/null
+++ b/src/assets/svg-icons/icon-chevron-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-chevron-up.svg b/src/assets/svg-icons/icon-chevron-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cdd4b21dffcedf173fcf329fa472f6381a7187e6
--- /dev/null
+++ b/src/assets/svg-icons/icon-chevron-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-clear.svg b/src/assets/svg-icons/icon-clear.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cbc6911d20fdb4c150d8518b5f64a328cb716b5f
--- /dev/null
+++ b/src/assets/svg-icons/icon-clear.svg
@@ -0,0 +1,8 @@
+
diff --git a/src/assets/svg-icons/icon-close.svg b/src/assets/svg-icons/icon-close.svg
new file mode 100644
index 0000000000000000000000000000000000000000..2a02c9a61a54817db345e79a34661a38b967e82b
--- /dev/null
+++ b/src/assets/svg-icons/icon-close.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-code.svg b/src/assets/svg-icons/icon-code.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cbb58f91de7b08b7f4a9b29c04d415fff8dc0030
--- /dev/null
+++ b/src/assets/svg-icons/icon-code.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-copy.svg b/src/assets/svg-icons/icon-copy.svg
new file mode 100644
index 0000000000000000000000000000000000000000..14f01342f7286a6c2f1353ecefcf8c2edd8b01b1
--- /dev/null
+++ b/src/assets/svg-icons/icon-copy.svg
@@ -0,0 +1,9 @@
+
+
diff --git a/src/assets/svg-icons/icon-danger.svg b/src/assets/svg-icons/icon-danger.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7258e26f88b4d0afb9461f02cca994937a536dc7
--- /dev/null
+++ b/src/assets/svg-icons/icon-danger.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/svg-icons/icon-delete.svg b/src/assets/svg-icons/icon-delete.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8dddd52171cb1e3d876151f08fb7f72d8cb6f81c
--- /dev/null
+++ b/src/assets/svg-icons/icon-delete.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-done.svg b/src/assets/svg-icons/icon-done.svg
new file mode 100644
index 0000000000000000000000000000000000000000..55488eef12ae6b29c0cafe1ac0deb28cc90d055b
--- /dev/null
+++ b/src/assets/svg-icons/icon-done.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-double-arrow-down.svg b/src/assets/svg-icons/icon-double-arrow-down.svg
new file mode 100644
index 0000000000000000000000000000000000000000..056bb3b981380d1cd7d3ce0d2e931ae003a3d0b8
--- /dev/null
+++ b/src/assets/svg-icons/icon-double-arrow-down.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-double-arrow-left.svg b/src/assets/svg-icons/icon-double-arrow-left.svg
new file mode 100644
index 0000000000000000000000000000000000000000..98d6c16f5c1f1e49ca43c40f1fb05752e0df402a
--- /dev/null
+++ b/src/assets/svg-icons/icon-double-arrow-left.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-double-arrow-right.svg b/src/assets/svg-icons/icon-double-arrow-right.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c427fedfd2817bf6db643cd8b0da7cceb9d18a81
--- /dev/null
+++ b/src/assets/svg-icons/icon-double-arrow-right.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-double-arrow-up.svg b/src/assets/svg-icons/icon-double-arrow-up.svg
new file mode 100644
index 0000000000000000000000000000000000000000..13dad2c9c0d39b9a5379613766cd569920eefd1a
--- /dev/null
+++ b/src/assets/svg-icons/icon-double-arrow-up.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-download_to.svg b/src/assets/svg-icons/icon-download_to.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c1a6c8b940eedb93d997ac88fcb54b0400f9346b
--- /dev/null
+++ b/src/assets/svg-icons/icon-download_to.svg
@@ -0,0 +1,4 @@
+
+
diff --git a/src/assets/svg-icons/icon-edit.svg b/src/assets/svg-icons/icon-edit.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4b6cb62988b93d4c05d859b74d042de0e46a8fd8
--- /dev/null
+++ b/src/assets/svg-icons/icon-edit.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-ellipsis.svg b/src/assets/svg-icons/icon-ellipsis.svg
new file mode 100644
index 0000000000000000000000000000000000000000..00ddd7e34442d87afdf4a1c332e14cfdae2e80bf
--- /dev/null
+++ b/src/assets/svg-icons/icon-ellipsis.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-expand.svg b/src/assets/svg-icons/icon-expand.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ddf8a8157697024f6efcd84ba5641215311f2e6b
--- /dev/null
+++ b/src/assets/svg-icons/icon-expand.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-eye-off.svg b/src/assets/svg-icons/icon-eye-off.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7a3ca49cde21c6e0d12d8678281a55bf77f79960
--- /dev/null
+++ b/src/assets/svg-icons/icon-eye-off.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-eye.svg b/src/assets/svg-icons/icon-eye.svg
new file mode 100644
index 0000000000000000000000000000000000000000..10933c250bf4032dd5eef1063e96ada321d9d918
--- /dev/null
+++ b/src/assets/svg-icons/icon-eye.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-file.svg b/src/assets/svg-icons/icon-file.svg
new file mode 100644
index 0000000000000000000000000000000000000000..e7168e1437289faa686d194b51427e6db9e957a4
--- /dev/null
+++ b/src/assets/svg-icons/icon-file.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-filter.svg b/src/assets/svg-icons/icon-filter.svg
new file mode 100644
index 0000000000000000000000000000000000000000..27b16009ea6de539a195613761093f719635c5f6
--- /dev/null
+++ b/src/assets/svg-icons/icon-filter.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-forum.svg b/src/assets/svg-icons/icon-forum.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c3ae1a7e3eeaefab10be8acd1e4049ba87ccbeac
--- /dev/null
+++ b/src/assets/svg-icons/icon-forum.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-help.svg b/src/assets/svg-icons/icon-help.svg
new file mode 100644
index 0000000000000000000000000000000000000000..fccc6bba7d4298291a9c00b9f12e052d84a722be
--- /dev/null
+++ b/src/assets/svg-icons/icon-help.svg
@@ -0,0 +1,5 @@
+
\ No newline at end of file
diff --git a/src/assets/svg-icons/icon-image-error.svg b/src/assets/svg-icons/icon-image-error.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0db965fdf708f0a96bd11dd40aa15ce91c88d8c9
--- /dev/null
+++ b/src/assets/svg-icons/icon-image-error.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-info.svg b/src/assets/svg-icons/icon-info.svg
new file mode 100644
index 0000000000000000000000000000000000000000..afe31b82fa80df8bff21cf64ec07ec7bec2c830e
--- /dev/null
+++ b/src/assets/svg-icons/icon-info.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/svg-icons/icon-issue.svg b/src/assets/svg-icons/icon-issue.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5c992c752fad51464dad44b81546cace1896b6c7
--- /dev/null
+++ b/src/assets/svg-icons/icon-issue.svg
@@ -0,0 +1,7 @@
+
diff --git a/src/assets/svg-icons/icon-link.svg b/src/assets/svg-icons/icon-link.svg
new file mode 100644
index 0000000000000000000000000000000000000000..03440e9fc188de6a52c73020423b9e99ca5e5693
--- /dev/null
+++ b/src/assets/svg-icons/icon-link.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-loading.svg b/src/assets/svg-icons/icon-loading.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ed5cb04df3d6480916fd645a993a2561f1d51d39
--- /dev/null
+++ b/src/assets/svg-icons/icon-loading.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/svg-icons/icon-login.svg b/src/assets/svg-icons/icon-login.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4a61fba22a3e946c1d90ab75ac29906ef1f737e1
--- /dev/null
+++ b/src/assets/svg-icons/icon-login.svg
@@ -0,0 +1,9 @@
+
\ No newline at end of file
diff --git a/src/assets/svg-icons/icon-menu.svg b/src/assets/svg-icons/icon-menu.svg
new file mode 100644
index 0000000000000000000000000000000000000000..5222c8245838f13d3efc51abd14127676a47f9e4
--- /dev/null
+++ b/src/assets/svg-icons/icon-menu.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/svg-icons/icon-minus.svg b/src/assets/svg-icons/icon-minus.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ffc4953d00b63feec68c8d3306ce8fdf3c8bd69a
--- /dev/null
+++ b/src/assets/svg-icons/icon-minus.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-moon.svg b/src/assets/svg-icons/icon-moon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..659890ab8e6e536cd87645a63fb66d2d1ca82e99
--- /dev/null
+++ b/src/assets/svg-icons/icon-moon.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-nss.svg b/src/assets/svg-icons/icon-nss.svg
new file mode 100644
index 0000000000000000000000000000000000000000..83724a4f492ed15a64b38c47b6d7f0a837c8e38f
--- /dev/null
+++ b/src/assets/svg-icons/icon-nss.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-outlink.svg b/src/assets/svg-icons/icon-outlink.svg
new file mode 100644
index 0000000000000000000000000000000000000000..1aca2b42223c76de8e1f451b37476e1160a62e96
--- /dev/null
+++ b/src/assets/svg-icons/icon-outlink.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-pdf.svg b/src/assets/svg-icons/icon-pdf.svg
new file mode 100644
index 0000000000000000000000000000000000000000..4c49a89ac5aa4d5dae14c62de6dc9462b87a232a
--- /dev/null
+++ b/src/assets/svg-icons/icon-pdf.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/svg-icons/icon-play.svg b/src/assets/svg-icons/icon-play.svg
new file mode 100644
index 0000000000000000000000000000000000000000..f406e0035e7980b245e7c00df641b214af345f8f
--- /dev/null
+++ b/src/assets/svg-icons/icon-play.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-playing.svg b/src/assets/svg-icons/icon-playing.svg
new file mode 100644
index 0000000000000000000000000000000000000000..356423405f20abe396e49df1d91596141c5b35ed
--- /dev/null
+++ b/src/assets/svg-icons/icon-playing.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-pr.svg b/src/assets/svg-icons/icon-pr.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a9793c7573e3dbaf66571f17f22239607b358092
--- /dev/null
+++ b/src/assets/svg-icons/icon-pr.svg
@@ -0,0 +1,9 @@
+
diff --git a/src/assets/svg-icons/icon-refresh.svg b/src/assets/svg-icons/icon-refresh.svg
new file mode 100644
index 0000000000000000000000000000000000000000..cf7ce856208ee4c5dc695aaf20e8df9829863c9c
--- /dev/null
+++ b/src/assets/svg-icons/icon-refresh.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-search.svg b/src/assets/svg-icons/icon-search.svg
new file mode 100644
index 0000000000000000000000000000000000000000..0d83d56e7ac47b608c0e0d9bb5598a32694e5469
--- /dev/null
+++ b/src/assets/svg-icons/icon-search.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-service.svg b/src/assets/svg-icons/icon-service.svg
new file mode 100644
index 0000000000000000000000000000000000000000..870a0970c0eb4c5fbab23b76171f18dad26d2e2a
--- /dev/null
+++ b/src/assets/svg-icons/icon-service.svg
@@ -0,0 +1,6 @@
+
diff --git a/src/assets/svg-icons/icon-star.svg b/src/assets/svg-icons/icon-star.svg
new file mode 100644
index 0000000000000000000000000000000000000000..6f91115df988e8decc904b31a0ef1b30cb10aaf8
--- /dev/null
+++ b/src/assets/svg-icons/icon-star.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/svg-icons/icon-star1.svg b/src/assets/svg-icons/icon-star1.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a65f5db03189e3b0a5e59f1a5e42556b0cda0fb6
--- /dev/null
+++ b/src/assets/svg-icons/icon-star1.svg
@@ -0,0 +1,10 @@
+
diff --git a/src/assets/svg-icons/icon-success.svg b/src/assets/svg-icons/icon-success.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7030f87f5077d691a4b73ec1a4c0668cec434092
--- /dev/null
+++ b/src/assets/svg-icons/icon-success.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/svg-icons/icon-sun.svg b/src/assets/svg-icons/icon-sun.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d38960765b2f622069ef44b1710f320b341571b4
--- /dev/null
+++ b/src/assets/svg-icons/icon-sun.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-time-order.svg b/src/assets/svg-icons/icon-time-order.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c6922743e97911e0ae73f32bb77a7eab280589ef
--- /dev/null
+++ b/src/assets/svg-icons/icon-time-order.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-time.svg b/src/assets/svg-icons/icon-time.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aa704a967de6c537a20d0f3ce17a6bf68914588c
--- /dev/null
+++ b/src/assets/svg-icons/icon-time.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/assets/svg-icons/icon-top.svg b/src/assets/svg-icons/icon-top.svg
new file mode 100644
index 0000000000000000000000000000000000000000..ecf0a4ddc1112d822f1c1fbe6bbbda98d16defaa
--- /dev/null
+++ b/src/assets/svg-icons/icon-top.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/svg-icons/icon-user.svg b/src/assets/svg-icons/icon-user.svg
new file mode 100644
index 0000000000000000000000000000000000000000..c4c5508ae00a3940abba1452eca7ac3adc0dd4ae
--- /dev/null
+++ b/src/assets/svg-icons/icon-user.svg
@@ -0,0 +1,13 @@
+
+
diff --git a/src/assets/svg-icons/icon-video.svg b/src/assets/svg-icons/icon-video.svg
new file mode 100644
index 0000000000000000000000000000000000000000..9f96e34a282d061df6af4a38fea3f50acb829d47
--- /dev/null
+++ b/src/assets/svg-icons/icon-video.svg
@@ -0,0 +1,5 @@
+
diff --git a/src/assets/svg-icons/icon-warning.svg b/src/assets/svg-icons/icon-warning.svg
new file mode 100644
index 0000000000000000000000000000000000000000..440c26890972b1cddaac1c30ceb29fb8564ed66b
--- /dev/null
+++ b/src/assets/svg-icons/icon-warning.svg
@@ -0,0 +1,4 @@
+
diff --git a/src/assets/svg-icons/icon-x.svg b/src/assets/svg-icons/icon-x.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8d239946eb99708adc9078ec6bdc0e747239dc94
--- /dev/null
+++ b/src/assets/svg-icons/icon-x.svg
@@ -0,0 +1,3 @@
+
diff --git a/src/components/AppBanner.vue b/src/components/AppBanner.vue
new file mode 100644
index 0000000000000000000000000000000000000000..60aefc794b3f17ac15e5fe8597a2a36d5ce7b52a
--- /dev/null
+++ b/src/components/AppBanner.vue
@@ -0,0 +1,199 @@
+
+
+
+
+
![]()
+
+
+
+ {{ backgroundText }}
+
+
{{ title }}
+
+ {{ subtitle }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/AppFeedback.vue b/src/components/AppFeedback.vue
new file mode 100644
index 0000000000000000000000000000000000000000..08af033a6a1bac91889b1cbf31df8750bd6c996a
--- /dev/null
+++ b/src/components/AppFeedback.vue
@@ -0,0 +1,152 @@
+
+
+
+
+
+
+
+
+
+
+
+ 感谢您的反馈,我们会尽快改进!您也可
+ 联系维护者或
+
+
+
+ 联系openEuler小助手
+
+
+
![]()
+
+
+
+
+ 快速反馈
+ 提交issue
+
+
+
+
+
+
+
+
diff --git a/src/components/AppFooter.vue b/src/components/AppFooter.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d62a1537ba7cb4fb53bcc5d876fcda4550a93908
--- /dev/null
+++ b/src/components/AppFooter.vue
@@ -0,0 +1,532 @@
+
+
+
+
+
+
+
diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ba7b229464f7b0e8eb36e722c33dccc0f09da5b2
--- /dev/null
+++ b/src/components/AppHeader.vue
@@ -0,0 +1,169 @@
+
+
+
+
+
+
+
diff --git a/src/components/AppSection.vue b/src/components/AppSection.vue
new file mode 100644
index 0000000000000000000000000000000000000000..ad31fe84c3255ebaa5925ae6b2867e4d83d915d5
--- /dev/null
+++ b/src/components/AppSection.vue
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
diff --git a/src/components/ContentWrapper.vue b/src/components/ContentWrapper.vue
new file mode 100644
index 0000000000000000000000000000000000000000..192ea1c5f65ea2f3a8e6facd744cf52e408cbd1d
--- /dev/null
+++ b/src/components/ContentWrapper.vue
@@ -0,0 +1,68 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ExternalLink.vue b/src/components/ExternalLink.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9be0c078f1bd5ae024aa7febb103f0a79f67a16d
--- /dev/null
+++ b/src/components/ExternalLink.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+ 即将跳转到外部网站
+
+
+
您将要访问的链接不属于软件市场 ,请关注您的账号安全。
+
+
+
+
+ 取消
+ 继续前往
+
+
+
+
+
+
diff --git a/src/components/HeaderNav.vue b/src/components/HeaderNav.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3575aeb21d76a6012486e9eaba794233b82d2091
--- /dev/null
+++ b/src/components/HeaderNav.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
diff --git a/src/components/OCardItem.vue b/src/components/OCardItem.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9783b6c4ef34e6794b1d0f9571181a7440de7de1
--- /dev/null
+++ b/src/components/OCardItem.vue
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
+ {{ tag }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/OCodeCopy.vue b/src/components/OCodeCopy.vue
new file mode 100644
index 0000000000000000000000000000000000000000..686a5fddc1c9ff0f54b73ab5470ad934bf62e175
--- /dev/null
+++ b/src/components/OCodeCopy.vue
@@ -0,0 +1,60 @@
+
+
+
+
+
+
+
diff --git a/src/components/OTableItemNew.vue b/src/components/OTableItemNew.vue
new file mode 100644
index 0000000000000000000000000000000000000000..53eb1ca593a2e7e271bb5049d609929bb264b1be
--- /dev/null
+++ b/src/components/OTableItemNew.vue
@@ -0,0 +1,198 @@
+
+
+
+
+
+
+
+
+
+ {{ formatDateTime(row.epkgUpdateAt) }}
+
+
+ {{ formatDateTime(row.rpmUpdateAt) }}
+
+
+
+
+ {{ column.label }}
+
+
+
+ {{ row.rpmSize }}
+
+
+
+
+ {{ column.label }}
+
+
+
+ {{ row.epkgSize }}
+
+
+
+
+
+
+
+
+
+ 下载
+
+
+
+ 源码仓
+
+
+ 下载
+
+
+
+
+
+
+
+ 安装下载容器镜像
+
+
+
+
+
+
+
+
+
diff --git a/src/components/ResultNotFound.vue b/src/components/ResultNotFound.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e52404800bb9ad4ddc08ac3e0b108ffa43689d0a
--- /dev/null
+++ b/src/components/ResultNotFound.vue
@@ -0,0 +1,82 @@
+
+
+
+
+
+
+
+
+
+
+ 我们已收到无相关应用的反馈,
查看进展
+
+
+ 名称:{{ searchVal }}
+ 状态:上线中
+
+
+
+
+
+
+
diff --git a/src/components/filter/FilterCheckbox.vue b/src/components/filter/FilterCheckbox.vue
new file mode 100644
index 0000000000000000000000000000000000000000..884a017252369698dd973bb4a209711a0b1b8418
--- /dev/null
+++ b/src/components/filter/FilterCheckbox.vue
@@ -0,0 +1,104 @@
+
+
+
+
+
+
onChange">
+
+
+ {{ option }}
+
+
+
+
+
+ {{ isAll ? '收起' : '显示全部' }}
+
+
+
+
+
+
+
+
+
diff --git a/src/components/filter/FilterHeader.vue b/src/components/filter/FilterHeader.vue
new file mode 100644
index 0000000000000000000000000000000000000000..d4ee24b602c9348d32b62ded182a4926760039d0
--- /dev/null
+++ b/src/components/filter/FilterHeader.vue
@@ -0,0 +1,134 @@
+
+
+
+
+
+
+
diff --git a/src/components/search/SearchFilter.vue b/src/components/search/SearchFilter.vue
new file mode 100644
index 0000000000000000000000000000000000000000..dbacae0b40c66e219fe9b97f68baa9e4aabc9d7d
--- /dev/null
+++ b/src/components/search/SearchFilter.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
changeFilter(v)"
+ >
+
+
+
+ changeSearchInput(v)"
+ @input="trottleSearch"
+ @clear="clearInput"
+ @focus="changeFocusState(true)"
+ >
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/search/SearchRecommend.vue b/src/components/search/SearchRecommend.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2743a0ca5cf8953e167e1eb80312af1c3e1e295f
--- /dev/null
+++ b/src/components/search/SearchRecommend.vue
@@ -0,0 +1,251 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/components/search/SearchTab.vue b/src/components/search/SearchTab.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3e77abcac4d5616a98f41ebdb240641b8d1dac80
--- /dev/null
+++ b/src/components/search/SearchTab.vue
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/composables/useClickOutside.ts b/src/composables/useClickOutside.ts
new file mode 100644
index 0000000000000000000000000000000000000000..741df56d99471a7ded752c67fffa76d589937a4a
--- /dev/null
+++ b/src/composables/useClickOutside.ts
@@ -0,0 +1,21 @@
+import { ref, onMounted, onUnmounted } from 'vue';
+import type { Ref } from 'vue';
+const useClickOutside = (elementRef: Ref) => {
+ const isClickOutside = ref(false);
+ const onClick = (e: MouseEvent) => {
+ if (elementRef.value) {
+ isClickOutside.value = !elementRef.value.contains(
+ e.target as HTMLElement
+ );
+ }
+ };
+ onMounted(() => {
+ window.addEventListener('click', onClick);
+ });
+ onUnmounted(() => {
+ window.removeEventListener('click', onClick);
+ });
+ return isClickOutside;
+};
+
+export default useClickOutside;
diff --git a/src/composables/useClipboard.ts b/src/composables/useClipboard.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8d05472ebde3a0d1cfa34bd90fd22f9d535ce68b
--- /dev/null
+++ b/src/composables/useClipboard.ts
@@ -0,0 +1,19 @@
+import Clipboard from 'clipboard';
+interface ClipboardJSExtended extends ClipboardJS {
+ onClick: (event: MouseEvent) => void;
+}
+
+export const useClipboard = (options: { text: string; target: MouseEvent; success?: Function; error?: Function }) => {
+ const clipboard = new Clipboard(options.target.currentTarget as Element, {
+ text: () => options.text,
+ }) as ClipboardJSExtended;
+ clipboard.on('success', (e) => {
+ options?.success && options?.success(e);
+ clipboard.destroy();
+ });
+ clipboard.on('error', (e) => {
+ options?.error && options?.error(e);
+ clipboard.destroy();
+ });
+ clipboard.onClick(options.target);
+};
diff --git a/src/composables/useLocale.ts b/src/composables/useLocale.ts
new file mode 100644
index 0000000000000000000000000000000000000000..28317506d9e44cf7956c142744319dd0e388632c
--- /dev/null
+++ b/src/composables/useLocale.ts
@@ -0,0 +1,48 @@
+import { computed, watch } from 'vue';
+import { useI18n } from 'vue-i18n';
+import { isClient, isUndefined } from '@opensig/opendesign';
+import { type LocaleT } from '@/@types/locale';
+
+
+export const useLocale = () => {
+ const { t, locale } = useI18n();
+
+ const isZh = computed(() => locale.value === 'zh');
+ const isEn = computed(() => locale.value === 'en');
+
+ watch(
+ () => isZh.value,
+ () => {
+ if (isZh.value) {
+ document.documentElement.lang = 'zh';
+ } else {
+ document.documentElement.lang = 'en';
+ }
+ },
+ {
+ immediate: true,
+ }
+ );
+
+ // 语言切换
+ const changeLocale = (lang?: LocaleT) => {
+ if (locale.value === lang) {
+ return;
+ }
+
+ const language = isUndefined(lang) ? (isZh.value ? 'en' : 'zh') : lang;
+
+ if (isClient) {
+ localStorage.setItem('locale', language);
+ location.reload();
+ }
+ };
+
+ return {
+ t,
+ locale,
+ isZh,
+ isEn,
+ changeLocale,
+ };
+};
diff --git a/src/composables/useMarkdown.ts b/src/composables/useMarkdown.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b5522523d427677150352193f3ce62d30fa75b72
--- /dev/null
+++ b/src/composables/useMarkdown.ts
@@ -0,0 +1,49 @@
+import Markdown from 'markdown-it';
+
+import { addCopyBtn } from '@/utils/markdown';
+
+export const useMarkdown = () => {
+ // isCopy: 复制功能
+ const mkit = (
+ data: string,
+ options: {
+ isCopy?: boolean;
+ Tag: string;
+ } = { isCopy: false, Tag: '' }
+ ) => {
+ const md: Markdown = new Markdown({
+ html: true,
+ linkify: false,
+ highlight: function (str: string) {
+ const escapeHtmlStr = md.utils.escapeHtml(str);
+ const lines = escapeHtmlStr.split(/\n/);
+ if (options.isCopy) {
+ let copyText = lines[0];
+ for (let i = 1, len = lines.length; i < len; i++) {
+ copyText += `
${lines[i]}`;
+ }
+ return (
+ `` +
+ `${escapeHtmlStr.replace('{Tag}',options.Tag)}` +
+ `` +
+ `` +
+ `
` +
+ `
`
+ );
+ } else {
+ return '';
+ }
+ },
+ });
+
+ if (options.isCopy) {
+ addCopyBtn();
+ }
+
+ return md.render(data);
+ };
+
+ return {
+ mkit,
+ };
+};
diff --git a/src/composables/useScreen.ts b/src/composables/useScreen.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0e4beaff98d1ac85aee7473446c2ea918bd62425
--- /dev/null
+++ b/src/composables/useScreen.ts
@@ -0,0 +1,131 @@
+import { reactive, ref, onMounted, computed, onUnmounted, nextTick } from 'vue';
+
+export enum Size {
+ Phone = 'phone',
+ PadV = 'pad_v',
+ PadH = 'pad_h',
+ Laptop = 'laptop',
+}
+
+export type ScreenSizeT = typeof Size.Phone | Size.PadV | Size.PadH | Size.Laptop;
+
+export const ScreenConfig = {
+ [Size.Phone]: 600,
+ [Size.PadV]: 840,
+ [Size.PadH]: 1200,
+ [Size.Laptop]: 1440,
+};
+
+export type CompareT = 'lt' | 'le' | 'eq' | 'ne' | 'ge' | 'gt';
+
+const CompareHandler = {
+ lt: (a: number, b: number) => a < b,
+ le: (a: number, b: number) => a <= b,
+ eq: (a: number, b: number) => a === b,
+ ne: (a: number, b: number) => a !== b,
+ ge: (a: number, b: number) => a >= b,
+ gt: (a: number, b: number) => a > b,
+};
+
+export const useScreen = () => {
+ const screenSize = reactive({
+ width: 1440,
+ height: 0,
+ });
+
+ const current = ref(Size.Laptop);
+
+ const getSize = (width?: number) => {
+ if (typeof width === 'undefined') {
+ width = screenSize.width;
+ }
+ if (width < ScreenConfig[Size.Phone]) {
+ return Size.Phone;
+ } else if (width < ScreenConfig[Size.PadV]) {
+ return Size.PadV;
+ } else if (width < ScreenConfig[Size.PadH]) {
+ return Size.PadH;
+ } else {
+ return Size.Laptop;
+ }
+ };
+
+ const compare = (type: CompareT = 'eq', size: ScreenSizeT) => {
+ const w1 = screenSize.width;
+ const w2 = ScreenConfig[size];
+ const handler = CompareHandler[type];
+ return handler(w1, w2);
+ };
+
+
+ const isPhone = computed(() => compare('le', Size.Phone));
+ const gtPhone = computed(() => compare('gt', Size.Phone));
+
+
+ const isPad = computed(() => compare('gt', Size.Phone) && compare('le', Size.PadH));
+ const lePad = computed(() => compare('le', Size.PadH));
+ const gtPad = computed(() => compare('gt', Size.PadH));
+
+
+ const isPadV = computed(() => compare('gt', Size.Phone) && compare('le', Size.PadV));
+ const lePadV = computed(() => compare('le', Size.PadV));
+ const gtPadV = computed(() => compare('gt', Size.PadV));
+
+
+ const isPadH = computed(() => compare('gt', Size.PadV) && compare('le', Size.PadH));
+
+
+ const isLaptop = computed(() => compare('gt', Size.PadH) && compare('le', Size.Laptop));
+ const leLaptop = computed(() => compare('le', Size.Laptop));
+ const gtLaptop = computed(() => compare('gt', Size.Laptop));
+ const isPadToLaptop = computed(() => compare('gt', Size.Phone) && compare('le', Size.Laptop));
+ const isPadVToLaptop = computed(() => compare('gt', Size.PadV) && compare('le', Size.Laptop));
+
+ const onWindowResize = () => {
+ const { innerWidth, innerHeight, outerWidth } = window;
+ screenSize.width = outerWidth < innerWidth ? outerWidth : innerWidth;
+ screenSize.height = innerHeight;
+ current.value = getSize();
+ };
+
+ onMounted(() => {
+ if (typeof window !== 'undefined') {
+ window.addEventListener('resize', onWindowResize);
+ onWindowResize();
+ nextTick(() => onWindowResize());
+ }
+ });
+
+ onUnmounted(() => {
+ if (typeof window !== 'undefined') {
+ window.removeEventListener('resize', onWindowResize);
+ }
+ });
+
+ return {
+
+ getSize,
+ current,
+
+ size: screenSize,
+
+ isPhone,
+ gtPhone,
+
+ isPad,
+ lePad,
+ gtPad,
+
+ isPadV,
+ lePadV,
+ gtPadV,
+
+ isPadH,
+
+ isLaptop,
+ leLaptop,
+ gtLaptop,
+ isPadToLaptop,
+ isPadVToLaptop,
+ };
+};
diff --git a/src/data/config.ts b/src/data/config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0ec4621296c2fceb92b06acf2adfec005a081f77
--- /dev/null
+++ b/src/data/config.ts
@@ -0,0 +1,16 @@
+export const OSCHINA = 'https://my.oschina.net';
+export const CSDN_BLOG = 'https://blog.csdn.net';
+export const JUEJIN = 'https://juejin.cn';
+export const BILIBILI_SPACE = 'https://space.bilibili.com';
+export const INFOQ = 'https://www.infoq.cn';
+export const CTO51 = 'https://blog.51cto.com';
+export const REDDIT = 'https://www.reddit.com';
+export const LINKEDIN = 'https://www.linkedin.com';
+export const TWITTER = 'https://twitter.com';
+export const YOUTUBE = 'https://www.youtube.com';
+export const OPENEULER = 'https://www.openeuler.org';
+export const OPENATOM = 'https://openatom.cn';
+export const OPENEULER_CONTACT = 'contact@openeuler.io';
+export const GITEE = 'https://gitee.com';
+export const HIASCEND = 'https://www.hiascend.com';
+export const OPENEULER_STATUS = 'https://status.openeuler.org';
diff --git a/src/data/filter/index.ts b/src/data/filter/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..612dd37b953dbe674d9d906b98080540f30d0062
--- /dev/null
+++ b/src/data/filter/index.ts
@@ -0,0 +1,29 @@
+export default [
+ {
+ id: 'os',
+ name: 'openEuler版本选择',
+ children: [
+ 'openEuler-20.03-LTS-SP1',
+ 'openEuler-20.03-LTS-SP2',
+ 'openEuler-20.03-LTS-SP3',
+ 'openEuler-20.03-LTS-SP4',
+ 'openEuler-20.03-LTS',
+ 'openEuler-20.09',
+ 'openEuler-21.03',
+ 'openEuler-21.09',
+ 'openEuler-22.03-LTS-SP1',
+ 'openEuler-22.03-LTS-SP2',
+ 'openEuler-22.03-LTS-SP3',
+ 'openEuler-22.03-LTS',
+ 'openEuler-22.09',
+ 'openEuler-23.03',
+ 'openEuler-23.09',
+ 'openEuler-preview',
+ ],
+ },
+ {
+ id: 'arch',
+ name: '架构',
+ children: ['aarch64', 'noarch', 'x86_64', 'src', 'loongarch64', 'riscv64', 'sw_64'],
+ },
+];
diff --git a/src/data/home/index.ts b/src/data/home/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..043660a6cb6b2ffb2413814c6c72628ed7a8d90d
--- /dev/null
+++ b/src/data/home/index.ts
@@ -0,0 +1,108 @@
+
+import { HIASCEND, OPENEULER } from '@/data/config';
+
+import ApppkgIcon from '~icons/pkg/apppkg.svg';
+import EpkgIcon from '~icons/pkg/epkg.svg';
+import ImageIcon from '~icons/pkg/image.svg';
+import RpmIcon from '~icons/pkg/rpm.svg';
+
+
+export const resourceData = [
+ {
+ name: '领域应用',
+ desc: '领域应用简介',
+ icon: ApppkgIcon,
+ href: "/applicationsPackage"
+ },
+ {
+ name: 'RPM',
+ desc: 'RPM简介',
+ icon: RpmIcon,
+ href: "/package"
+ },
+ {
+ name: '容器镜像',
+ desc: 'image简介',
+ icon: ImageIcon,
+ href: "/image"
+ },
+ {
+ name: 'EPKG',
+ desc: 'epkg简介',
+ icon: EpkgIcon,
+ href: "/epkg"
+ },
+]
+
+// 首页 解决方案
+export const solutionData = [
+ {
+ title: '人工智能计算中心',
+ desc: '以人工智能计算机集群为基础,涵盖基建、硬件和软件基础设施的完整系统,提供从底层芯片算力释放到顶层应用使能的人工智能全栈能力',
+ tags: [],
+ img: HIASCEND + '/_static3/img_fangan_1.DQt7q5qZ.jpg',
+ },
+ {
+ title: '城市智能中枢',
+ desc: '面向数字政府,致力于加速数字政府的智能化升级,向政府各委办局提供标准的接口,发布 AI 服务,让城市整体运转更聪明、更智慧',
+ tags: [],
+ img: HIASCEND + '/_static3/img_fangan_2.TG5Z_fjz.jpg',
+ },
+ {
+ title: '昇腾智巡',
+ desc: '昇腾 AI 软硬件为基础,面向能源行业的智慧巡检解决方案,用 AI 分析取代传统的人工巡检,让巡检更安全,效率和准确率更高',
+ tags: [],
+ img: HIASCEND + '/_static3/img_fangan_3.BRoLNPXS.jpg',
+ },
+];
+
+
+// 首页新闻
+export const homeNewsData = [
+ {
+ date: '2024-02-28',
+ summary: '近日,在 RISC-V 架构上完成了对 UniProton进行的初步适配工作,目前项目已经可以在 QEMU 上启动运行 Demo 程序。',
+ archives: '2024-02',
+ articleName: '20240306-riscv.md',
+ author: ['openEuler'],
+ banner: 'img/banners/20240306-risc.png',
+ type: 'news',
+ title: '新突破!openEuler UniProton 实时操作系统成功适配 RISC-V 架构',
+ tags: ['兼容性更新'],
+ path: 'zh/news/openEuler/20240306-riscv/20240306-riscv',
+ lang: 'zh',
+ category: 'news',
+ url: OPENEULER + '/zh/news/openEuler/20240306-riscv/20240306-riscv.html',
+ },
+ {
+ date: '2023-11-19',
+ summary: '2023年11月17日,OpenCV社区正式接纳openEuler作为持续集成系统的操作系统之一。',
+ archives: '2023-11',
+ articleName: '20231120-cv.md',
+ author: ['openEuler'],
+ banner: 'img/banners/1120-cv.jpg',
+ type: 'news',
+ title: 'OpenCV原生支持openEuler',
+ tags: ['软件拓展'],
+ path: 'zh/news/20231120-cv/20231120-cv',
+ lang: 'zh',
+ category: 'news',
+ url: OPENEULER + '/zh/news/20231120-cv/20231120-cv.html',
+ },
+ {
+ date: '2023-07-13',
+ summary:
+ '近日,RISC-V SIG 发布了 Eulaceura 版本23H1,这是发行版的一次重大更新,新版本搭建了 linux kernel 6.1版本内核,适用于矽速科技 LicheePi 4A 的映像也已公布。',
+ archives: '2023-07',
+ articleName: '20230713-Eulaceura.md',
+ author: ['openEuler'],
+ banner: 'img/banners/20230714-riscv.jpeg',
+ type: 'news',
+ title: 'Eulaceura 版本 23H1:RISC-V 架构新的里程碑',
+ tags: ['版本升级'],
+ path: 'zh/news/20230713-Eulaceura/20230713-Eulaceura',
+ lang: 'zh',
+ category: 'news',
+ url: OPENEULER + '/zh/news/20230713-Eulaceura/20230713-Eulaceura.html',
+ },
+];
diff --git a/src/data/nav.ts b/src/data/nav.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9c3c511fc639c064b339a138bf00a19c3595a97d
--- /dev/null
+++ b/src/data/nav.ts
@@ -0,0 +1,33 @@
+export const navs = [
+ {
+ id: 'home',
+ label: '主页',
+ href: '/',
+ },
+ {
+ id: 'applicationsPackage',
+ label: '领域应用',
+ href: '/applicationsPackage',
+ },
+ {
+ id: 'rpm',
+ label: 'RPM',
+ href: '/package',
+ },
+ {
+ id: 'apppkg',
+ label: '容器镜像',
+ href: '/image',
+ },
+ {
+ id: 'epkg',
+ label: 'EPKG',
+ href: '/epkg',
+ },
+
+ {
+ id: 'upstream',
+ label: '上游兼容应用全景',
+ href: '/upstream',
+ },
+];
diff --git a/src/data/news/index.ts b/src/data/news/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f091a5bf7ae46fd27ef82c75ea20bf28555a6a24
--- /dev/null
+++ b/src/data/news/index.ts
@@ -0,0 +1,50 @@
+import { OPENEULER } from '@/data/config';
+
+export default [
+ {
+ date: '2024-02-28',
+ summary: '近日,在 RISC-V 架构上完成了对 UniProton进行的初步适配工作,目前项目已经可以在 QEMU 上启动运行 Demo 程序。',
+ archives: '2024-02',
+ articleName: '20240306-riscv.md',
+ author: ['openEuler'],
+ banner: 'img/banners/20240306-risc.png',
+ type: 'news',
+ title: '新突破!openEuler UniProton 实时操作系统成功适配 RISC-V 架构',
+ tags: ['兼容性更新'],
+ path: 'zh/news/openEuler/20240306-riscv/20240306-riscv',
+ lang: 'zh',
+ category: 'news',
+ url: OPENEULER + '/zh/news/openEuler/20240306-riscv/20240306-riscv.html',
+ },
+ {
+ date: '2023-11-19',
+ summary: '2023年11月17日,OpenCV社区正式接纳openEuler作为持续集成系统的操作系统之一。',
+ archives: '2023-11',
+ articleName: '20231120-cv.md',
+ author: ['openEuler'],
+ banner: 'img/banners/1120-cv.jpg',
+ type: 'news',
+ title: 'OpenCV原生支持openEuler',
+ tags: ['软件拓展'],
+ path: 'zh/news/20231120-cv/20231120-cv',
+ lang: 'zh',
+ category: 'news',
+ url: OPENEULER + '/zh/news/20231120-cv/20231120-cv.html',
+ },
+ {
+ date: '2023-07-13',
+ summary:
+ '近日,RISC-V SIG 发布了 Eulaceura 版本23H1,这是发行版的一次重大更新,新版本搭建了 linux kernel 6.1版本内核,适用于矽速科技 LicheePi 4A 的映像也已公布。',
+ archives: '2023-07',
+ articleName: '20230713-Eulaceura.md',
+ author: ['openEuler'],
+ banner: 'img/banners/20230714-riscv.jpeg',
+ type: 'news',
+ title: 'Eulaceura 版本 23H1:RISC-V 架构新的里程碑',
+ tags: ['版本升级'],
+ path: 'zh/news/20230713-Eulaceura/20230713-Eulaceura',
+ lang: 'zh',
+ category: 'news',
+ url: OPENEULER + '/zh/news/20230713-Eulaceura/20230713-Eulaceura.html',
+ },
+];
diff --git a/src/directives/copy-code.ts b/src/directives/copy-code.ts
new file mode 100644
index 0000000000000000000000000000000000000000..eb4da0b33ca787aa88131d80327cb56e0e245031
--- /dev/null
+++ b/src/directives/copy-code.ts
@@ -0,0 +1,19 @@
+import { useMessage } from '@opensig/opendesign';
+
+const message = useMessage();
+
+export default {
+ mounted(el: HTMLElement, binding: { value: boolean }) {
+ if (binding.value) {
+ el.addEventListener('click', function (event: MouseEvent) {
+ const target = event?.target as HTMLElement;
+ if (target?.className.includes('copy')) {
+ message.success({
+ content: '复制成功',
+ duration: 1000,
+ });
+ }
+ });
+ }
+ },
+};
diff --git a/src/directives/index.ts b/src/directives/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..9928f1239c98c6652376b0da524aef4517a1df19
--- /dev/null
+++ b/src/directives/index.ts
@@ -0,0 +1,8 @@
+import type { Directive } from 'vue';
+import vCopyCode from './copy-code';
+
+const directives: { [key: string]: Directive } = {
+ copyCode: vCopyCode,
+};
+
+export default directives;
diff --git a/src/i18n/common/common-en.ts b/src/i18n/common/common-en.ts
new file mode 100644
index 0000000000000000000000000000000000000000..1fe76a8505f83302cc5ae319d9bf08e77691b6f1
--- /dev/null
+++ b/src/i18n/common/common-en.ts
@@ -0,0 +1,56 @@
+import { OPENEULER_STATUS, OPENEULER_CONTACT } from '@/data/config';
+
+export default {
+ USER_CENTER: 'User Center',
+ LOGOUT: 'Logout',
+ lang: 'English',
+ FOOTER: {
+ ATOM_TEXT: 'openEuler is an open source project incubated and operated by the OpenAtom Foundation.',
+ ATOM_PC: '/atom-pc.png',
+ ATOM_MO: '/atom-mo.png',
+ MAIL: OPENEULER_CONTACT,
+ COPY_RIGHT: 'Copyright © 2024 openEuler. All rights reserved.',
+ LICENSED_1: 'Licensed under',
+ LICENSED_2: 'the MulanPSL2',
+ RIGHT_LIST: [
+ {
+ NAME: 'Trademark',
+ URL: '/other/brand/',
+ },
+ {
+ NAME: 'Privacy Policy',
+ URL: '/other/privacy/',
+ },
+ {
+ NAME: 'Legal Notice',
+ URL: '/other/legal/',
+ },
+ {
+ NAME: 'Service Status',
+ URL: OPENEULER_STATUS,
+ },
+ ],
+ QR_CODE: 'WeChat Subscription',
+ QR_ASSISTANT: 'WeChat Assistant',
+ },
+ BUILDING: {
+ BUILDING: 'Building',
+ BUILDINGMES: 'Coming soon…',
+ },
+ SEARCH: {
+ BROWSEHISTORY: 'History',
+ CLEAN: 'Clean up',
+ TOPSEARCH: 'Top search',
+ CHANGE: 'Change',
+ PLEACHOLDER: 'Please enter the content',
+ },
+ PREV: 'pre',
+ NEXT: 'next',
+
+ all: '领域应用',
+ rpmpkg: '软件包',
+ apppkg: '容器镜像',
+ epkgpkg: 'EPKG',
+ upstream: '上游兼容应用全景',
+ filterAll: 'All',
+};
diff --git a/src/i18n/common/common-zh.ts b/src/i18n/common/common-zh.ts
new file mode 100644
index 0000000000000000000000000000000000000000..32395ec0753305329a5100727cf9202f7bbd31de
--- /dev/null
+++ b/src/i18n/common/common-zh.ts
@@ -0,0 +1,57 @@
+import { OPENEULER, OPENEULER_STATUS, OPENEULER_CONTACT } from '@/data/config';
+
+export default {
+ USER_CENTER: '个人中心',
+ LOGOUT: '退出登录',
+ lang: '中文',
+ FOOTER: {
+ ATOM_TEXT: 'openEuler 是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目',
+ ATOM_PC: '/atom-pc.png',
+ ATOM_MO: '/atom-mo.png',
+ MAIL: OPENEULER_CONTACT,
+ COPY_RIGHT: '版权所有 © 2024 openEuler 保留一切权利',
+ LICENSED_1: '遵循',
+ LICENSED_2: '木兰宽松许可证第2版(MulanPSL2)',
+ RIGHT_LIST: [
+ {
+ NAME: '品牌',
+ URL: OPENEULER + '/zh/other/brand/',
+ },
+ {
+ NAME: '隐私政策',
+ URL: OPENEULER + '/zh/other/privacy/',
+ },
+ {
+ NAME: '法律声明',
+ URL: OPENEULER + '/zh/other/legal/',
+ },
+ {
+ NAME: '服务状态',
+ URL: OPENEULER_STATUS,
+ },
+ ],
+ LINKS: [],
+ QR_CODE: 'openEuler公众号',
+ QR_ASSISTANT: 'openEuler小助手',
+ },
+ BUILDING: {
+ BUILDING: '建设中',
+ BUILDINGMES: '敬请期待...',
+ },
+ SEARCH: {
+ BROWSEHISTORY: '历史记录',
+ CLEAN: '清除',
+ TOPSEARCH: '热门搜索',
+ CHANGE: '换一批',
+ PLEACHOLDER: '请输入内容',
+ },
+ PREV: '上一页',
+ NEXT: '下一页',
+
+ all: '领域应用',
+ rpmpkg: '软件包',
+ apppkg: '容器镜像',
+ epkgpkg: 'EPKG',
+ upstream: '上游兼容应用全景',
+ filterAll: '全部',
+};
diff --git a/src/i18n/common/index.ts b/src/i18n/common/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..5e71d72c1d9ad7ef20febc50832f46fe39e82f91
--- /dev/null
+++ b/src/i18n/common/index.ts
@@ -0,0 +1,7 @@
+import zh from './common-zh';
+import en from './common-en';
+
+export default {
+ zh,
+ en,
+};
diff --git a/src/i18n/index.ts b/src/i18n/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..8f5f15ffc926131f8d2432a62ea19ffee4f12dc4
--- /dev/null
+++ b/src/i18n/index.ts
@@ -0,0 +1,32 @@
+import { createI18n } from 'vue-i18n';
+
+import common from './common';
+import software from './software';
+import upstream from './upstream';
+
+import { getCurrentLocale } from '@/utils/locale';
+
+const messages = {
+ zh: {
+ common: common.zh,
+ software: software.zh,
+ upstream: upstream.zh,
+ },
+ en: {
+ common: common.en,
+ software: software.en,
+ upstream: upstream.en,
+ },
+};
+
+const locale = getCurrentLocale();
+
+const i18n = createI18n({
+ globalInjection: true,
+ locale,
+ legacy: false,
+ fallbackLocale: 'zh',
+ messages,
+});
+
+export default i18n;
diff --git a/src/i18n/software/index.ts b/src/i18n/software/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..0e2250d55b686b6bc497695dc54845c3618a54ee
--- /dev/null
+++ b/src/i18n/software/index.ts
@@ -0,0 +1,7 @@
+import zh from './software-zh';
+import en from './software-en';
+
+export default {
+ zh,
+ en,
+};
diff --git a/src/i18n/software/software-en.ts b/src/i18n/software/software-en.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b0797f384b34561519dd82bc6366226db78b9d94
--- /dev/null
+++ b/src/i18n/software/software-en.ts
@@ -0,0 +1,11 @@
+export default {
+ name: '软件包名称',
+ version: '版本号',
+ systemVersion: '系统版本',
+ architecture: '架构',
+ domain: ';领域',
+ time: '更新时间',
+ repository: '源码仓',
+ size: '软件包大小',
+ download: '下载',
+};
diff --git a/src/i18n/software/software-zh.ts b/src/i18n/software/software-zh.ts
new file mode 100644
index 0000000000000000000000000000000000000000..67eacf9ccec2720bd552948b666a5cdd89e0db81
--- /dev/null
+++ b/src/i18n/software/software-zh.ts
@@ -0,0 +1,11 @@
+export default {
+ name: '软件包名称',
+ version: '版本号',
+ systemVersion: '系统版本',
+ architecture: '架构',
+ domain: '领域',
+ time: '更新时间',
+ repository: '源码仓',
+ size: '软件包大小',
+ download: '下载',
+};
diff --git a/src/i18n/upstream/index.ts b/src/i18n/upstream/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..f6b8d94bae624f8e27a9469c74370aba91024303
--- /dev/null
+++ b/src/i18n/upstream/index.ts
@@ -0,0 +1,7 @@
+import zh from './upstream-zh';
+import en from './upstream-en';
+
+export default {
+ zh,
+ en,
+};
diff --git a/src/i18n/upstream/upstream-en.ts b/src/i18n/upstream/upstream-en.ts
new file mode 100644
index 0000000000000000000000000000000000000000..748bb367d7232ea274a8e3471dde7da0d6027480
--- /dev/null
+++ b/src/i18n/upstream/upstream-en.ts
@@ -0,0 +1,6 @@
+export default {
+ name: '应用名称',
+ version: '上游最新版本',
+ systemVersion: '兼容版本',
+ architecture: '状态',
+};
diff --git a/src/i18n/upstream/upstream-zh.ts b/src/i18n/upstream/upstream-zh.ts
new file mode 100644
index 0000000000000000000000000000000000000000..091e4ca5a0db005e4453511afebdda989c8061d9
--- /dev/null
+++ b/src/i18n/upstream/upstream-zh.ts
@@ -0,0 +1,7 @@
+export default {
+ title: '上游兼容应用全景',
+ name: '应用名称',
+ version: '上游最新版本',
+ compatibility: '兼容版本',
+ state: '状态',
+};
diff --git a/src/main.ts b/src/main.ts
new file mode 100644
index 0000000000000000000000000000000000000000..817acfe4e4fc673b6cd309af7e01d8d187f240f4
--- /dev/null
+++ b/src/main.ts
@@ -0,0 +1,36 @@
+import { createApp } from 'vue';
+import { createPinia } from 'pinia';
+import directives from './directives';
+import VueDOMPurifyHTML from 'vue-dompurify-html';
+
+import '@/shared/styles/index.scss';
+import '@opensig/opendesign/es/index.scss';
+import '@/assets/style/theme/default-light.token.css';
+import '@/assets/style/theme/dark.token.css';
+import '@/assets/style/theme/index.scss';
+
+import { initRound } from '@opensig/opendesign';
+
+import App from './App.vue';
+import router from './router';
+import i18n from './i18n';
+
+initRound('pill');
+
+const app = createApp(App);
+
+// 国际化
+app.use(i18n);
+// 状态存储
+app.use(createPinia());
+// 路由
+app.use(router);
+
+app.use(VueDOMPurifyHTML);
+
+// 指令
+Object.keys(directives).forEach((directive) => {
+ app.directive(directive, directives[directive]);
+});
+
+app.mount('#app');
diff --git a/src/router/index.ts b/src/router/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..085cb65096f845cb549c24510e2992f34b0ed252
--- /dev/null
+++ b/src/router/index.ts
@@ -0,0 +1,81 @@
+import { createRouter, createWebHistory } from 'vue-router';
+
+import { scrollToTop } from '@/utils/common';
+
+const routes = [
+ {
+ path: '/',
+ component: () => import('@/views/home/TheHome.vue'),
+ },
+ {
+ path: '/applicationsPackage',
+ name: 'applicationsPackage',
+ component: () => import('@/views/applicationsPackage/TheApplicationsPackage.vue'),
+ },
+ {
+ path: '/applicationsPackage/:name',
+ name: 'applicationsPackage-detail',
+ component: () => import('@/views/applicationsPackage/TheNewDetail.vue'),
+ },
+ {
+ path: '/package',
+ name: 'package',
+ component: () => import('@/views/package/TheRpm.vue'),
+ },
+ {
+ path: '/upstream',
+ name: 'upstream',
+ component: () => import('@/views/upstream/TheUpstream.vue'),
+ },
+ {
+ path: '/search',
+ name: 'search',
+ component: () => import('@/views/search/TheSearch.vue'),
+ },
+ {
+ path: '/upstream/:name',
+ name: 'upstream-detail',
+ component: () => import('@/views/upstream/TheDetail.vue'),
+ },
+ {
+ path: '/image',
+ name: 'image',
+ component: () => import('@/views/image/TheMirror.vue'),
+ },
+ {
+ path: '/epkg',
+ name: 'epkg',
+ component: () => import('@/views/epkg/TheEpkg.vue'),
+ },
+ {
+ path: '/epkg/:name',
+ name: 'epkg-detail',
+ component: () => import('@/views/epkg/TheDetail.vue'),
+ },
+ {
+ path: '/package/:name',
+ name: 'package-detail',
+ component: () => import('@/views/package/TheDetail.vue'),
+ },
+ {
+ path: '/image/:name',
+ name: 'image-detail',
+ component: () => import('@/views/image/TheDetail.vue'),
+ },
+];
+
+const router = createRouter({
+ history: createWebHistory(import.meta.env.BASE_URL),
+ routes,
+ scrollBehavior() {
+ scrollToTop(0, false);
+ },
+});
+
+router.beforeEach((to, from, next) => {
+ document.body.scrollTop = 0;
+ // firefox
+ document.documentElement.scrollTop = 0;
+ next();
+});
+export default router;
diff --git a/src/shared/axios/handleError.ts b/src/shared/axios/handleError.ts
new file mode 100644
index 0000000000000000000000000000000000000000..3a08d25130667367ba1c77808c055c9f0eadf553
--- /dev/null
+++ b/src/shared/axios/handleError.ts
@@ -0,0 +1,61 @@
+import type { AxiosError } from 'axios';
+
+export default (err: AxiosError) => {
+ const { response } = err;
+
+ if (response) {
+ if (!response.status) {
+ err.code = '';
+ err.message = '有response但没有response.status的情况';
+ }
+
+ const data = response.data as { code: string; data: any; msg: string };
+
+ switch (response && response.status) {
+ case 200:
+ err.message = '错误响应也会有状态码为200的情况';
+ break;
+ case 400:
+ err.code = data.code ?? String(response.status);
+ err.message = '请求错误(400)';
+ break;
+ case 401:
+ err.message = '未授权,请重新登录(401)';
+ break;
+ case 403:
+ err.message = '拒绝访问(403)';
+ break;
+ case 404:
+ err.message = '请求出错(404)';
+ break;
+ case 408:
+ err.message = '请求超时(408)';
+ break;
+ case 418:
+ err.message = '服务正在维护升级(418)';
+ break;
+ case 500:
+ err.message = '服务器错误(500)';
+ break;
+ case 501:
+ err.message = '服务未实现(501)';
+ break;
+ case 502:
+ err.message = '网络错误(502)';
+ break;
+ case 503:
+ err.message = '服务不可用(503)';
+ break;
+ case 504:
+ err.message = '网络超时(504)';
+ break;
+ case 505:
+ err.message = 'HTTP版本不受支持(505)';
+ break;
+ default:
+ err.message = `连接出错,状态码:(${response.status})!`;
+ }
+ }
+
+ return err;
+};
diff --git a/src/shared/axios/handleResponse.ts b/src/shared/axios/handleResponse.ts
new file mode 100644
index 0000000000000000000000000000000000000000..c24d7db3efbb802d27e04945b80c51e285618e4f
--- /dev/null
+++ b/src/shared/axios/handleResponse.ts
@@ -0,0 +1,5 @@
+import type { AxiosResponse } from 'axios';
+
+export default (response: AxiosResponse) => {
+ return response;
+};
diff --git a/src/shared/axios/index.ts b/src/shared/axios/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..243a52537b637bffb2caf8ed13d994aab0cd02f2
--- /dev/null
+++ b/src/shared/axios/index.ts
@@ -0,0 +1,210 @@
+import type { Ref } from 'vue';
+
+import axios from 'axios';
+import type { AxiosError, AxiosInstance, AxiosRequestConfig, AxiosRequestHeaders, AxiosResponse, AxiosStatic, Canceler } from 'axios';
+
+import handleResponse from './handleResponse';
+import handleError from './handleError';
+import setConfig from './setConfig';
+
+import { isBoolean, useLoading, useMessage } from '@opensig/opendesign';
+import type { LoadingPropsT } from '@opensig/opendesign/lib/loading/types';
+
+interface RequestConfig extends AxiosRequestConfig {
+ data?: D;
+ showLoading?: boolean | { opt?: Partial; wrap: Ref | HTMLElement | string }; // 加载时是否出现Loading框,默认为false
+ showError?: boolean; // 请求报错是否出现错误提示,默认为true
+ global?: boolean; // 是否为全局请求,全局请求在清除请求池时,不清除
+}
+
+interface RequestInstance extends AxiosInstance {
+ removeRequestInterceptor(): void;
+ removeResponseInterceptor(): void;
+ clearPendingPool(whiteList: Array): Array | null;
+ getUri(config?: RequestConfig): string;
+ request, D = any>(config: RequestConfig): Promise;
+ get, D = any>(url: string, config?: RequestConfig): Promise;
+ delete, D = any>(url: string, config?: RequestConfig): Promise;
+ head, D = any>(url: string, config?: RequestConfig): Promise;
+ options, D = any>(url: string, config?: RequestConfig): Promise;
+ post, D = any>(url: string, data?: D, config?: RequestConfig): Promise;
+ put, D = any>(url: string, data?: D, config?: RequestConfig): Promise;
+ patch, D = any>(url: string, data?: D, config?: RequestConfig): Promise;
+}
+
+interface InternalRequestConfig extends RequestConfig {
+ headers: AxiosRequestHeaders;
+}
+
+let loadingInstance: { toggle(show?: boolean): void } | null = null;
+let loadingCount = 0;
+
+/**
+ * request是基于axios创建的实例,实例只有常见的数据请求方法,没有axios.isCancel/ axios.CancelToken等方法,
+ * 也就是没有**取消请求**和**批量请求**的方法。
+ * 所以如果需要在实例中调用取消某个请求的方法(例如取消上传),请用intactRequest。
+ */
+
+const intactRequest: AxiosStatic = setConfig(axios);
+const request: RequestInstance = intactRequest.create() as RequestInstance;
+
+// 请求中的api
+const pendingPool: Map = new Map();
+
+const getLoadingInstance = (showLoading: boolean | { opt?: Partial; wrap: Ref | HTMLElement | string }) => {
+ if (isBoolean(showLoading)) {
+ return useLoading();
+ } else {
+ const { opt, wrap = 'body' } = showLoading;
+ if (opt) {
+ return useLoading(opt, wrap);
+ } else {
+ return useLoading();
+ }
+ }
+};
+
+/**
+ * 请求拦截
+ */
+const requestInterceptorId = request.interceptors.request.use(
+ (config: InternalRequestConfig) => {
+ const { showLoading } = config;
+ if (loadingCount === 0 && config.showLoading) {
+ if (showLoading) {
+ loadingInstance = getLoadingInstance(showLoading);
+
+ loadingInstance.toggle(true);
+ loadingCount++;
+ }
+ }
+ // 存储请求信息
+ // 定义取消请求
+ config.cancelToken = new axios.CancelToken((cancelFn) => {
+ if (!config?.url) {
+ return;
+ }
+
+ // 如果已请求,则取消重复请求
+ if (pendingPool.has(config.url)) {
+ cancelFn(`${config.url}请求重复`);
+ } else {
+ // 存储到请求池
+ pendingPool.set(config.url, {
+ cancelFn,
+ global: config.global,
+ });
+ }
+ });
+
+
+ return config;
+ },
+ (err: AxiosError) => {
+ Promise.reject(err);
+ }
+);
+
+/**
+ * 响应拦截
+ */
+const responseInterceptorId = request.interceptors.response.use(
+ (response: AxiosResponse) => {
+ if (loadingInstance) {
+ loadingCount--;
+ }
+ if (loadingCount === 0 && loadingInstance) {
+ loadingInstance.toggle(false);
+ loadingInstance = null;
+ }
+ const { config } = response;
+
+ // 请求完成,移除请求池
+ if (config.url) {
+ pendingPool.delete(config.url);
+ }
+
+ return Promise.resolve(handleResponse(response));
+ },
+ (err: AxiosError) => {
+ if (loadingInstance) {
+ loadingInstance.toggle(false);
+ loadingCount = 0;
+ }
+ const config = err.config as InternalRequestConfig;
+
+ // 非取消请求发生异常,同样将请求移除请求池
+ if (!axios.isCancel(err) && config?.url) {
+ pendingPool.delete(config.url);
+ }
+
+ if (err.response) {
+ if (err.stack && err.stack.includes('timeout')) {
+ err.message = '请求超时!';
+ }
+ err = handleError(err);
+ }
+ // 没有response(没有状态码)的情况
+ else {
+ // 被取消的请求
+ if (axios.isCancel(err)) {
+ throw new axios.Cancel(err.message || `请求'${config?.url}'被取消`);
+ }
+ }
+
+ if (config && config.showError !== false) {
+ const msg = useMessage();
+ msg.show({
+ content: err.message,
+ status: 'danger',
+ });
+ }
+
+
+
+ return Promise.reject(err);
+ }
+);
+// 移除全局的请求拦截器
+function removeRequestInterceptor() {
+ request.interceptors.request.eject(requestInterceptorId);
+}
+
+// 移除全局的响应拦截器
+function removeResponseInterceptor() {
+ request.interceptors.response.eject(responseInterceptorId);
+}
+
+/**
+ * 清除所有pending状态的请求
+ * @param {Array} whiteList 白名单,里面的请求不会被取消
+ * 返回值 被取消了的api请求
+ * 可以在路由变化时取消当前所有非全局的pending状态的请求
+ */
+function clearPendingPool(whiteList: Array = []) {
+ if (!pendingPool.size) {
+ return null;
+ }
+
+ const pendingUrlList: Array = Array.from(pendingPool.keys()).filter((url: string) => !whiteList.includes(url));
+ if (!pendingUrlList.length) {
+ return null;
+ }
+
+ pendingUrlList.forEach((pendingUrl) => {
+ // 清除掉所有非全局的pending状态下的请求
+ if (!pendingPool.get(pendingUrl)?.global) {
+ pendingPool.get(pendingUrl)?.cancelFn();
+ pendingPool.delete(pendingUrl);
+ }
+ });
+
+ return pendingUrlList;
+}
+
+request.removeRequestInterceptor = removeRequestInterceptor;
+request.removeResponseInterceptor = removeResponseInterceptor;
+request.clearPendingPool = clearPendingPool;
+
+export { intactRequest, request };
+export type { AxiosResponse, RequestConfig, RequestInstance };
diff --git a/src/shared/axios/setConfig.ts b/src/shared/axios/setConfig.ts
new file mode 100644
index 0000000000000000000000000000000000000000..2ea743e64b92f4dbf04b8b771c4c529060338532
--- /dev/null
+++ b/src/shared/axios/setConfig.ts
@@ -0,0 +1,18 @@
+import type { AxiosStatic } from 'axios';
+
+/**
+ * @param {axios} axios实例
+ * @param {config} 自定义配置对象,可覆盖掉默认的自定义配置
+ */
+export default (axios: AxiosStatic, config = {}) => {
+ const defaultConfig = {
+ timeout: 20000,
+ headers: {
+ 'Content-Type': 'application/json;charset=UTF-8',
+ },
+ xsrfCookieName: 'csrf_token',
+ xsrfHeaderName: 'csrf-token',
+ };
+ Object.assign(axios.defaults, defaultConfig, config);
+ return axios;
+};
diff --git a/src/shared/styles/base.scss b/src/shared/styles/base.scss
new file mode 100644
index 0000000000000000000000000000000000000000..5002430a261cb912c42c43ce7908d666287f108d
--- /dev/null
+++ b/src/shared/styles/base.scss
@@ -0,0 +1,118 @@
+/* base */
+html,
+body {
+ --font_family: Roboto 'Helvetica', 'Helvetica Neue', system-ui, -apple-system, sans-serif;
+ margin: 0;
+ padding: 0;
+ -webkit-text-size-adjust: none;
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
+ -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
+ scroll-behavior: smooth;
+ box-sizing: border-box;
+ font-family: var(--font_family);
+ width: 100%;
+ height: 100%;
+ @include text1;
+ @include scrollbar;
+}
+
+/*
+ * 字体规范
+ */
+[data-system='windows'] {
+ &,
+ body {
+ --font_family: 'HarmonyOS-Hans', Arial, 'Microsoft YaHei', sans-serif !important
+ ;
+ }
+}
+
+[data-system='ios'],
+[data-system='macos'] {
+ &,
+ body {
+ --font_family: 'Helvetica Neue', 'Helvetica', 'PingFang SC', 'PingFang TC', 'PingFang HK', -apple-system, sans-serif !important
+ ;
+ }
+}
+
+[data-system='harmonyos'] {
+ &,
+ body {
+ --font_family: system-ui, sans-serif !important
+ ;
+ }
+}
+
+[data-system='android'] {
+ &,
+ body {
+ --font_family: Roboto, system-ui, sans-serif !important
+ ;
+ }
+}
+
+:root.dark {
+ --el-color-primary: var(--o-color-kleinblue8);
+}
+
+*,
+:after,
+:before {
+ box-sizing: inherit;
+ margin: 0;
+ padding: 0;
+}
+
+img {
+ vertical-align: top;
+}
+
+[tabindex] {
+ outline: none;
+}
+
+a {
+ cursor: pointer;
+ color: var(--o-color-link1);
+ text-decoration: none;
+ &:hover {
+ color: var(--o-color-link2);
+ }
+ &:active {
+ color: var(--o-color-link3);
+ }
+}
+
+blockquote,
+figure,
+form,
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+p {
+ margin: 0;
+}
+dd,
+dl,
+li,
+ol,
+ul {
+ margin: 0;
+ padding: 0;
+}
+
+ol,
+ul {
+ list-style: none outside none;
+}
+.overflow {
+ overflow: hidden;
+}
+.hm-t-container {
+ display: none;
+}
diff --git a/src/shared/styles/index.scss b/src/shared/styles/index.scss
new file mode 100644
index 0000000000000000000000000000000000000000..f86821fd716fa2526bcbbd51fe1d64f4e83ed354
--- /dev/null
+++ b/src/shared/styles/index.scss
@@ -0,0 +1,4 @@
+@import './normalize.scss';
+@import './base.scss';
+@import './markdown.scss';
+@import './theme-dark.scss';
diff --git a/src/shared/styles/markdown.scss b/src/shared/styles/markdown.scss
new file mode 100644
index 0000000000000000000000000000000000000000..ed3c01548d7d2b8749073fb7533c236a2320514a
--- /dev/null
+++ b/src/shared/styles/markdown.scss
@@ -0,0 +1,143 @@
+.markdown {
+ h1,
+ h2,
+ h3,
+ h4,
+ h5,
+ h6 {
+ color: var(--o-color-info1);
+ font-weight: normal;
+ }
+ h1 {
+ margin: 48px 0 16px;
+ @include h2;
+ @include respond-to('phone') {
+ margin: 24px 0 8px;
+ }
+ }
+
+ h2 {
+ margin: 48px 0 16px;
+ @include h2;
+ @include respond-to('phone') {
+ margin: 24px 0 8px;
+ }
+ }
+
+ h3 {
+ margin: 48px 0 16px;
+ @include h3;
+
+ @include respond-to('phone') {
+ margin: 24px 0 8px;
+ }
+ }
+
+ h4 {
+ margin: 32px 0 16px;
+ @include h4;
+ @media screen and (max-width: 768px) {
+ margin: 24px 0 8px;
+ }
+ @include respond-to('phone') {
+ margin: 24px 0 8px;
+ }
+ }
+
+ h5 {
+ margin-top: 24px;
+ @include text1;
+ }
+ p + p {
+ margin-top: 12px;
+ }
+ p,
+ ul,
+ ol,
+ div {
+ font-weight: normal;
+ word-break: break-word;
+ color: var(--o-color-info2);
+ @include text1;
+ }
+ ol {
+ list-style: auto;
+ margin-left: 16px;
+ }
+ pre,
+ xmp {
+ text-align: left;
+ white-space: pre;
+ word-spacing: normal;
+ word-break: normal;
+ word-wrap: normal;
+ -moz-tab-size: 4;
+ -o-tab-size: 4;
+ tab-size: 4;
+ -webkit-hyphens: none;
+ -moz-hyphens: none;
+ -ms-hyphens: none;
+ hyphens: none;
+ color: var(--o-color-info2);
+ font-family: 'Consolas', 'Microsoft YaHei';
+ }
+
+ .code-box {
+ position: relative;
+ }
+ pre {
+ position: relative;
+ margin: 12px 0;
+ background-color: var(--o-color-fill1);
+ overflow-x: auto;
+ z-index: 1;
+ padding: 8px 12px;
+ color: var(--o-color-info1);
+ border-radius: var(--layout-pkg-radius);
+ @include respond-to('<=pad_v') {
+ border-radius: 8px;
+ margin: 12px 0;
+ }
+ @include scrollbar;
+ }
+
+ code {
+ padding: 0;
+ @include tip1;
+ color: var(--o-color-info2);
+ }
+
+ .pre-copy {
+ cursor: pointer;
+ position: absolute;
+ top: 8px;
+ right: 8px;
+ .icon-copy {
+ display: block;
+ width: 20px;
+ height: 20px;
+ -webkit-mask-image: url(@/assets/icon-copy.svg);
+ mask-image: url(@/assets/icon-copy.svg);
+ -webkit-mask-size: cover;
+ background-color: var(--o-color-info2);
+ }
+ &:hover {
+ .icon-copy {
+ background-color: var(--o-color-primary1);
+ }
+ }
+ @include respond-to('phone') {
+ top: 4px;
+ }
+ }
+}
+
+.dark .markdown img {
+ filter: brightness(80%) grayscale(20%) contrast(1.2);
+}
+
+@include in-dark {
+ .markdown img {
+ @include img-in-dark;
+ }
+}
diff --git a/src/shared/styles/normalize.scss b/src/shared/styles/normalize.scss
new file mode 100644
index 0000000000000000000000000000000000000000..ec4f1f581fdb1d954926c6473f35c26ca456ca5f
--- /dev/null
+++ b/src/shared/styles/normalize.scss
@@ -0,0 +1,351 @@
+/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
+
+/* Document
+ ========================================================================== */
+
+/**
+ * 1. Correct the line height in all browsers.
+ * 2. Prevent adjustments of font size after orientation changes in iOS.
+ */
+
+html {
+ line-height: 1.15; /* 1 */
+ -webkit-text-size-adjust: 100%; /* 2 */
+}
+
+/* Sections
+ ========================================================================== */
+
+/**
+ * Remove the margin in all browsers.
+ */
+
+body {
+ margin: 0;
+}
+
+/**
+ * Render the `main` element consistently in IE.
+ */
+
+main {
+ display: block;
+}
+
+/**
+ * Correct the font size and margin on `h1` elements within `section` and
+ * `article` contexts in Chrome, Firefox, and Safari.
+ */
+
+h1 {
+ font-size: 2em;
+ margin: 0 0;
+}
+
+/* Grouping content
+ ========================================================================== */
+
+/**
+ * 1. Add the correct box sizing in Firefox.
+ * 2. Show the overflow in Edge and IE.
+ */
+
+hr {
+ box-sizing: content-box; /* 1 */
+ height: 0; /* 1 */
+ overflow: visible; /* 2 */
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+pre {
+ // font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/* Text-level semantics
+ ========================================================================== */
+
+/**
+ * Remove the gray background on active links in IE 10.
+ */
+
+a {
+ background-color: transparent;
+}
+
+/**
+ * 1. Remove the bottom border in Chrome 57-
+ * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.
+ */
+
+abbr[title] {
+ border-bottom: none; /* 1 */
+ text-decoration: underline; /* 2 */
+ text-decoration: underline dotted; /* 2 */
+}
+
+/**
+ * Add the correct font weight in Chrome, Edge, and Safari.
+ */
+
+b,
+strong {
+ font-weight: bolder;
+}
+
+/**
+ * 1. Correct the inheritance and scaling of font size in all browsers.
+ * 2. Correct the odd `em` font sizing in all browsers.
+ */
+
+code,
+kbd,
+samp {
+ // font-family: monospace, monospace; /* 1 */
+ font-size: 1em; /* 2 */
+}
+
+/**
+ * Add the correct font size in all browsers.
+ */
+
+small {
+ font-size: 80%;
+}
+
+/**
+ * Prevent `sub` and `sup` elements from affecting the line height in
+ * all browsers.
+ */
+
+sub,
+sup {
+ font-size: 75%;
+ line-height: 0;
+ position: relative;
+ vertical-align: baseline;
+}
+
+sub {
+ bottom: -0.25em;
+}
+
+sup {
+ top: -0.5em;
+}
+
+/* Embedded content
+ ========================================================================== */
+
+/**
+ * Remove the border on images inside links in IE 10.
+ */
+
+img {
+ border-style: none;
+}
+
+/* Forms
+ ========================================================================== */
+
+/**
+ * 1. Change the font styles in all browsers.
+ * 2. Remove the margin in Firefox and Safari.
+ */
+
+button,
+input,
+optgroup,
+select,
+textarea {
+ font-family: inherit; /* 1 */
+ font-size: 100%; /* 1 */
+ line-height: 1.15; /* 1 */
+ margin: 0; /* 2 */
+}
+
+/**
+ * Show the overflow in IE.
+ * 1. Show the overflow in Edge.
+ */
+
+button,
+input {
+ /* 1 */
+ overflow: visible;
+}
+
+/**
+ * Remove the inheritance of text transform in Edge, Firefox, and IE.
+ * 1. Remove the inheritance of text transform in Firefox.
+ */
+
+button,
+select {
+ /* 1 */
+ text-transform: none;
+}
+
+/**
+ * Correct the inability to style clickable types in iOS and Safari.
+ */
+
+button,
+[type='button'],
+[type='reset'],
+[type='submit'] {
+ -webkit-appearance: button;
+}
+
+/**
+ * Remove the inner border and padding in Firefox.
+ */
+
+button::-moz-focus-inner,
+[type='button']::-moz-focus-inner,
+[type='reset']::-moz-focus-inner,
+[type='submit']::-moz-focus-inner {
+ border-style: none;
+ padding: 0;
+}
+
+/**
+ * Restore the focus styles unset by the previous rule.
+ */
+
+button:-moz-focusring,
+[type='button']:-moz-focusring,
+[type='reset']:-moz-focusring,
+[type='submit']:-moz-focusring {
+ outline: 1px dotted ButtonText;
+}
+
+/**
+ * Correct the padding in Firefox.
+ */
+
+fieldset {
+ padding: 0.35em 0.75em 0.625em;
+}
+
+/**
+ * 1. Correct the text wrapping in Edge and IE.
+ * 2. Correct the color inheritance from `fieldset` elements in IE.
+ * 3. Remove the padding so developers are not caught out when they zero out
+ * `fieldset` elements in all browsers.
+ */
+
+legend {
+ box-sizing: border-box; /* 1 */
+ color: inherit; /* 2 */
+ display: table; /* 1 */
+ max-width: 100%; /* 1 */
+ padding: 0; /* 3 */
+ white-space: normal; /* 1 */
+}
+
+/**
+ * Add the correct vertical alignment in Chrome, Firefox, and Opera.
+ */
+
+progress {
+ vertical-align: baseline;
+}
+
+/**
+ * Remove the default vertical scrollbar in IE 10+.
+ */
+
+textarea {
+ overflow: auto;
+}
+
+/**
+ * 1. Add the correct box sizing in IE 10.
+ * 2. Remove the padding in IE 10.
+ */
+
+[type='checkbox'],
+[type='radio'] {
+ box-sizing: border-box; /* 1 */
+ padding: 0; /* 2 */
+}
+
+/**
+ * Correct the cursor style of increment and decrement buttons in Chrome.
+ */
+
+[type='number']::-webkit-inner-spin-button,
+[type='number']::-webkit-outer-spin-button {
+ height: auto;
+}
+
+/**
+ * 1. Correct the odd appearance in Chrome and Safari.
+ * 2. Correct the outline style in Safari.
+ */
+
+[type='search'] {
+ -webkit-appearance: textfield; /* 1 */
+ outline-offset: -2px; /* 2 */
+}
+
+/**
+ * Remove the inner padding in Chrome and Safari on macOS.
+ */
+
+[type='search']::-webkit-search-decoration {
+ -webkit-appearance: none;
+}
+
+/**
+ * 1. Correct the inability to style clickable types in iOS and Safari.
+ * 2. Change font properties to `inherit` in Safari.
+ */
+
+::-webkit-file-upload-button {
+ -webkit-appearance: button; /* 1 */
+ font: inherit; /* 2 */
+}
+
+/* Interactive
+ ========================================================================== */
+
+/*
+ * Add the correct display in Edge, IE 10+, and Firefox.
+ */
+
+details {
+ display: block;
+}
+
+/*
+ * Add the correct display in all browsers.
+ */
+
+summary {
+ display: list-item;
+}
+
+/* Misc
+ ========================================================================== */
+
+/**
+ * Add the correct display in IE 10+.
+ */
+
+template {
+ display: none;
+}
+
+/**
+ * Add the correct display in IE 10.
+ */
+
+[hidden] {
+ display: none;
+}
diff --git a/src/shared/styles/theme-dark.scss b/src/shared/styles/theme-dark.scss
new file mode 100644
index 0000000000000000000000000000000000000000..7a69c8fbe755a73144e7d3dea90d7f63d36e46bd
--- /dev/null
+++ b/src/shared/styles/theme-dark.scss
@@ -0,0 +1,87 @@
+:root.dark {
+ // 成功色
+ --o-color-success1: var(--o-color-yellowgreen5); // normal
+ --o-color-success2: var(--o-color-yellowgreen7); // hover
+ --o-color-success3: var(--o-color-yellowgreen2); // disabled
+
+ // 告警色
+ --o-color-warning1: var(--o-color-orange5); // normal
+ --o-color-warning2: var(--o-color-orange7); // hover
+ --o-color-warning3: var(--o-color-orange1); // disabled
+
+ // 错误色
+ --o-color-error1: var(--o-color-red5); // normal
+ --o-color-error2: var(--o-color-red7); // hover
+ --o-color-error3: var(--o-color-red1); // disabled
+
+ // 品牌色
+ --o-color-brand1: var(--o-color-kleinblue8); // 常规
+ --o-color-brand2: var(--o-color-kleinblue9); // 悬浮
+ --o-color-brand3: var(--o-color-kleinblue5); // 点击确认
+ --o-color-brand4: var(--o-color-kleinblue7); // 特殊场景
+ --o-color-brand5: var(--o-color-kleinblue3); // 普通禁用
+ --o-color-brand6: var(--o-color-kleinblue3); // 文字禁用
+
+ // 文字颜色
+ --o-color-text1: var(--o-color-white); // 强调/正文标题
+ --o-color-text2: var(--o-color-black); // 强调/正文标题
+ --o-color-text3: var(--o-color-neutral11); // 次强调/正文标题
+ --o-color-text4: var(--o-color-neutral9); // 次要信息/正文
+ --o-color-text5: var(--o-color-neutral5); // 置灰信息
+ --o-color-text-secondary: var(--o-color-neutral6); // 次级文字颜色
+
+ // 背景色
+ --o-color-bg1: var(--o-color-neutral1); // 整体背景色
+ --o-color-bg2: var(--o-color-greyblack1); // 一级容器背景色
+ --o-color-bg3: var(--o-color-greyblack2); // 二级容器背景色
+ --o-color-bg4: var(--o-color-greyblack3); // 三级容器背景色
+ --o-color-bg5: var(--o-color-greyblack3); // 弹出框、tooltip背景色
+ --o-color-bg6: rgba(0, 0, 0, 0.5); // 蒙层
+ --o-color-bg-secondary: var(--o-color-greyblack2); // 次级背景颜色
+
+ // 链接色
+ --o-color-link1: var(--o-color-kleinblue8); // 常规
+ --o-color-link2: var(--o-color-kleinblue9); // 悬浮
+ --o-color-link3: var(--o-color-kleinblue5); // 点击
+ --o-color-link4: var(--o-color-kleinblue7); // 特殊场景
+ --o-color-link5: var(--o-color-kleinblue3); // 一般禁用
+ --o-color-link6: var(--o-color-kleinblue3); // 文字禁用,暂和一般禁用保持一致
+
+ // 边框颜色
+ --o-color-border1: var(--o-color-neutral9);
+ --o-color-border2: var(--o-color-neutral3);
+ --o-color-border3: var(--o-color-kleinblue8);
+
+ // 分割线颜色
+ --o-color-division1: var(--o-color-neutral3);
+
+ // 填充色,用于阴影容器背景
+ --o-color-fill1: var(
+ --o-color-greyblack1
+ ); // SL1 一级投影容器背景,应用于默认状态的卡片、楼层、导航栏、组件里局部投影背景等
+ --o-color-fill2: var(
+ --o-color-greyblack1
+ ); // SL2 二级投影容器背景,应用于卡片、组件里局部投影等
+ --o-color-fill2_hover: var(
+ --o-color-greyblack2
+ ); // SL2-hover 升起投影容器背景,应用于悬停状态的卡片等,是SL2的激活态
+ --o-color-fill3: var(
+ --o-color-greyblack2
+ ); // SL3 三级投影容器背景,应用于一级投影上的卡片、组件等
+ --o-color-fill4: var(
+ --o-color-greyblack3
+ ); // SL4 覆盖阴影容器背景,应用于信息提示【tips、活动进入按钮等】等投影容器
+ --o-color-fill5: var(
+ --o-color-greyblack4
+ ); // SL5 弹出阴影容器背景,应用于模态弹窗投影
+
+ /**
+ * 阴影
+ */
+ --o-shadow-l1: 0 1px 7px rgba(0, 0, 0, 0.3); // SL1 一级投影,应用于楼层、导航栏、组件里局部投影等,
+ --o-shadow-l2: 0 1px 7px rgba(0, 0, 0, 0.3); // SL2-normal 二级投影,应用于卡片、组件里局部投影等
+ --o-shadow-l2_hover: 0 6px 18px rgba(0, 0, 0, 0.42); // SL2-hover 升起投影,应用于悬停状态的卡片等,是SL2的激活态
+ --o-shadow-l3: 0 6px 18px rgba(0, 0, 0, 0.42); // SL3 三级投影,应用于一级投影上的卡片、组件等
+ --o-shadow-l4: 0 10px 32px rgba(0, 0, 0, 0.54); // SL4 覆盖阴影,应用于信息提示【tips、活动进入按钮等】等投影
+ --o-shadow-l5: 0 12px 42px rgba(0, 0, 0, 0.72); // SL5 弹出阴影,应用于模态弹窗投影
+}
diff --git a/src/utils/common.ts b/src/utils/common.ts
new file mode 100644
index 0000000000000000000000000000000000000000..fb26bb4ac0148a345117c380726965bc579798f7
--- /dev/null
+++ b/src/utils/common.ts
@@ -0,0 +1,91 @@
+import { isClient } from '@opensig/opendesign';
+/**
+ * safe window open
+ */
+export const windowOpen = (url?: string | URL | undefined, target?: string | undefined, features?: string | undefined) => {
+ const opener = window.open(url, target, features);
+ opener && (opener.opener = null);
+};
+
+// 去除搜索结果span标签
+export const removeSpanTags = (str: string) => {
+ return str.replace(/]*>|<\/span>/g, '');
+};
+
+/**
+ * 日期转 xxxx/xx/xx 格式时间
+ * @param {v} 待转换时间
+ * @returns {string} 返回格式化时间,如 2024/01/01
+ */
+export const formatDateTime = (v: string) => {
+ const date = new Date(v);
+
+ const year = date.getFullYear();
+ const month = ('0' + (date.getMonth() + 1)).slice(-2);
+ const day = ('0' + date.getDate()).slice(-2);
+
+ return `${year}/${month}/${day}`;
+};
+
+
+/**
+ * 滚动至顶部
+ * @param {number} top 滑动到的顶部
+ * @param {boolean} mooth 是否平滑滑动
+ */
+export const scrollToTop = (top: number = 0, smooth: boolean = true) => {
+ if (isClient) {
+ const dom = document.querySelector('#app > .o-scroller > .o-scroller-container');
+ dom?.scrollTo({
+ top,
+ behavior: smooth ? 'smooth' : 'instant',
+ });
+ }
+};
+
+export const sureTag = (tag: string) => {
+ switch (tag) {
+ case 'rpmpkg':
+ return 'RPM';
+ case 'epkgpkg':
+ return 'EPKG';
+ default:
+ return '';
+ }
+};
+
+import EpkgIcon from '~icons/pkg/epkg.svg';
+import ImageIcon from '~icons/pkg/image.svg';
+import RpmIcon from '~icons/pkg/rpm.svg';
+
+export const getTagsIcon = (v: string) => {
+ if (v === 'RPM' || v === 'rpmpkg') {
+ return RpmIcon;
+ } else if (v === 'EPKG' || v === 'epkgpkg') {
+ return EpkgIcon;
+ } else if (v === 'IMAGE' || v === 'apppkg') {
+ return ImageIcon;
+ }
+};
+
+//提取code
+
+export const getCode = (code: string) => {
+ const codeRegex = /(.*?)<\/code>/;
+ const match = code.match(codeRegex);
+
+ if (match) {
+ // 如果匹配成功,则输出匹配到的内容
+ const codeContent = match[1];
+ return codeContent;
+ } else {
+ console.log('shibai');
+
+ }
+};
+
+// 检查是否是同域名
+export const checkDomainLink = (path: string) => {
+ return path.includes('openeuler.org')
+}
+
diff --git a/src/utils/locale.ts b/src/utils/locale.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a8a71eccadf5445d55a29127c06a32f2be9f377d
--- /dev/null
+++ b/src/utils/locale.ts
@@ -0,0 +1,15 @@
+/**
+ * 获取当前的语言环境,目前只支持 zh 和 en
+ * @returns {string} 若当前是 zh 环境则返回 zh,否则返回 en
+ */
+export function getCurrentLocale() {
+ let lang = '';
+
+ if (localStorage.getItem('locale')) {
+ lang = localStorage.getItem('locale') === 'zh' ? 'zh' : 'en';
+ } else {
+ lang = navigator.language.toLowerCase().startsWith('zh') ? 'zh' : 'en';
+ }
+
+ return lang;
+}
diff --git a/src/utils/markdown.ts b/src/utils/markdown.ts
new file mode 100644
index 0000000000000000000000000000000000000000..b1b0788588d0e21be6d3c174442a680ffac35fba
--- /dev/null
+++ b/src/utils/markdown.ts
@@ -0,0 +1,29 @@
+import { onUnmounted, nextTick } from 'vue';
+
+import { useClipboard } from '@/composables/useClipboard.js';
+
+/**
+ * markdown 区域添加复制按钮
+ */
+export const addCopyBtn = () => {
+ let copyDom: NodeListOf;
+ const copyText = (e: MouseEvent) => {
+ const dom = e.currentTarget as HTMLElement;
+ useClipboard({
+ text: dom?.getAttribute('data-clipboard-text') || '', // 渲染markdown时加入了data-clipboard-text,用于 copy
+ target: e,
+ });
+ };
+
+ nextTick(() => {
+ copyDom = document.querySelectorAll('.pre-copy'); //获取所有代码块元素,添加监听事件
+ copyDom.forEach((item) => {
+ item.addEventListener('click', copyText);
+ });
+ });
+ onUnmounted(() => {
+ copyDom.forEach((item) => {
+ item.removeEventListener('click', copyText);
+ });
+ });
+};
diff --git a/src/utils/os.ts b/src/utils/os.ts
new file mode 100644
index 0000000000000000000000000000000000000000..95113732e241934d5522d1db7abd1197a0f52264
--- /dev/null
+++ b/src/utils/os.ts
@@ -0,0 +1,86 @@
+
+/**
+ * 获取浏览器的 User-Agent
+ * @returns {string} 返回浏览器的 User-Agent
+ */
+export const getUA = () => {
+ if ('navigator' in globalThis && navigator.userAgent) {
+ return navigator.userAgent;
+ } else {
+ return '';
+ }
+};
+
+const enum OS {
+ WINDOWS = 'windows',
+ MAC_OS = 'macOS',
+ IOS = 'ios',
+ HARMONY_OS = 'harmonyOS',
+ ANDROID = 'android',
+}
+
+// 参考 https://github.com/faisalman/ua-parser-js/blob/master/src/main/ua-parser.js
+const osTesters = [
+ {
+ name: OS.WINDOWS,
+ testers: [/Windows/i],
+ },
+ {
+ name: OS.MAC_OS,
+ testers: [/(mac os x) ?([\w. ]*)/i, /(macintosh|mac_powerpc\b)(?!.+haiku)/i], // MacOS平台的正则表达式示例
+ },
+ {
+ name: OS.IOS,
+ testers: [
+ /ip[honead]{2,4}\b(?:.*os ([\w]+) like mac|; opera)/i, // iOS
+ /(?:ios;fbsv|iphone.+ios)([\d.]+)/i,
+ /cfnetwork\/.+darwin/i,
+ ],
+ },
+ {
+ name: OS.HARMONY_OS,
+ testers: [/droid ([\w.]+)\b.+harmonyos/i],
+ },
+ {
+ name: OS.ANDROID,
+ testers: [/android/i],
+ },
+];
+
+const enum FEATURES {
+ TOUCH_POINTS = 'touchPoints',
+}
+
+const featureDetections = Object.freeze({
+ // 用于分辨 Mac OS 和 ipad OS
+ [FEATURES.TOUCH_POINTS]: () => navigator.maxTouchPoints || 0,
+});
+
+/**
+ * 获取 OS
+ * @returns {string} 返回 OS 类型
+ */
+export const getOS = () => {
+ // 获取不到默认返回 windows
+ const ua = getUA();
+ if (!ua) {
+ return OS.WINDOWS;
+ }
+ const osItem = osTesters.find((t) => {
+ const { testers } = t;
+ const matched = testers.some((reg) => reg.test(ua));
+ return matched;
+ });
+ if (osItem) {
+ const { name } = osItem;
+ if (OS.MAC_OS === name) {
+ const maxTouchPoints = featureDetections[FEATURES.TOUCH_POINTS]();
+ if (maxTouchPoints > 2) {
+ return OS.IOS;
+ }
+ }
+ return name;
+ } else {
+ return OS.WINDOWS;
+ }
+};
\ No newline at end of file
diff --git a/src/views/applicationsPackage/APkgContent.vue b/src/views/applicationsPackage/APkgContent.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f0cf70d72aa13aac4426a1994ec2aea2184e6714
--- /dev/null
+++ b/src/views/applicationsPackage/APkgContent.vue
@@ -0,0 +1,248 @@
+
+
+
+
+
+
+
+
+
为您找到符合条件的筛选 {{ total }} 个
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/applicationsPackage/TheApplicationsPackage.vue b/src/views/applicationsPackage/TheApplicationsPackage.vue
new file mode 100644
index 0000000000000000000000000000000000000000..38870be87b6509a95ce35b07fea8cdb0393b2184
--- /dev/null
+++ b/src/views/applicationsPackage/TheApplicationsPackage.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/applicationsPackage/TheNewDetail.vue b/src/views/applicationsPackage/TheNewDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5149c8fb62789e4ceec1ec6cf1b033c0d1ec43c5
--- /dev/null
+++ b/src/views/applicationsPackage/TheNewDetail.vue
@@ -0,0 +1,421 @@
+
+
+
+
+
+ {{ home.name }}
+ {{ breadcrumbInfo.name }}
+ {{ appData.name }}详情页
+
+
+
+
+
+
+
+
+
+
基本信息
+
软件包版本号:{{ version }}
+
+
+ -
+ {{ item.name }}
+ {{ item.type }}
+
+
+
+ 使用方式
+
+
+ 更多信息
+
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+
+ -
+ {{ item.name }}
+ {{ item.type }}
+
+
+
+
使用方式
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/applicationsPackage/components/DetailAside.vue b/src/views/applicationsPackage/components/DetailAside.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3c4371797f991fff1326bc0c9e1a6b0ad8ac7ce8
--- /dev/null
+++ b/src/views/applicationsPackage/components/DetailAside.vue
@@ -0,0 +1,136 @@
+
+
+
+
+
+
软件包大小:{{ data.size }}
+
+
+
+
+ 下载
+ 复制链接
+
+
+
+
+
+
+
diff --git a/src/views/applicationsPackage/components/DetailNewHead.vue b/src/views/applicationsPackage/components/DetailNewHead.vue
new file mode 100644
index 0000000000000000000000000000000000000000..899aa84ba6c097df5dfd7bf55e8ff1cb652215d3
--- /dev/null
+++ b/src/views/applicationsPackage/components/DetailNewHead.vue
@@ -0,0 +1,151 @@
+
+
+
+
+
+
+
+
+
+
{{ appName }}
+
{{ basicInfo[0]?.value }}
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/epkg/EpkgContent.vue b/src/views/epkg/EpkgContent.vue
new file mode 100644
index 0000000000000000000000000000000000000000..dcdd1bac8b2765066d9847d46011643cb5cb4d8e
--- /dev/null
+++ b/src/views/epkg/EpkgContent.vue
@@ -0,0 +1,226 @@
+
+
+
+
+
+
+
+
+
为您找到符合条件的筛选 {{ total }} 个
+
+
+
+
+
+
+
+
+
diff --git a/src/views/epkg/TheDetail.vue b/src/views/epkg/TheDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9daf50c39eaf4c76d0a58de21bedc4d17be1c0ba
--- /dev/null
+++ b/src/views/epkg/TheDetail.vue
@@ -0,0 +1,301 @@
+
+
+
+
+
+ {{ home.name }}
+ {{ breadcrumbInfo.name }}
+ {{ appData.name }}详情页
+
+
+
+
+
+
+
+
基本信息
+
软件包版本号:{{ version }}
+
+
+ -
+ {{ item.name }}
+ {{ item.type }}
+
+
+
+ 安装指引
+
+
+ 更多信息
+
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/epkg/TheEpkg.vue b/src/views/epkg/TheEpkg.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6c7a27238885ac9e272372d23ec71c9d07bf2aa1
--- /dev/null
+++ b/src/views/epkg/TheEpkg.vue
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/home/HomeHeader.vue b/src/views/home/HomeHeader.vue
new file mode 100644
index 0000000000000000000000000000000000000000..36caa08bab7391b113cafbe8f9aa474406806adc
--- /dev/null
+++ b/src/views/home/HomeHeader.vue
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/home/HomeNews.vue b/src/views/home/HomeNews.vue
new file mode 100644
index 0000000000000000000000000000000000000000..81d19df3808451c990a19e875b687b82cf822c88
--- /dev/null
+++ b/src/views/home/HomeNews.vue
@@ -0,0 +1,146 @@
+
+
+
+
+
+
+
+
+ {{ tag }}
+
+
+
+
+
+ {{ subItem.summary }}
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/home/HomeSkeleton.vue b/src/views/home/HomeSkeleton.vue
new file mode 100644
index 0000000000000000000000000000000000000000..a878bce5b8f8764d126bb2516c84e2a00ee0bcdd
--- /dev/null
+++ b/src/views/home/HomeSkeleton.vue
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/home/TheHome.vue b/src/views/home/TheHome.vue
new file mode 100644
index 0000000000000000000000000000000000000000..5bd19b1f594ad1781e9861af53525c0572bbba17
--- /dev/null
+++ b/src/views/home/TheHome.vue
@@ -0,0 +1,259 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
领域应用
+
+
+
+
+
{{ item.name }}
+
+ 了解更多
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
获取资源
+
+
+
+
+
+ {{ item.name }}
+ {{ item.desc }}
+
+
+
+
+
+
+
+
解决方案
+
+
+
+
+
{{ s.title }}
+
{{ s.desc }}
+
+
+
+
+
+
+
openEuler兼容性更新大事件
+
+
+
+
+
+
+
+
+
diff --git a/src/views/image/ImageContent.vue b/src/views/image/ImageContent.vue
new file mode 100644
index 0000000000000000000000000000000000000000..6b9bc3e80b7279c08215ef923a7cbec0ede0b584
--- /dev/null
+++ b/src/views/image/ImageContent.vue
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+
+
为您找到符合条件的筛选 {{ total }} 个
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/image/TheDetail.vue b/src/views/image/TheDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..c219d00c4375c9604824ecc39975588cd78be8a6
--- /dev/null
+++ b/src/views/image/TheDetail.vue
@@ -0,0 +1,290 @@
+
+
+
+
+
+ {{ home.name }}
+ {{ breadcrumbInfo.name }}
+ 容器镜像详情页
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/image/TheMirror.vue b/src/views/image/TheMirror.vue
new file mode 100644
index 0000000000000000000000000000000000000000..7087766101ce7da8e4ce184153aef1cef2bd5acf
--- /dev/null
+++ b/src/views/image/TheMirror.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/package/RpmContent.vue b/src/views/package/RpmContent.vue
new file mode 100644
index 0000000000000000000000000000000000000000..3b657cf6e2a5fa8981ba012eb3943bf066593a45
--- /dev/null
+++ b/src/views/package/RpmContent.vue
@@ -0,0 +1,231 @@
+
+
+
+
+
+
+
+
+
为您找到符合条件的筛选 {{ total }} 个
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/package/TheDetail.vue b/src/views/package/TheDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f212c5d2a56ab5ac4dbc4e8b51b3b3b4eb14d1a3
--- /dev/null
+++ b/src/views/package/TheDetail.vue
@@ -0,0 +1,301 @@
+
+
+
+
+
+ {{ home.name }}
+ {{ breadcrumbInfo.name }}
+ {{ appData.name }}详情页
+
+
+
+
+
+
+
+
基本信息
+
软件包版本号:{{ version }}
+
+
+ -
+ {{ item.name }}
+ {{ item.type }}
+
+
+
+
+
+ 安装指引
+
+
+ 更多信息
+
+
+
+
+
+
+ {{ description }}
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/package/TheRpm.vue b/src/views/package/TheRpm.vue
new file mode 100644
index 0000000000000000000000000000000000000000..2f46c1bbb3ae9ce6dc9e17f38d9e668bb21f8450
--- /dev/null
+++ b/src/views/package/TheRpm.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/src/views/search/TheSearch.vue b/src/views/search/TheSearch.vue
new file mode 100644
index 0000000000000000000000000000000000000000..9b061caebd0b553f34617805ad99725f57adc923
--- /dev/null
+++ b/src/views/search/TheSearch.vue
@@ -0,0 +1,96 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/upstream/TheDetail.vue b/src/views/upstream/TheDetail.vue
new file mode 100644
index 0000000000000000000000000000000000000000..01d26c70e666ee3e5a51bbf8228dd639ccec8313
--- /dev/null
+++ b/src/views/upstream/TheDetail.vue
@@ -0,0 +1,200 @@
+
+
+
+
+
+
+
+ 上游兼容应用全景
+ {{ upstreamName }} 状态详情
+
+
+
{{ upstreamName }} 状态详情
+
+
+
+
+ Apahce Spark
+
+
+
+ -
+ Homepage
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
编辑
+
+
+
+
+ {{ row.homepage }}
+
+
+
+
+
+
+
+
+ {{ row.latest }} ({{ row.commit }})
+
+
+
+
+
+
+
+
+
+
diff --git a/src/views/upstream/TheUpstream.vue b/src/views/upstream/TheUpstream.vue
new file mode 100644
index 0000000000000000000000000000000000000000..12ce9164d7a4ad23fb02ade94002fccdc414abf5
--- /dev/null
+++ b/src/views/upstream/TheUpstream.vue
@@ -0,0 +1,117 @@
+
+
+
+
+
+
+
+
+ {{ row.name }}
+
+
+ {{ row.upstreamVersion }}
+
+
+ {{ row.compatibleVersion }}
+
+
+ {{ row.status }}
+
+
+
+
+
+
+
+
+
diff --git a/tsconfig.app.json b/tsconfig.app.json
new file mode 100644
index 0000000000000000000000000000000000000000..491e0939517a1abe867467092ef20d2be1fbd692
--- /dev/null
+++ b/tsconfig.app.json
@@ -0,0 +1,13 @@
+{
+ "extends": "@vue/tsconfig/tsconfig.dom.json",
+ "include": ["env.d.ts", "src/**/*", "src/**/*.vue"],
+ "exclude": ["src/**/__tests__/*"],
+ "compilerOptions": {
+ "composite": true,
+ "noEmit": true,
+ "baseUrl": ".",
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ }
+}
diff --git a/tsconfig.json b/tsconfig.json
new file mode 100644
index 0000000000000000000000000000000000000000..66b5e5703e83c352671ce094731e9e861ada6924
--- /dev/null
+++ b/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "files": [],
+ "references": [
+ {
+ "path": "./tsconfig.node.json"
+ },
+ {
+ "path": "./tsconfig.app.json"
+ }
+ ]
+}
diff --git a/tsconfig.node.json b/tsconfig.node.json
new file mode 100644
index 0000000000000000000000000000000000000000..46cf2e142ccca2f2de6f07a44fd83bceb1863a65
--- /dev/null
+++ b/tsconfig.node.json
@@ -0,0 +1,17 @@
+{
+ "extends": "@tsconfig/node18/tsconfig.json",
+ "include": [
+ "vite.config.*",
+ "vitest.config.*",
+ "cypress.config.*",
+ "nightwatch.conf.*",
+ "playwright.config.*"
+ ],
+ "compilerOptions": {
+ "composite": true,
+ "noEmit": true,
+ "module": "ESNext",
+ "moduleResolution": "Bundler",
+ "types": ["node"]
+ }
+}
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..a8ba53c9e7d38632e44e848e06728d4c28bebb19
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,86 @@
+// import { fileURLToPath, URL } from 'node:url';
+
+import { defineConfig } from 'vite';
+import vue from '@vitejs/plugin-vue';
+import vueJsx from '@vitejs/plugin-vue-jsx';
+
+import path from 'path';
+
+import Icons from 'unplugin-icons/vite';
+import { FileSystemIconLoader } from 'unplugin-icons/loaders';
+
+import AutoImport from 'unplugin-auto-import/vite';
+import Components from 'unplugin-vue-components/vite';
+import { ElementPlusResolver } from 'unplugin-vue-components/resolvers';
+
+// https://vitejs.dev/config/
+export default defineConfig({
+ plugins: [
+ vue(),
+ vueJsx(),
+ AutoImport({
+ resolvers: [ElementPlusResolver({ importStyle: 'sass' })],
+ }),
+ Components({
+ resolvers: [ElementPlusResolver({ importStyle: 'sass' })],
+ }),
+ Icons({
+ compiler: 'vue3',
+ customCollections: {
+ app: FileSystemIconLoader('./src/assets/svg-icons'),
+ pkg: FileSystemIconLoader('./src/assets/icon'),
+ },
+ }),
+ ],
+ css: {
+ preprocessorOptions: {
+ scss: {
+ additionalData: `
+ @use "@/assets/style/mixin/screen.scss" as *;
+ @use "@/assets/style/mixin/font.scss" as *;
+ @use "@/assets/style/mixin/common.scss" as *;
+ @use "@/assets/style/global.scss" as *;
+ `,
+ },
+ },
+ },
+ resolve: {
+ alias: {
+ '@/': `${path.resolve(__dirname, './src')}/`,
+ 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js',
+ },
+ },
+ server: {
+ proxy: {
+ '/api-omapi/': {
+ target: 'https://omapi.osinfra.cn/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api-omapi/, ''),
+ },
+ '/api-query/': {
+ target: 'https://easysoftware-api.test.osinfra.cn/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api-query/, ''),
+ },
+ '/dsapi/': {
+ target: 'https://dsapi.osinfra.cn/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/dsapi/, ''),
+ },
+ '/monitoring/': {
+ target: 'https://easysoftware-monitoring.test.osinfra.cn/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/monitoring/, ''),
+ },
+ '/api-search/': {
+ target: 'https://doc-search.test.osinfra.cn/',
+ changeOrigin: true,
+ rewrite: (path) => path.replace(/^\/api-search/, ''),
+ },
+ },
+ },
+
+
+
+
+});