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 @@ + + +icon24copy + + + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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 @@ + + + + + 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/, ''), + }, + }, + }, + + + + +});