diff --git a/.env.development b/.env.development new file mode 100644 index 0000000000000000000000000000000000000000..b60c2cb0e9c6d843faacba1095949be3553df562 --- /dev/null +++ b/.env.development @@ -0,0 +1 @@ +VITE_SECRET = 8484ffc0431e4fc4 diff --git a/.env.production b/.env.production new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000000000000000000000000000000000000..a8024f23be0946272049ce603d9303d307e3e60e --- /dev/null +++ b/.eslintrc @@ -0,0 +1,33 @@ +{ + "root": true, + "parser": "vue-eslint-parser", + "parserOptions": { + "sourceType": "module", + "ecmaVersion": 2020, + "ecmaFeatures": { + "tsx": true + } + }, + "env": { + "browser": true, + "node": true, + "es6": true + }, + "extends": [ + "plugin:vue/vue3-recommended", + "@vue/typescript/recommended", + "plugin:@typescript-eslint/recommended", + "@vue/prettier" + ], + "plugins": ["@typescript-eslint"], + "rules": { + "no-console": "warn", + "no-debugger": "error", + "no-var": "error", + "no-unused-vars": "error", + "no-multiple-empty-lines": "error", + "eqeqeq": "error", + "@typescript-eslint/no-explicit-any": "off", + "vue/no-v-model-argument": "off" + } +} diff --git a/.gitignore b/.gitignore index 5d947ca8879f8a9072fe485c566204e3c2929e80..d6211aa47d68bbe1f8d933dfa0d6cfc88610373b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1,124 @@ -# Build and Release Folders -bin-debug/ -bin-release/ -[Oo]bj/ -[Bb]in/ - -# Other files and folders -.settings/ - -# Executables -*.swf -*.air -*.ipa -*.apk - -# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties` -# should NOT be excluded as they contain compiler settings and other important -# information for Eclipse / Flash Builder. +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* + +# Diagnostic reports (https://nodejs.org/api/report.html) +report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage +*.lcov + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# Snowpack dependency directory (https://snowpack.dev/) +web_modules/ + +# TypeScript cache +*.tsbuildinfo + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Microbundle cache +.rpt2_cache/ +.rts2_cache_cjs/ +.rts2_cache_es/ +.rts2_cache_umd/ + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env +.env.test + +# parcel-bundler cache (https://parceljs.org/) +.cache +.parcel-cache + +# Next.js build output +.next +out + +# Nuxt.js build / generate output +.nuxt +dist + +# Gatsby files +.cache/ +# Comment in the public line in if your project uses Gatsby and not Next.js +# https://nextjs.org/blog/next-9-1#public-directory-support +# public + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless/ + +# FuseBox cache +.fusebox/ + +# DynamoDB Local files +.dynamodb/ + +# TernJS port file +.tern-port + +# Stores VSCode versions used for testing VSCode extensions +.vscode-test + +# yarn v2 +.yarn/cache +.yarn/unplugged +.yarn/build-state.yml +.yarn/install-state.gz +.pnp.* + +# mac +.DS_Store + +app/.vitepress/.cache +app/.vitepress/.temp +app/.vitepress/dist +node_modules diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000000000000000000000000000000000..fa4e095233fbfba3ff88d57fb03190fd96b72d99 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +strict-peer-dependencies=false \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000000000000000000000000000000..dc54040f3a9e08af7eb8580530624a56b1433e42 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,10 @@ +{ + "printWidth": 80, + "useTabs": false, + "singleQuote": true, + "tabWidth": 2, + "semi": true, + "trailingComma": "es5", + "arrowParens": "always", + "jsxBracketSameLine": false +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000000000000000000000000000000000000..a7cea0b0678120a1b590d1b6592c7318039b9179 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..57bc2586f403ea86e1d7e3d2a91d340086f2ecfb --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +FROM gplane/pnpm as Builder + +RUN mkdir -p /home/quick-issue/web +WORKDIR /home/quick-issue/web +COPY . /home/quick-issue/web + +RUN pnpm install + +RUN pnpm build + +FROM swr.cn-north-4.myhuaweicloud.com/opensourceway/openeuler/nginx:1.22.0-22.03-lts + +COPY --from=Builder /home/quick-issue/web/dist /usr/share/nginx/html/ +RUN chmod -R 755 /usr/share/nginx/html +COPY ./deploy/nginx/nginx.conf /etc/nginx/nginx.conf + + +ENV RUN_USER nginx +ENV RUN_GROUP nginx +EXPOSE 8080 +ENTRYPOINT ["nginx", "-g", "daemon off;"] 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..0f92669b0c5323557fcb3f89c01b0695748d6202 --- /dev/null +++ b/components.d.ts @@ -0,0 +1,49 @@ +// generated by unplugin-vue-components +// We suggest you to commit this file into source control +// Read more: https://github.com/vuejs/core/pull/3399 +import '@vue/runtime-core' + +export {} + +declare module '@vue/runtime-core' { + export interface GlobalComponents { + AppContent: typeof import('./src/components/AppContent.vue')['default'] + AppEditor: typeof import('./src/components/AppEditor.vue')['default'] + AppFooter: typeof import('./src/components/AppFooter.vue')['default'] + AppHeader: typeof import('./src/components/AppHeader.vue')['default'] + AppIssue: typeof import('./src/components/AppIssue.vue')['default'] + AppPull: typeof import('./src/components/AppPull.vue')['default'] + AppSlideVerify: typeof import('./src/components/AppSlideVerify.vue')['default'] + DocAnchor: typeof import('./src/components/DocAnchor.vue')['default'] + ElCard: typeof import('element-plus/es')['ElCard'] + ElCheckbox: typeof import('element-plus/es')['ElCheckbox'] + ElCollapse: typeof import('element-plus/es')['ElCollapse'] + ElCollapseItem: typeof import('element-plus/es')['ElCollapseItem'] + ElDialog: typeof import('element-plus/es')['ElDialog'] + ElDrawer: typeof import('element-plus/es')['ElDrawer'] + ElDropdown: typeof import('element-plus/es')['ElDropdown'] + ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem'] + ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu'] + ElForm: typeof import('element-plus/es')['ElForm'] + ElFormItem: typeof import('element-plus/es')['ElFormItem'] + ElInput: typeof import('element-plus/es')['ElInput'] + ElOption: typeof import('element-plus/es')['ElOption'] + ElPagination: typeof import('element-plus/es')['ElPagination'] + ElPopover: typeof import('element-plus/es')['ElPopover'] + ElScrollbar: typeof import('element-plus/es')['ElScrollbar'] + ElSelect: typeof import('element-plus/es')['ElSelect'] + ElSwitch: typeof import('element-plus/es')['ElSwitch'] + ElTable: typeof import('element-plus/es')['ElTable'] + ElTableColumn: typeof import('element-plus/es')['ElTableColumn'] + ElTabPane: typeof import('element-plus/es')['ElTabPane'] + ElTabs: typeof import('element-plus/es')['ElTabs'] + ElTree: typeof import('element-plus/es')['ElTree'] + ElUpload: typeof import('element-plus/es')['ElUpload'] + HeaderNav: typeof import('./src/components/HeaderNav.vue')['default'] + ONav: typeof import('./src/components/ONav.vue')['default'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + SigLandscapeFeature: typeof import('./src/components/SigLandscapeFeature.vue')['default'] + SlideVerify: typeof import('./src/components/slide-verify/slide-verify.vue')['default'] + } +} diff --git a/deploy/nginx/nginx.conf b/deploy/nginx/nginx.conf new file mode 100644 index 0000000000000000000000000000000000000000..78aa59fe2e581c3f64fe54a4ccbcaace731c2e51 --- /dev/null +++ b/deploy/nginx/nginx.conf @@ -0,0 +1,141 @@ +worker_processes auto; + +error_log /dev/stdout warn; + +pid /var/run/nginx.pid; + +load_module /etc/nginx/modules/ngx_http_geoip2_module.so; + +worker_rlimit_nofile 4096; +events { + use epoll; + worker_connections 4096; +} + +http { + include /etc/nginx/mime.types; + + geoip2 /etc/nginx/geoip/GeoLite2-Country.mmdb { + $geoip2_city_country_code source=$http_true_client_ip country iso_code; + $geoip2_city_country_name source=$http_true_client_ip country names en; + } + + geoip2 /etc/nginx/geoip/GeoLite2-City.mmdb { + $geoip2_city source=$http_true_client_ip city names en; + } + + log_format main '[$time_local] "remote_addr": "$remote_addr"' + '"x_forwarded_for": "$http_x_forwarded_for"' + '"true-client-ip": "$http_true_client_ip"' + '"$request"' + '"geoip2_city_country_code": "$geoip2_city_country_code"' + '"geoip2_city_country_name": "$geoip2_city_country_name"' + '"geoip2_city": "$geoip2_city"' + '$status $body_bytes_sent "$http_referer" ' + '"$http_user_agent"'; + + access_log /dev/stdout main; + + autoindex off; + sendfile on; + + keepalive_timeout 300; + keepalive_requests 100; + proxy_read_timeout 900; + proxy_connect_timeout 60; + + proxy_send_timeout 60; + client_header_timeout 60; + client_header_buffer_size 1k; + large_client_header_buffers 4 64k; + client_body_buffer_size 16K; + client_body_timeout 60; + send_timeout 60; + server_tokens off; + port_in_redirect off; + limit_conn_zone $binary_remote_addr zone=conn_zone:10m; + limit_conn_zone $server_name zone=perserver:10m; + limit_req_zone global zone=req_zone:1m rate=1000r/s; + limit_req_zone $binary_remote_addr zone=event_zone:10m rate=20r/s; + + proxy_request_buffering off; + client_max_body_size 50m; + + gzip on; + gzip_min_length 1k; + gzip_buffers 4 16k; + gzip_http_version 1.0; + 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 443 ssl; + # server_name localhost; + # charset utf-8; + + listen 8080; + server_name localhost; + charset utf-8; + limit_conn perserver 50; + if ($request_method = 'OPTIONS') { + return 401; + } + + location / { + location /assets { + # publish every two weeks + expires 14d; + add_header Cache-Control public; + } + location / { + add_header Cache-Control no-cache; + } + + location = / { + rewrite ^/$ /zh/issues/ redirect; + } + location = /zh/ { + rewrite ^/zh/$ /zh/issues/ redirect; + } + + location /api-issues/ { + proxy_pass http://119.8.32.82/; + # proxy_pass https://ipb.osinfra.cn/; + } + location /api-omapi/ { + proxy_pass https://omapi.osinfra.cn/; + } + location /api-dsapi/ { + proxy_pass https://dsapi.osinfra.cn/; + } + location /ip-api/ { + proxy_pass http://ip-api.com/json/; + } + + root /usr/share/nginx/html; + index /index.html; + # error_page 404 /404.html; + } + + location ~ ^/(quick-issue) { + try_files $uri /index.html; + } + + error_page 500 501 502 503 504 505 /500.html; + error_page 401 /401.html; + error_page 404 /404.html; + + location = /401.html { + root /usr/share/nginx/html; + } + + location = /404.html { + root /usr/share/nginx/html; + } + + location = /500.html { + root /usr/share/nginx/html; + } + } +} \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000000000000000000000000000000000000..9170f28ee49d9a4108c4eb9a6f996ed27730b53d --- /dev/null +++ b/index.html @@ -0,0 +1,16 @@ + + + + + + + + Quick-Issue + + + +
+ + + + \ No newline at end of file diff --git a/opendesign/_utils/common.ts b/opendesign/_utils/common.ts new file mode 100644 index 0000000000000000000000000000000000000000..9a855ca113fa95661ac5d37d6055c00b344b1b78 --- /dev/null +++ b/opendesign/_utils/common.ts @@ -0,0 +1 @@ +export type SizeType = 'large' | 'medium' | 'small' | 'mini'; diff --git a/opendesign/button/index.ts b/opendesign/button/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ad4db8f068b84568642b64a13383a711c830fa23 --- /dev/null +++ b/opendesign/button/index.ts @@ -0,0 +1,8 @@ +import type { App } from 'vue'; +import Button from './src/button'; + +Button.install = function (app: App) { + app.component(Button.name, Button); +}; + +export { Button }; diff --git a/opendesign/button/src/button-types.ts b/opendesign/button/src/button-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..4deb21d56ab96f6b5a472b8f481531085fd7ed7f --- /dev/null +++ b/opendesign/button/src/button-types.ts @@ -0,0 +1,37 @@ +import { ExtractDefaultPropTypes, PropType } from 'vue'; +import { SizeType } from '../../_utils/common'; + +type ButtonType = 'outline' | 'primary' | 'secondary' | 'text'; +// TODO:status颜色规范待补充 +// type ButtonStatus = 'normal' | 'success' | 'warning' | 'danger'; +type ButtonStatus = 'normal'; +type ButtonNativeType = 'button' | 'submit' | 'reset'; + +export const buttonProps = { + size: { + type: String as PropType, + default: 'medium', + }, + type: { + type: String as PropType, + default: 'outline', + }, + status: { + type: String as PropType, + default: 'nomral', + }, + disabled: { + type: Boolean, + default: false, + }, + animation: { + type: Boolean, + default: false, + }, + nativeType: { + type: String as PropType, + default: 'button', + }, +}; + +export type ButtonProps = ExtractDefaultPropTypes; diff --git a/opendesign/button/src/button.scss b/opendesign/button/src/button.scss new file mode 100644 index 0000000000000000000000000000000000000000..2eb0a2e8f47ff8f181f2567c7ee72e48a8e99f81 --- /dev/null +++ b/opendesign/button/src/button.scss @@ -0,0 +1,187 @@ +@import './var.scss'; + +.o-button { + display: inline-flex; + align-items: center; + padding: var(--o-button-padding); + font-size: var(--o-button-font-size); + line-height: var(--o-button-line-height); + color: var(--o-button-font-color); + background-color: var(--o-button-bg-color); + border: var(--o-button-border); + outline: none; + user-select: none; + cursor: pointer; + + &.with-prefix { + padding-left: var(--o-button-icon-paddding); + } + + &.with-suffix { + padding-right: var(--o-button-icon-paddding); + } + + &.is-disabled { + cursor: not-allowed; + } + + &:hover { + @media screen and (min-width: 1100px) { + color: var(--o-button-font-color_hover); + border: var(--o-button-border_hover); + background-color: var(--o-button-bg-color_hover); + } + } + &:active { + @media screen and (min-width: 1100px) { + color: var(--o-button-font-color_active); + background-color: var(--o-button-bg-color_active); + border: var(--o-button-border_active); + } + } + &.is-disabled { + color: var(--o-button-font-color_disabled); + border: var(--o-button-border_disabled); + background-color: var(--o-button-bg-color_disabled); + } + + //primary + &.o-button-type-primary { + color: var(--o-button-font-color-primary); + border: var(--o-button-border-primary); + background-color: var(--o-button-bg-color-primary); + + &:hover { + @media screen and (min-width: 1100px) { + border: var(--o-button-border-primary_hover); + background-color: var(--o-button-bg-color-primary_hover); + } + } + &:active { + @media screen and (min-width: 1100px) { + border: var(--o-button-border-primary_active); + background-color: var(--o-button-bg-color-primary_active); + } + } + } + &.o-button-type-primary.is-disabled { + color: var(--o-button-font-color-primary_disabled); + border: var(--o-button-border-primary_disabled); + background-color: var(--o-button-bg-color-primary_disabled); + } + + // secondary + &.o-button-type-secondary { + color: var(--o-button-font-color-secondary); + border: var(--o-button-border-secondary); + background-color: var(--o-button-bg-color-secondary); + &:hover { + border: var(--o-button-border-secondary_hover); + background-color: var(--o-button-bg-color-secondary_hover); + } + &:active { + border: var(--o-button-border-secondary_active); + background-color: var(--o-button-bg-color-secondary_active); + } + } + &.o-button-type-secondary.is-disabled { + color: var(--o-button-font-color-secondary_disabled); + border: var(--o-button-border-secondary_disabled); + background-color: var(--o-button-bg-color-secondary_disabled); + } + + // text + &.o-button-type-text { + color: var(--o-button-font-color-text); + border: var(--o-button-border-text); + background-color: var(--o-button-bg-color-text); + &:hover { + // border: var(--o-button-border-text_hover); + // background-color: var(--o-button-bg-color-text_hover); + } + &:active { + // border: var(--o-button-border-text_active); + // background-color: var(--o-button-bg-color-text_active); + } + } + &.o-button-type-text.is-disabled { + color: var(--o-button-font-color-text_disabled); + border: var(--o-button-border-text_disabled); + background-color: var(--o-button-bg-color-text_disabled); + } + + .prefix-icon { + display: inline-flex; + align-items: center; + margin-right: var(--o-button-icon-margin); + font-size: var(--o-button-icon-font-size); + transition: all 0.2s linear; + } + + .suffix-icon { + display: inline-flex; + align-items: center; + margin-left: var(--o-button-icon-margin); + font-size: var(--o-button-icon-font-size); + transition: all 0.2s linear; + } + + &.animation:hover .prefix-icon { + @media screen and (min-width: 1100px) { + transform: translate(-4px); + } + } + + &.animation:hover .suffix-icon { + @media screen and (min-width: 1100px) { + transform: translate(4px); + } + } + + &.o-button-size-small { + padding: var(--o-button-padding-small); + font-size: var(--o-button-font-size-small); + line-height: var(--o-button-line-height-small); + &.with-prefix { + padding-left: var(--o-button-icon-paddding-small); + } + + &.with-suffix { + padding-right: var(--o-button-icon-paddding-small); + } + + .prefix-icon { + margin-right: var(--o-button-icon-margin-small); + font-size: var(--o-button-icon-font-size-small); + } + + .suffix-icon { + margin-left: var(--o-button-icon-margin-small); + font-size: var(--o-button-icon-font-size-small); + } + } + + &.o-button-size-mini { + padding: var(--o-button-padding-mini); + font-size: var(--o-button-font-size-mini); + line-height: var(--o-button-line-height-mini); + + &.with-prefix { + padding-left: var(--o-button-icon-paddding-mini); + } + + &.with-suffix { + padding-right: var(--o-button-icon-paddding-mini); + } + + .prefix-icon { + margin-right: var(--o-button-icon-margin-mini); + font-size: var(--o-button-icon-font-size-mini); + } + + .suffix-icon { + margin-left: var(--o-button-icon-margin-mini); + font-size: var(--o-button-icon-font-size-mini); + } + } +} diff --git a/opendesign/button/src/button.tsx b/opendesign/button/src/button.tsx new file mode 100644 index 0000000000000000000000000000000000000000..116b113634e9c4d8da7aa149b1f0b4d0ebc15705 --- /dev/null +++ b/opendesign/button/src/button.tsx @@ -0,0 +1,46 @@ +import { computed, defineComponent, toRefs } from 'vue'; +import { buttonProps, ButtonProps } from './button-types'; +import './button.scss'; + +export default defineComponent({ + name: 'OButton', + props: buttonProps, + emits: ['click'], + setup(props: ButtonProps, { emit, slots }) { + const { size, type, status, disabled, animation, nativeType } = + toRefs(props); + + const classNames = computed(() => ({ + 'o-button': true, + [`o-button-size-${size.value}`]: true, + [`o-button-type-${type.value}`]: true, + [`o-button-status-${status.value}`]: true, + 'with-prefix': slots.prefixIcon, + 'with-suffix': slots.suffix, + animation: animation.value, + 'is-disabled': disabled.value, + })); + + const onClick = (e: MouseEvent) => { + emit('click', e); + }; + + return () => { + return ( + + ); + }; + }, +}); diff --git a/opendesign/button/src/var.scss b/opendesign/button/src/var.scss new file mode 100644 index 0000000000000000000000000000000000000000..9c992381b2140ac8c1877b1eeb82848c85ec684f --- /dev/null +++ b/opendesign/button/src/var.scss @@ -0,0 +1,90 @@ +.o-button { + // 文字颜色 + --o-button-font-color: var(--o-color-brand1); + --o-button-font-color-primary: var(--o-color-text2); + --o-button-font-color-secondary: var(--o-color-text1); + --o-button-font-color-text: var(--o-color-text1); + // 文字颜色 hover态,注:只有类型为outline的按钮hover时有文字颜色变化 + --o-button-font-color_hover: var(--o-color-brand2); + // 文字颜色 avtive态,注:只有类型为outline的按钮active时有文字颜色变化 + --o-button-font-color_active: var(--o-color-brand3); + // 文字颜色 disabled态 + --o-button-font-color_disabled: var(--o-color-brand5); + --o-button-font-color-primary_disabled: var(--o-color-text2); + --o-button-font-color-secondary_disabled: var(--o-color-text1); + --o-button-font-color-text_disabled: var(--o-color-text5); + + // 背景颜色 + --o-button-bg-color: var(--o-color-transparent); + --o-button-bg-color-primary: var(--o-color-brand1); + --o-button-bg-color-secondary: var(--o-color-secondary); + --o-button-bg-color-text: var(--o-color-transparent); + // 背景颜色 hover态 + --o-button-bg-color_hover: var(--o-color-transparent); + --o-button-bg-color-primary_hover: var(--o-color-brand2); + --o-button-bg-color-secondary_hover: var(--o-color-secondary_hover); + --o-button-bg-color-text_hover: var(--o-color-secondary_hover); + // 背景颜色 active态 + --o-button-bg-color_active: var(--o-color-transparent); + --o-button-bg-color-primary_active: var(--o-color-brand3); + --o-button-bg-color-secondary_active: var(--o-color-secondary_active); + --o-button-bg-color-text_active: var(--o-color-secondary_active); + // 背景颜色 disabled态 + --o-button-bg-color_disabled: var(--o-color-transparent); + --o-button-bg-color-primary_disabled: var(--o-color-brand5); + --o-button-bg-color-secondary_disabled: var(--o-color-secondary_disabled); + --o-button-bg-color-text_disabled: var(--o-color-secondary_disabled); + + // border + --o-button-border: 1px solid var(--o-color-brand1); + --o-button-border-primary: 1px solid var(--o-color-brand1); + --o-button-border-secondary: 1px solid var(--o-color-secondary); + --o-button-border-text: 1px solid var(--o-color-transparent); + // border hover态 + --o-button-border_hover: 1px solid var(--o-color-brand2); + --o-button-border-primary_hover: 1px solid var(--o-color-brand2); + --o-button-border-secondary_hover: 1px solid var(--o-color-secondary_hover); + --o-button-border-text_hover: 1px solid var(--o-color-secondary_hover); + // border active态 + --o-button-border_active: 1px solid var(--o-color-brand3); + --o-button-border-primary_active: 1px solid var(--o-color-brand3); + --o-button-border-secondary_active: 1px solid var(--o-color-secondary_active); + --o-button-border-text_active: 1px solid var(--o-color-secondary_active); + // border disabled态 + --o-button-border_disabled: 1px solid var(--o-color-brand5); + --o-button-border-primary_disabled: 1px solid var(--o-color-brand5); + --o-button-border-secondary_disabled: 1px solid + var(--o-color-secondary_disabled); + --o-button-border-text_disabled: 1px solid var(--o-color-transparent); + + // font-size + --o-button-font-size: var(--o-font-size-h8); + --o-button-font-size-small: var(--o-font-size-text); + --o-button-font-size-mini: var(--o-font-size-tip); + + // line-height + --o-button-line-height: var(--o-line-height-h8); + --o-button-line-height-small: var(--o-line-height-text); + --o-button-line-height-mini: var(--o-line-height-tip); + + // padding + --o-button-padding: 11px 28px; + --o-button-padding-small: 9px 28px; + --o-button-padding-mini: 6px 16px; + + // icon margin + --o-button-icon-margin: 8px; + --o-button-icon-margin-small: 8px; + --o-button-icon-margin-mini: 4px; + // icon font-size + --o-button-icon-font-size: var(--o-font-size-h5); + --o-button-icon-font-size-small: var(--o-font-size-h8); + --o-button-icon-font-size-mini: var(--o-font-size-tip); + // icon padding + --o-button-icon-paddding: 20px; + --o-button-icon-paddding-small: 14px; + --o-button-icon-paddding-mini: 6x; + + // animation + -o-button-transition: color 0.2s, background-color 0.3s, border 0.3s; +} diff --git a/opendesign/card/OCard.vue b/opendesign/card/OCard.vue new file mode 100644 index 0000000000000000000000000000000000000000..83c88dcca1efe8dbf9dd80ba2ec2ea43775771b1 --- /dev/null +++ b/opendesign/card/OCard.vue @@ -0,0 +1,46 @@ + + + + + diff --git a/opendesign/card/index.ts b/opendesign/card/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7a07a1b9fd0d11195eeb2d749b5dbdf213440876 --- /dev/null +++ b/opendesign/card/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Card from './OCard.vue'; +Card.install = function (app: App) { + app.component('OCard', Card); +}; + +export { Card }; diff --git a/opendesign/carousel/index.ts b/opendesign/carousel/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/opendesign/checkbox/index.ts b/opendesign/checkbox/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..4992370144fecef6c5fa2847d94461481990b747 --- /dev/null +++ b/opendesign/checkbox/index.ts @@ -0,0 +1,13 @@ +import type { App } from 'vue'; +import Checkbox from './src/checkbox'; +import CheckboxGroup from './src/checkbox-group'; + +Checkbox.install = function (app: App) { + app.component(Checkbox.name, Checkbox); +}; + +CheckboxGroup.install = function (app: App) { + app.component(CheckboxGroup.name, CheckboxGroup); +}; + +export { Checkbox, CheckboxGroup }; diff --git a/opendesign/checkbox/src/checkbox-group-types.ts b/opendesign/checkbox/src/checkbox-group-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..608fe1a1a2767c66c863bc97c830c922ddc9093a --- /dev/null +++ b/opendesign/checkbox/src/checkbox-group-types.ts @@ -0,0 +1,28 @@ +import { ExtractDefaultPropTypes, InjectionKey, PropType, Ref } from 'vue'; + +export const checkboxGroupProps = { + // 双向绑定值 + modelValue: { + type: Array as PropType>, + default: null, + }, + // 是否禁用 + disabled: { + type: Boolean, + default: false, + }, +}; + +export type CheckboxGroupProps = ExtractDefaultPropTypes< + typeof checkboxGroupProps +>; + +interface CheckboxGroupInjection { + modelValue: Ref>; + disabled: Ref; + // eslint-disable-next-line no-unused-vars + onChange: (val: Array) => void; +} + +export const checkboxGroupKey: InjectionKey = + Symbol('OCheckboxGroup'); diff --git a/opendesign/checkbox/src/checkbox-group.scss b/opendesign/checkbox/src/checkbox-group.scss new file mode 100644 index 0000000000000000000000000000000000000000..4b7bd0f3a9a6216085936106622224228a5ae96c --- /dev/null +++ b/opendesign/checkbox/src/checkbox-group.scss @@ -0,0 +1,7 @@ +.o-checkbox-group { + display: flex; + align-items: center; + .o-checkbox + .o-checkbox { + margin-left: 24px; + } +} diff --git a/opendesign/checkbox/src/checkbox-group.tsx b/opendesign/checkbox/src/checkbox-group.tsx new file mode 100644 index 0000000000000000000000000000000000000000..62bd5f34c7e8c1fd0892d453ff421e05c2e9272c --- /dev/null +++ b/opendesign/checkbox/src/checkbox-group.tsx @@ -0,0 +1,28 @@ +import { defineComponent, provide, toRefs } from 'vue'; +import { + checkboxGroupKey, + checkboxGroupProps, + CheckboxGroupProps, +} from './checkbox-group-types'; +import './checkbox-group.scss'; + +export default defineComponent({ + name: 'OCheckboxGroup', + props: checkboxGroupProps, + emits: ['update:modelValue', 'change'], + setup(props: CheckboxGroupProps, { emit, slots }) { + const { modelValue, disabled } = toRefs(props); + + const onChange = (val: Array) => { + emit('update:modelValue', val); + emit('change', val); + }; + + // 注入 + provide(checkboxGroupKey, { modelValue, disabled, onChange }); + + return () => { + return
{slots.default?.()}
; + }; + }, +}); diff --git a/opendesign/checkbox/src/checkbox-types.ts b/opendesign/checkbox/src/checkbox-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..695189bfef4606477520997412e00d09f461d7a3 --- /dev/null +++ b/opendesign/checkbox/src/checkbox-types.ts @@ -0,0 +1,27 @@ +import { ExtractDefaultPropTypes, PropType } from 'vue'; + +export const checkboxProps = { + // 双向绑定值 + modelValue: { + type: [String, Number, Boolean] as PropType, + default: null, + }, + // value + value: { + type: [String, Number, Boolean] as PropType, + required: true, + default: null, + }, + // 是否禁用 + disabled: { + type: Boolean, + default: false, + }, + // name + name: { + type: String, + default: '', + }, +}; + +export type CheckboxProps = ExtractDefaultPropTypes; diff --git a/opendesign/checkbox/src/checkbox.scss b/opendesign/checkbox/src/checkbox.scss new file mode 100644 index 0000000000000000000000000000000000000000..14a203783aa79cd4213619e11b213e755c99b6fe --- /dev/null +++ b/opendesign/checkbox/src/checkbox.scss @@ -0,0 +1,38 @@ +.o-checkbox { + display: inline-flex; + align-items: center; + position: relative; + font-size: var(--o-font-size-text); + line-height: var(--o-line-height-text); + cursor: pointer; + + input[type='checkbox'] { + position: absolute; + outline: none; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0; + } + + &-icon { + width: 16px; + height: 16px; + border: 1px solid var(--o-color-division1); + display: inline-flex; + justify-content: center; + align-items: center; + color: var(--o-color-white); + } + + &-label { + margin-left: 8px; + } + &.o-checkbox-checked { + .o-checkbox-icon { + background-color: var(--o-color-brand1); + } + } +} diff --git a/opendesign/checkbox/src/checkbox.tsx b/opendesign/checkbox/src/checkbox.tsx new file mode 100644 index 0000000000000000000000000000000000000000..9b69eb1277b6fc54e9aafb98e95a604ebf9dfeec --- /dev/null +++ b/opendesign/checkbox/src/checkbox.tsx @@ -0,0 +1,102 @@ +import { computed, defineComponent, inject } from 'vue'; +import { checkboxGroupKey } from './checkbox-group-types'; +import { checkboxProps, CheckboxProps } from './checkbox-types'; +import './checkbox.scss'; + +export default defineComponent({ + name: 'OCheckbox', + props: checkboxProps, + emits: ['update:modelValue', 'change'], + setup(props: CheckboxProps, { emit, slots }) { + const checkboxGroupInjection = inject(checkboxGroupKey, null); + + // 是否禁用 + const isDisabled = computed( + () => checkboxGroupInjection?.disabled.value || props.disabled + ); + + // 是否选中 + const isChecked = computed(() => + checkboxGroupInjection + ? checkboxGroupInjection.modelValue.value.includes(props.value) + : props.value === props.modelValue + ); + + const onClick = (e: Event) => { + e.stopPropagation(); + }; + + const onChange = (e: Event) => { + if (isDisabled.value) { + return; + } + const { checked } = e.target as HTMLInputElement; + let newValue; + if (checkboxGroupInjection) { + newValue = [...checkboxGroupInjection.modelValue.value]; + if (checked) { + newValue.push(props.value); + } else { + newValue = newValue.filter((item) => item !== props.value); + } + + checkboxGroupInjection?.onChange(newValue); + } else { + newValue = props.value; + } + + emit('update:modelValue', newValue); + emit('change', newValue); + }; + + const getContent = () => { + if (slots.checkbox) { + return slots.checkbox({ + checked: isChecked.value, + disabled: isDisabled.value, + }); + } else { + return ( + <> + + {isChecked.value ? ( + + + + ) : ( + '' + )} + + {slots.default?.()} + + ); + } + }; + + return () => { + return ( + + ); + }; + }, +}); diff --git a/opendesign/collapse/OCollapse.vue b/opendesign/collapse/OCollapse.vue new file mode 100644 index 0000000000000000000000000000000000000000..43a600b64531a4e71b2681faf673eb63dd43a0c4 --- /dev/null +++ b/opendesign/collapse/OCollapse.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/opendesign/collapse/OCollapseItem.vue b/opendesign/collapse/OCollapseItem.vue new file mode 100644 index 0000000000000000000000000000000000000000..263ccfb9f56c1180f47afa5e21e9804198e2e147 --- /dev/null +++ b/opendesign/collapse/OCollapseItem.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/opendesign/collapse/index.ts b/opendesign/collapse/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..bccdd918fa0140c17ef82682a304a76609fd0d86 --- /dev/null +++ b/opendesign/collapse/index.ts @@ -0,0 +1,10 @@ +import type { App } from 'vue'; +import Collapse from './OCollapse.vue'; +import CollapseItem from './OCollapseItem.vue'; +Collapse.install = function (app: App) { + app.component('OCollapse', Collapse); +}; +CollapseItem.install = function (app: App) { + app.component('OCollapseItem', CollapseItem); +}; +export { Collapse, CollapseItem }; diff --git a/opendesign/container/index.ts b/opendesign/container/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..d4355f5bb927b2d5a7e4876fa4a269fbf588386c --- /dev/null +++ b/opendesign/container/index.ts @@ -0,0 +1,8 @@ +import type { App } from 'vue'; +import Container from './src/container'; + +Container.install = function (app: App) { + app.component(Container.name, Container); +}; + +export { Container }; diff --git a/opendesign/container/src/container-types.ts b/opendesign/container/src/container-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..8f97141fc197f1c928d5a6d1b58718687b7740ad --- /dev/null +++ b/opendesign/container/src/container-types.ts @@ -0,0 +1,18 @@ +import { ExtractDefaultPropTypes, PropType } from 'vue'; + +type ContainerLevelIndex = 1 | 2 | 3 | 4 | 5; + +export const containerProps = { + // 层级 + levelIndex: { + type: Number as PropType, + default: 2, + }, + // 是否有阴影 + shadow: { + type: Boolean, + default: true, + }, +}; + +export type ContainerProps = ExtractDefaultPropTypes; diff --git a/opendesign/container/src/container.scss b/opendesign/container/src/container.scss new file mode 100644 index 0000000000000000000000000000000000000000..b6a8bcd5b799118e7dd23f0d819701aa82340694 --- /dev/null +++ b/opendesign/container/src/container.scss @@ -0,0 +1,31 @@ +@import './var.scss'; + +.o-container { + &-level1 { + background-color: var(--o-container-bg-color-level1); + box-shadow: var(--o-container-shadow-level1); + } + &-level2 { + background-color: var(--o-container-bg-color-level2); + box-shadow: var(--o-container-shadow-level2); + + &:hover { + @media screen and (min-width: 1100px) { + background-color: var(--o-container-bg-color-level2_hover); + box-shadow: var(--o-container-shadow-level2_hover); + } + } + } + &-level3 { + background-color: var(--o-container-bg-color-level3); + box-shadow: var(--o-container-shadow-level3); + } + &-level4 { + background-color: var(--o-container-bg-color-level4); + box-shadow: var(--o-container-shadow-level4); + } + &-level5 { + background-color: var(--o-container-bg-color-level5); + box-shadow: var(--o-container-shadow-level5); + } +} diff --git a/opendesign/container/src/container.tsx b/opendesign/container/src/container.tsx new file mode 100644 index 0000000000000000000000000000000000000000..bba10b223678837551901d25f69d31ec30072250 --- /dev/null +++ b/opendesign/container/src/container.tsx @@ -0,0 +1,17 @@ +import { defineComponent } from 'vue'; +import { containerProps, ContainerProps } from './container-types'; +import './container.scss'; + +export default defineComponent({ + name: 'OContainer', + props: containerProps, + setup(props: ContainerProps, { slots }) { + return () => { + return ( +
+ {slots.default?.()} +
+ ); + }; + }, +}); diff --git a/opendesign/container/src/var.scss b/opendesign/container/src/var.scss new file mode 100644 index 0000000000000000000000000000000000000000..31dbca79815de4a00b062fbca1b45ca25f48d1de --- /dev/null +++ b/opendesign/container/src/var.scss @@ -0,0 +1,17 @@ +.o-container { + // 背景颜色 + --o-container-bg-color-level1: var(--o-color-fill1); + --o-container-bg-color-level2: var(--o-color-fill2); + --o-container-bg-color-level2_hover: var(--o-color-fill2_hover); + --o-container-bg-color-level3: var(--o-color-fill3); + --o-container-bg-color-level4: var(--o-color-fill4); + --o-container-bg-color-level5: var(--o-color-fill5); + + // 阴影 + --o-container-shadow-level1: var(--o-shadow-l1); + --o-container-shadow-level2: var(--o-shadow-l2); + --o-container-shadow-level2_hover: var(--o-shadow-l2_hover); + --o-container-shadow-level3: var(--o-shadow-l3); + --o-container-shadow-level4: var(--o-shadow-l4); + --o-container-shadow-level5: var(--o-shadow-l5); +} diff --git a/opendesign/dialog/ODialog.vue b/opendesign/dialog/ODialog.vue new file mode 100644 index 0000000000000000000000000000000000000000..dddf0341f5b3d5396c1bfa84a2f2698fc546b6e5 --- /dev/null +++ b/opendesign/dialog/ODialog.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/opendesign/dialog/index.ts b/opendesign/dialog/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..f573583fc0122bd3939ef0309b6720dc6a48df07 --- /dev/null +++ b/opendesign/dialog/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Dialog from './ODialog.vue'; + +Dialog.install = function (app: App) { + app.component('ODialog', Dialog); +}; +export { Dialog }; diff --git a/opendesign/drawer/ODrawer.vue b/opendesign/drawer/ODrawer.vue new file mode 100644 index 0000000000000000000000000000000000000000..136ac5366bb6244e623b59c546f34b7a4c7fcc6d --- /dev/null +++ b/opendesign/drawer/ODrawer.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/opendesign/drawer/index.ts b/opendesign/drawer/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..fb09bdd38c8219163740cfbdbaa79a22e9bfdea1 --- /dev/null +++ b/opendesign/drawer/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Drawer from './ODrawer.vue'; + +Drawer.install = function (app: App) { + app.component('ODrawer', Drawer); +}; +export { Drawer }; diff --git a/opendesign/dropdown/ODropdown.vue b/opendesign/dropdown/ODropdown.vue new file mode 100644 index 0000000000000000000000000000000000000000..ed9f557b043488ed973fdae5392879e132571f3e --- /dev/null +++ b/opendesign/dropdown/ODropdown.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/opendesign/dropdown/ODropdownitem.vue b/opendesign/dropdown/ODropdownitem.vue new file mode 100644 index 0000000000000000000000000000000000000000..8423d3b6400f3772eb05423aae11a8df0b8b494d --- /dev/null +++ b/opendesign/dropdown/ODropdownitem.vue @@ -0,0 +1,11 @@ + + + + diff --git a/opendesign/dropdown/index.ts b/opendesign/dropdown/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..0b8b4bbb665f60982fee6d399074a5ea4a2be44a --- /dev/null +++ b/opendesign/dropdown/index.ts @@ -0,0 +1,12 @@ +import type { App } from 'vue'; +import Dropdown from './ODropdown.vue'; +import DropdownItem from './ODropdownitem.vue'; + +Dropdown.install = function (app: App) { + app.component('ODropdown', Dropdown); +}; +DropdownItem.install = function (app: App) { + app.component('ODropdownItem', DropdownItem); +}; + +export { Dropdown, DropdownItem }; diff --git a/opendesign/icon/OIcon.vue b/opendesign/icon/OIcon.vue new file mode 100644 index 0000000000000000000000000000000000000000..5bd32fa69c458a290ecb9caff9f22750c50c1b9c --- /dev/null +++ b/opendesign/icon/OIcon.vue @@ -0,0 +1,16 @@ + + diff --git a/opendesign/icon/index.ts b/opendesign/icon/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..d2a3f0c2325cb6b8c5baca1da6578ae7a42b69c9 --- /dev/null +++ b/opendesign/icon/index.ts @@ -0,0 +1,8 @@ +import type { App } from 'vue'; +import Icon from './OIcon.vue'; + +Icon.install = function (app: App) { + app.component('OIcon', Icon); +}; + +export { Icon }; diff --git a/opendesign/index.ts b/opendesign/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..97e655d7a8bab37de4852b25e08f74a3b5f38684 --- /dev/null +++ b/opendesign/index.ts @@ -0,0 +1,61 @@ +import type { App } from 'vue'; + +import './style/variable.scss'; + +import { Button } from './button'; +import { Radio, RadioGroup } from './radio'; +import { Checkbox, CheckboxGroup } from './checkbox'; +import { Select } from './select'; + +import { Icon } from './icon'; +import { Card } from './card'; +import { Tag } from './tag'; +import { Tabs, TabPane } from './tabs'; +import { Input } from './input'; +import { Tree } from './tree'; +import { Pagination } from './pagination'; +import { Table, TableColumn } from './table'; +import { Timeline } from './timeline'; +import { Search } from './search'; +import { Drawer } from './drawer'; +import { Switch } from './switch'; +import { Collapse, CollapseItem } from './collapse'; +import { Container } from './container'; +import { Dialog } from './dialog'; +import { Dropdown, DropdownItem } from './dropdown'; + +const components = [ + Button, + Radio, + RadioGroup, + Checkbox, + CheckboxGroup, + Select, + Icon, + Card, + Pagination, + Table, + TableColumn, + Tag, + Timeline, + Input, + Tabs, + TabPane, + Tree, + Search, + Drawer, + Switch, + Collapse, + CollapseItem, + Container, + Dropdown, + DropdownItem, + Dialog, +]; +export default { + install(app: App): void { + components.forEach((component) => { + app.use(component as any); + }); + }, +}; diff --git a/opendesign/input/OInput.vue b/opendesign/input/OInput.vue new file mode 100644 index 0000000000000000000000000000000000000000..c29c5008e728f3f1bf93cd24a132c4f3ac279e22 --- /dev/null +++ b/opendesign/input/OInput.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/opendesign/input/index.ts b/opendesign/input/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..dd41787e6411b793c7f66027debd46dfbca4f176 --- /dev/null +++ b/opendesign/input/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Input from './OInput.vue'; +Input.install = function (app: App) { + app.component('OInput', Input); +}; + +export { Input }; diff --git a/opendesign/package.json b/opendesign/package.json new file mode 100644 index 0000000000000000000000000000000000000000..5af3bcac5080f4114a47404383e7b2bbac900180 --- /dev/null +++ b/opendesign/package.json @@ -0,0 +1,9 @@ +{ + "name": "opendesign", + "version": "0.0.1", + "description": "opendesign components", + "main": "index.ts", + "dependencies": { + "vue": "^3.2.33" + } +} diff --git a/opendesign/pagination/OPagination.vue b/opendesign/pagination/OPagination.vue new file mode 100644 index 0000000000000000000000000000000000000000..f4b79221d4bc5c287fb92dbfa3dfa34b343bbc26 --- /dev/null +++ b/opendesign/pagination/OPagination.vue @@ -0,0 +1,145 @@ + + + + + diff --git a/opendesign/pagination/index.ts b/opendesign/pagination/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e90ec8c79f477d5476368dfdd28472d9ac9a6f40 --- /dev/null +++ b/opendesign/pagination/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Pagination from './OPagination.vue'; +Pagination.install = function (app: App) { + app.component('OPagination', Pagination); +}; + +export { Pagination }; \ No newline at end of file diff --git a/opendesign/radio/index.ts b/opendesign/radio/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..35f2f2c39d18d1d370c791ab5ce9055c3c017c93 --- /dev/null +++ b/opendesign/radio/index.ts @@ -0,0 +1,13 @@ +import type { App } from 'vue'; +import Radio from './src/radio'; +import RadioGroup from './src/radio-group'; + +Radio.install = function (app: App) { + app.component(Radio.name, Radio); +}; + +RadioGroup.install = function (app: App) { + app.component(RadioGroup.name, RadioGroup); +}; + +export { Radio, RadioGroup }; diff --git a/opendesign/radio/src/radio-group-types.ts b/opendesign/radio/src/radio-group-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..2085a688c9130a9a143ed6b24625343bf30ce240 --- /dev/null +++ b/opendesign/radio/src/radio-group-types.ts @@ -0,0 +1,26 @@ +import { ExtractDefaultPropTypes, InjectionKey, PropType, Ref } from 'vue'; + +export const radioGroupProps = { + // 双向绑定值 + modelValue: { + type: [String, Number, Boolean] as PropType, + default: null, + }, + // 是否禁用 + disabled: { + type: Boolean, + default: false, + }, +}; + +export type RadioGroupProps = ExtractDefaultPropTypes; + +interface RadioGroupInjection { + modelValue: Ref; + disabled: Ref; + // eslint-disable-next-line no-unused-vars + onChange: (val: string | number | boolean) => void; +} + +export const radioGroupKey: InjectionKey = + Symbol('ORadioGroup'); diff --git a/opendesign/radio/src/radio-group.scss b/opendesign/radio/src/radio-group.scss new file mode 100644 index 0000000000000000000000000000000000000000..e74b34fd7bee7e63a40f04727770f22bc6cf060e --- /dev/null +++ b/opendesign/radio/src/radio-group.scss @@ -0,0 +1,7 @@ +.o-radio-group { + display: flex; + align-items: center; + .o-radio + .o-radio { + margin-left: 24px; + } +} diff --git a/opendesign/radio/src/radio-group.tsx b/opendesign/radio/src/radio-group.tsx new file mode 100644 index 0000000000000000000000000000000000000000..1dd0aa01dae6980a1b007733740f2f7ecdeff3ab --- /dev/null +++ b/opendesign/radio/src/radio-group.tsx @@ -0,0 +1,28 @@ +import { defineComponent, provide, toRefs } from 'vue'; +import { + radioGroupKey, + radioGroupProps, + RadioGroupProps, +} from './radio-group-types'; +import './radio-group.scss'; + +export default defineComponent({ + name: 'ORadioGroup', + props: radioGroupProps, + emits: ['update:modelValue', 'change'], + setup(props: RadioGroupProps, { emit, slots }) { + const { modelValue, disabled } = toRefs(props); + + const onChange = (val: string | number | boolean) => { + emit('update:modelValue', val); + emit('change', val); + }; + + // 注入 + provide(radioGroupKey, { modelValue, disabled, onChange }); + + return () => { + return
{slots.default?.()}
; + }; + }, +}); diff --git a/opendesign/radio/src/radio-types.ts b/opendesign/radio/src/radio-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..19920b69c053ac7e6a75110e68645fbca05ad49f --- /dev/null +++ b/opendesign/radio/src/radio-types.ts @@ -0,0 +1,22 @@ +import { ExtractDefaultPropTypes, PropType } from 'vue'; + +export const radioProps = { + // 双向绑定值 + modelValue: { + type: [String, Number, Boolean] as PropType, + default: null, + }, + // value + value: { + type: [String, Number, Boolean] as PropType, + required: true, + default: null, + }, + // 是否禁用 + disabled: { + type: Boolean, + default: false, + }, +}; + +export type RadioProps = ExtractDefaultPropTypes; diff --git a/opendesign/radio/src/radio.scss b/opendesign/radio/src/radio.scss new file mode 100644 index 0000000000000000000000000000000000000000..d3eed8fd2c18e5e08d87b6624111778e75c78dc3 --- /dev/null +++ b/opendesign/radio/src/radio.scss @@ -0,0 +1,54 @@ +.o-radio { + display: inline-flex; + align-items: center; + position: relative; + font-size: var(--o-font-size-text); + line-height: var(--o-line-height-text); + cursor: pointer; + + input[type='radio'] { + position: absolute; + outline: none; + z-index: -1; + top: 0; + left: 0; + right: 0; + bottom: 0; + opacity: 0; + } + + &-icon { + position: relative; + display: inline-block; + border-radius: 50%; + width: 18px; + height: 18px; + background: #fff; + border: 1px solid #979797; + + &::after { + content: ''; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + width: 12px; + height: 12px; + border-radius: 50%; + background-color: transparent; + transition: background-color 0.3s; + } + } + + &-label { + margin-left: 8px; + } + + &.o-radio-checked { + .o-radio-icon { + &::after { + background-color: var(--o-color-brand1); + } + } + } +} diff --git a/opendesign/radio/src/radio.tsx b/opendesign/radio/src/radio.tsx new file mode 100644 index 0000000000000000000000000000000000000000..e07ce020023bdbfcde5e2d8dcac3668d5a62970b --- /dev/null +++ b/opendesign/radio/src/radio.tsx @@ -0,0 +1,73 @@ +import { computed, defineComponent, inject } from 'vue'; +import { radioGroupKey } from './radio-group-types'; +import { radioProps, RadioProps } from './radio-types'; +import './radio.scss'; + +export default defineComponent({ + name: 'ORadio', + props: radioProps, + emits: ['update:modelValue', 'change'], + setup(props: RadioProps, { emit, slots }) { + const radioGroupInjection = inject(radioGroupKey, null); + + // 是否禁用 + const isDisabled = computed( + () => radioGroupInjection?.disabled.value || props.disabled + ); + + // 是否选中 + const isChecked = computed( + () => + props.value === + (radioGroupInjection + ? radioGroupInjection.modelValue.value + : props.modelValue) + ); + + const onClick = (e: Event) => { + e.stopPropagation(); + }; + + const onChange = () => { + if (isDisabled.value) { + return; + } + + const val = props.value; + radioGroupInjection?.onChange(val); + emit('update:modelValue', val); + emit('change', val); + }; + + const getContent = () => { + if (slots.radio) { + return slots.radio({ + checked: isChecked.value, + disabled: isDisabled.value, + }); + } else { + return ( + <> + + {slots.default?.()} + + ); + } + }; + + return () => { + return ( + + ); + }; + }, +}); diff --git a/opendesign/radio/src/var.scss b/opendesign/radio/src/var.scss new file mode 100644 index 0000000000000000000000000000000000000000..ad6c1046b63d1d3cb21daac846fbbd871beaeda2 --- /dev/null +++ b/opendesign/radio/src/var.scss @@ -0,0 +1,6 @@ +.o-radio { + --o-radio-font-size: var(--o-font-size-text); + --o-radio-line-height: var(--o-line-height-text); + --o-radio-icon-width: 18px; + --o-radio-icon-height: 18px; +} diff --git a/opendesign/search/OSearch.vue b/opendesign/search/OSearch.vue new file mode 100644 index 0000000000000000000000000000000000000000..731ba446571802ab728816c5ba9240780ae01da3 --- /dev/null +++ b/opendesign/search/OSearch.vue @@ -0,0 +1,80 @@ + + + + + diff --git a/opendesign/search/index.ts b/opendesign/search/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..119d1b73829ff42461c004d8be0511131a52d25c --- /dev/null +++ b/opendesign/search/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Search from './OSearch.vue'; +Search.install = function (app: App) { + app.component('OSearch', Search); +}; + +export { Search }; diff --git a/opendesign/select/OOption.vue b/opendesign/select/OOption.vue new file mode 100644 index 0000000000000000000000000000000000000000..96d713b16b74cf2a70710a22bde165db4793965a --- /dev/null +++ b/opendesign/select/OOption.vue @@ -0,0 +1,26 @@ + + + + diff --git a/opendesign/select/OSelect.vue b/opendesign/select/OSelect.vue new file mode 100644 index 0000000000000000000000000000000000000000..1a313ff707972f8cb037306a5a8ac7902cb36fce --- /dev/null +++ b/opendesign/select/OSelect.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/opendesign/select/index.ts b/opendesign/select/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..55fc044d0cd9a92e169690cee892dcc2cf0501d5 --- /dev/null +++ b/opendesign/select/index.ts @@ -0,0 +1,11 @@ +import type { App } from 'vue'; +import Select from './OSelect.vue'; +// import Option from './OOption.vue'; +Select.install = function (app: App) { + app.component('OSelect', Select); +}; +// Option.install = function (app: App) { +// app.component('OOption', Option); +// }; + +export { Select }; diff --git a/opendesign/select/src/select-types.ts b/opendesign/select/src/select-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..307d3a420830bca3e15f031b479b05d741fd9f57 --- /dev/null +++ b/opendesign/select/src/select-types.ts @@ -0,0 +1,10 @@ +import { ExtractDefaultPropTypes, PropType } from 'vue'; + +export const selectProps = { + // 双向绑定值 + modelValue: { + type: [String, Number, Boolean] as PropType, + }, +}; + +export type SelectProps = ExtractDefaultPropTypes; diff --git a/opendesign/select/src/select.tsx b/opendesign/select/src/select.tsx new file mode 100644 index 0000000000000000000000000000000000000000..5cb2ef63445e4ab9d0b043965b45d64e54fb5054 --- /dev/null +++ b/opendesign/select/src/select.tsx @@ -0,0 +1,16 @@ +// import { defineComponent } from 'vue'; +// import { selectProps } from './select-types'; + +// export default defineComponent({ +// name: 'OSelect', +// props: selectProps, +// setup() { +// return () => { +// return ( +//
+// +//
+// ); +// }; +// }, +// }); diff --git a/opendesign/style/_animation.scss b/opendesign/style/_animation.scss new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/opendesign/style/_color.scss b/opendesign/style/_color.scss new file mode 100644 index 0000000000000000000000000000000000000000..2d7e2d3ffcafd505abee7ca3c7ce278ccadbadc4 --- /dev/null +++ b/opendesign/style/_color.scss @@ -0,0 +1,167 @@ +// 颜色 +:root { + /** + * 基础色盘 + */ + + // 交通紫 + --o-color-trafficpurple1: #2d0a60; + --o-color-trafficpurple2: #420f8e; + --o-color-trafficpurple3: #5813bc; + --o-color-trafficpurple4: #6e1be8; + --o-color-trafficpurple5: #7d32ea; + --o-color-trafficpurple6: #ba3ff7; + --o-color-trafficpurple7: #a358ff; + --o-color-trafficpurple8: #bd72ff; + --o-color-trafficpurple9: #d68bff; + --o-color-trafficpurple10: #e1abff; + + // 中性色 + --o-color-neutral1: #121212; + --o-color-neutral2: #151515; + --o-color-neutral3: #2d2d2d; + --o-color-neutral4: #3f3f3f; + --o-color-neutral5: #555555; + --o-color-neutral6: #707070; + --o-color-neutral7: #848484; + --o-color-neutral8: #999999; + --o-color-neutral9: #b2b2b2; + --o-color-neutral10: #cccccc; + --o-color-neutral11: #e5e5e5; + + // 红色 + --o-color-red1: #850d09; + --o-color-red2: #b4110c; + --o-color-red3: #e4160f; + --o-color-red4: #f13b35; + --o-color-red5: #f3524d; + --o-color-red6: #ff5f5a; + --o-color-red7: #ff7873; + --o-color-red8: #ff928d; + --o-color-red9: #ffaba6; + --o-color-red10: #fabab8; + + // 黄色 + --o-color-yellow1: #754c01; + --o-color-yellow2: #a86d01; + --o-color-yellow3: #dabe01; + --o-color-yellow4: #feaa11; + --o-color-yellow5: #feb32a; + --o-color-yellow6: #ffc037; + --o-color-yellow7: #ffd950; + --o-color-yellow8: #fff36a; + --o-color-yellow9: #ffff83; + --o-color-yellow10: #ffe1aa; + + // 绿色 + --o-color-green1: #1f370f; + --o-color-green2: #355f1a; + --o-color-green3: #4b8725; + --o-color-green4: #62af30; + --o-color-green5: #6dc335; + --o-color-green6: #7ad042; + --o-color-green7: #93e95b; + --o-color-green8: #adff75; + --o-color-green9: #c6ff8e; + --o-color-green10: #c5e7ae; + + // 橙色 + --o-color-orange1: #9b370e; + --o-color-orange2: #b54f00; + --o-color-orange3: #e86600; + --o-color-orange4: #ff801c; + --o-color-orange5: #ff8e36; + --o-color-orange6: #ff9b43; + --o-color-orange7: #ffb45c; + --o-color-orange8: #ffce76; + --o-color-orange9: #ffcf8f; + --o-color-orange10: #ffd2af; + + // 灰蓝色 + --o-color-greyblue1: #e5e8f0; + --o-color-greyblue2: #f7f8fa; + --o-color-greyblue3: #f5f6f8; + + // 灰黑色 + --o-color-greyblack1: #1e1e1e; + --o-color-greyblack2: #242424; + --o-color-greyblack3: #2e2e2e; + --o-color-greyblack4: #383838; + + // 白色 + --o-color-white: #ffffff; + + // 黑色 + --o-color-black: #000000; + + // 透明 + --o-color-transparent: transparent; + + /** + * 状态颜色 && 功能颜色 + */ + + // 成功色 + --o-color-success1: var(--o-color-green5); // normal + --o-color-success2: var(--o-color-green7); // hover + --o-color-success3: var(--o-color-green10); // disabled + + // 告警色 + --o-color-warning1: var(--o-color-orange5); // normal + --o-color-warning2: var(--o-color-orange7); // hover + --o-color-warning3: var(--o-color-orange10); // disabled + + // 错误色 + --o-color-error1: var(--o-color-red5); // normal + --o-color-error2: var(--o-color-red7); // hover + --o-color-error3: var(--o-color-red10); // disabled + + // 品牌色 + --o-color-brand1: var(--o-color-trafficpurple5); // 常规、文字 + --o-color-brand2: var(--o-color-trafficpurple8); // 悬浮 + --o-color-brand3: var(--o-color-trafficpurple4); // 确认 + --o-color-brand4: var(--o-color-trafficpurple6); // 特殊场景 + --o-color-brand5: var(--o-color-trafficpurple10); // 一般禁用 + --o-color-brand6: var(--o-color-trafficpurple10); // 文字禁用,暂和一般禁用保持一致 + + // 文字颜色 + --o-color-text1: var(--o-color-black); // 强调/正文标题 黑色 + --o-color-text2: var(--o-color-white); // 强调/正文标题 白色 + --o-color-text3: var(--o-color-neutral4); // 次强调/正文标题 + --o-color-text4: var(--o-color-neutral6); // 次要信息/正文 + --o-color-text5: var(--o-color-neutral11); // 置灰信息 + --o-color-text-secondary: var(--o-color-neutral5); // 次级文字颜色 + + // 背景色 + --o-color-bg1: var(--o-color-greyblue3); // 整体背景色 + --o-color-bg2: var(--o-color-white); // 一级容器背景色 + --o-color-bg3: var(--o-color-greyblue2); // 二级容器背景色 + --o-color-bg4: var(--o-color-greyblue1); // 三级容器背景色 + --o-color-bg5: var(--o-color-white); // 弹出框、tooltip背景色 + --o-color-bg6: rgba(0, 0, 0, 0.5); // 蒙层 + --o-color-bg-secondary: var(--o-color-neutral11); // 次级颜色背景颜色 + + // 链接色 + --o-color-link1: var(--o-color-trafficpurple5); // 常规 + --o-color-link2: var(--o-color-trafficpurple8); // 悬浮 + --o-color-link3: var(--o-color-trafficpurple4); // 点击 + --o-color-link4: var(--o-color-trafficpurple6); // 特殊场景 + --o-color-link5: var(--o-color-trafficpurple10); // 一般禁用 + --o-color-link6: var(--o-color-trafficpurple10); // 文字禁用,暂和一般禁用保持一致 + + // 边框颜色 + --o-color-border1: var(--o-color-neutral6); + --o-color-border2: var(--o-color-neutral11); + --o-color-border3: var(--o-color-trafficpurple5); + + // 分割线颜色 + --o-color-division1: var(--o-color-neutral11); + + // 填充色,用于阴影容器背景 + --o-color-fill1: var(--o-color-white); // SL1 一级投影容器背景,应用于默认状态的卡片、楼层、导航栏、组件里局部投影背景等 + --o-color-fill2: var(--o-color-white); // SL2 二级投影容器背景,应用于卡片、组件里局部投影等 + --o-color-fill2_hover: var(--o-color-white); // SL2-hover 升起投影容器背景,应用于悬停状态的卡片等,是SL2的激活态 + --o-color-fill3: var(--o-color-white); // SL3 三级投影容器背景,应用于一级投影上的卡片、组件等 + --o-color-fill4: var(--o-color-white); // SL4 覆盖阴影容器背景,应用于信息提示【tips、活动进入按钮等】等投影容器 + --o-color-fill5: var(--o-color-white); // SL5 弹出阴影容器背景,应用于模态弹窗投影 +} diff --git a/opendesign/style/_font.scss b/opendesign/style/_font.scss new file mode 100644 index 0000000000000000000000000000000000000000..56116fef4f7959919bfd44ce074a6761428aaa17 --- /dev/null +++ b/opendesign/style/_font.scss @@ -0,0 +1,26 @@ +// 字体 +:root { + // 字体font-size + --o-font-size-h1: 64px; + --o-font-size-h2: 54px; + --o-font-size-h3: 36px; + --o-font-size-h4: 28px; + --o-font-size-h5: 24px; + --o-font-size-h6: 20px; + --o-font-size-h7: 18px; + --o-font-size-h8: 16px; + --o-font-size-text: 14px; + --o-font-size-tip: 12px; + + // 字体line-height + --o-line-height-h1: 84px; + --o-line-height-h2: 76px; + --o-line-height-h3: 48px; + --o-line-height-h4: 36px; + --o-line-height-h5: 32px; + --o-line-height-h6: 28px; + --o-line-height-h7: 26px; + --o-line-height-h8: 24px; + --o-line-height-text: 22px; + --o-line-height-tip: 18px; +} diff --git a/opendesign/style/_shadow.scss b/opendesign/style/_shadow.scss new file mode 100644 index 0000000000000000000000000000000000000000..78dcd8d96a0a483060378c3cdb1dd4e6b7e80178 --- /dev/null +++ b/opendesign/style/_shadow.scss @@ -0,0 +1,9 @@ +// 阴影,注:SL2有hover投影 +:root { + --o-shadow-l1: 0 1px 5px rgba(45, 47, 51, 0.1); // SL1 一级投影,应用于楼层、导航栏、组件里局部投影等, + --o-shadow-l2: 0 1px 5px rgba(45, 47, 51, 0.1); // SL2-normal 二级投影,应用于卡片、组件里局部投影等 + --o-shadow-l2_hover: 0 6px 18px rgba(0, 47, 167, 0.14); // SL2-hover 升起投影,应用于悬停状态的卡片等,是SL2的激活态 + --o-shadow-l3: 0 6px 18px rgba(45, 47, 51, 0.14); // SL3 三级投影,应用于一级投影上的卡片、组件等 + --o-shadow-l4: 0 10px 32px rgba(45, 47, 51, 0.18); // SL4 覆盖阴影,应用于信息提示【tips、活动进入按钮等】等投影 + --o-shadow-l5: 0 12px 42px rgba(45, 47, 51, 0.24); // SL5 弹出阴影,应用于模态弹窗投影 +} diff --git a/opendesign/style/_spacing.scss b/opendesign/style/_spacing.scss new file mode 100644 index 0000000000000000000000000000000000000000..e3dcd5bfbe1370420420c90af1683fed7df3393f --- /dev/null +++ b/opendesign/style/_spacing.scss @@ -0,0 +1,13 @@ +// 间距 +:root { + --o-spacing-h1: 64px; + --o-spacing-h2: 40px; + --o-spacing-h3: 32px; + --o-spacing-h4: 24px; + --o-spacing-h5: 16px; + --o-spacing-h6: 12px; + --o-spacing-h7: 10px; + --o-spacing-h8: 8px; + --o-spacing-h9: 6px; + --o-spacing-h10: 4px; +} diff --git a/opendesign/style/variable.scss b/opendesign/style/variable.scss new file mode 100644 index 0000000000000000000000000000000000000000..c7242722c856dd379092fd4ea79825a664a01b7b --- /dev/null +++ b/opendesign/style/variable.scss @@ -0,0 +1,4 @@ +@import './_color.scss'; +@import './_shadow.scss'; +@import './_font.scss'; +@import './_spacing.scss'; diff --git a/opendesign/switch/OSwitch.vue b/opendesign/switch/OSwitch.vue new file mode 100644 index 0000000000000000000000000000000000000000..ee3fea99196e7d7be3225a32b5c73f3300d82eae --- /dev/null +++ b/opendesign/switch/OSwitch.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/opendesign/switch/index.ts b/opendesign/switch/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..ae6cb44779dfc31495ed2a6a23b8401c850c0ba5 --- /dev/null +++ b/opendesign/switch/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Switch from './OSwitch.vue'; +Switch.install = function (app: App) { + app.component('OSwitch', Switch); +}; + +export { Switch }; diff --git a/opendesign/table/OTable.vue b/opendesign/table/OTable.vue new file mode 100644 index 0000000000000000000000000000000000000000..8978f0ab639cffa213e93f60c6ac9dee3706f123 --- /dev/null +++ b/opendesign/table/OTable.vue @@ -0,0 +1,70 @@ + + + + + diff --git a/opendesign/table/OTableColumn.vue b/opendesign/table/OTableColumn.vue new file mode 100644 index 0000000000000000000000000000000000000000..982cabee1cd304c63253fc7d8908819392987141 --- /dev/null +++ b/opendesign/table/OTableColumn.vue @@ -0,0 +1,11 @@ + + + + + diff --git a/opendesign/table/index.ts b/opendesign/table/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..839f04b1bd57afaf223481e118399e5550ac776b --- /dev/null +++ b/opendesign/table/index.ts @@ -0,0 +1,10 @@ +import type { App } from 'vue'; +import Table from './OTable.vue'; +import TableColumn from './OTableColumn.vue'; +Table.install = function (app: App) { + app.component('OTable', Table); +}; +TableColumn.install = function (app: App) { + app.component('OTableColumn', TableColumn); +}; +export { Table, TableColumn }; diff --git a/opendesign/tabs/OTabPane.vue b/opendesign/tabs/OTabPane.vue new file mode 100644 index 0000000000000000000000000000000000000000..074a678f34065aefb95d502397de207d15573f8c --- /dev/null +++ b/opendesign/tabs/OTabPane.vue @@ -0,0 +1,11 @@ + + + + diff --git a/opendesign/tabs/OTabs.vue b/opendesign/tabs/OTabs.vue new file mode 100644 index 0000000000000000000000000000000000000000..512563e966a82be5291cac6f858b727dab6896c5 --- /dev/null +++ b/opendesign/tabs/OTabs.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/opendesign/tabs/index.ts b/opendesign/tabs/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..7de648bb126b2b9658563f34bd70e83ec1cee1b3 --- /dev/null +++ b/opendesign/tabs/index.ts @@ -0,0 +1,11 @@ +import type { App } from 'vue'; +import Tabs from './OTabs.vue'; +import TabPane from './OTabPane.vue'; +Tabs.install = function (app: App) { + app.component('OTabs', Tabs); +}; +TabPane.install = function (app: App) { + app.component('OTabPane', TabPane); +}; + +export { Tabs, TabPane }; diff --git a/opendesign/tag/index.ts b/opendesign/tag/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..e966d8fb2abb17c6023d1db8a44c72661ea8ee9f --- /dev/null +++ b/opendesign/tag/index.ts @@ -0,0 +1,8 @@ +import type { App } from 'vue'; +import Tag from './src/tag'; + +Tag.install = function (app: App) { + app.component(Tag.name, Tag); +}; + +export { Tag }; diff --git a/opendesign/tag/src/tag-types.ts b/opendesign/tag/src/tag-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..e2021f6f60945b4f1906039941d84fc8080ff07c --- /dev/null +++ b/opendesign/tag/src/tag-types.ts @@ -0,0 +1,25 @@ +import { ExtractDefaultPropTypes, PropType } from 'vue'; +import { SizeType } from '../../_utils/common'; + +type TagType = 'outline' | 'primary' | 'secondary' | 'text'; + +export const tagProps = { + size: { + type: String as PropType, + default: 'medium', + }, + type: { + type: String as PropType, + default: 'outline', + }, + checked: { + type: Boolean, + default: false, + }, + checkable: { + type: Boolean, + default: false, + }, +}; + +export type TagProps = ExtractDefaultPropTypes; diff --git a/opendesign/tag/src/tag.scss b/opendesign/tag/src/tag.scss new file mode 100644 index 0000000000000000000000000000000000000000..546986dd9c6fe77be6fb1166dba3313b77fd0bd1 --- /dev/null +++ b/opendesign/tag/src/tag.scss @@ -0,0 +1,99 @@ +@import './var.scss'; + +.o-tag { + padding: var(--o-tag-padding); + font-size: var(--o-tag-font-size); + line-height: var(--o-tag-line-height); + color: var(--o-tag-font-color); + border: var(--o-tag-border); + outline: none; + user-select: none; + cursor: default; + display: inline-block; + + &:active { + @media screen and (min-width: 1100px) { + color: var(--o-tag-font-color_active); + border: var(--o-tag-font-color_active); + } + } + + &.o-tag-type-primary { + color: var(--o-tag-font-color-primary); + border: var(--o-tag-border-primary); + &:hover { + @media screen and (min-width: 1100px) { + color: var(--o-color-brand2); + border: var(--o-tag-border-primary_hover); + } + } + &.o-tag-checked { + position: relative; + .checked-icon { + position: absolute; + bottom: 0; + right: 0; + width: 16px; + height: 16px; + &::after { + border: 8px solid transparent; + border-right: 8px solid var(--o-color-brand1); + border-bottom: 8px solid var(--o-color-brand1); + content: ''; + width: 16px; + height: 16px; + position: absolute; + bottom: -1px; + right: -1px; + display: block; + z-index: 1; + } + svg { + width: 9px; + height: 9px; + color: #fff; + display: block; + position: absolute; + bottom: 0; + right: 0; + z-index: 2; + } + } + } + } + &.o-tag-checkable { + cursor: pointer; + } + &.o-tag-type-secondary { + color: var(--o-tag-font-color-secondary); + border: var(--o-tag-border-secondary); + line-height: var(--o-tag-small-line-height); + padding: var(--o-tag-secondary-padding); + background: var(--o-tag-bg-color-secondary); + } + + &.o-tag-type-text { + color: var(--o-tag-font-color); + border: var(--o-tag-border-text); + background: none; + &:hover, + &:active { + @media screen and (min-width: 1100px) { + color: var(--o-tag-font-color_hover); + } + } + } + &.o-tag-size-small { + padding: var(--o-tag-small-padding); + font-size: var(--o-tag-small-font-size); + line-height: var(--o-tag-small-line-height); + + &:hover, + &:active { + @media screen and (min-width: 1100px) { + color: var(--o-tag-font-color); + border: var(--o-tag-border); + } + } + } +} diff --git a/opendesign/tag/src/tag.tsx b/opendesign/tag/src/tag.tsx new file mode 100644 index 0000000000000000000000000000000000000000..6db151cea83381480c91733899186a40144ae0b8 --- /dev/null +++ b/opendesign/tag/src/tag.tsx @@ -0,0 +1,50 @@ +import { computed, defineComponent, toRefs } from 'vue'; +import { tagProps, TagProps } from './tag-types'; +import './tag.scss'; + +export default defineComponent({ + name: 'OTag', + props: tagProps, + emits: ['click'], + setup(props: TagProps, { emit, slots }) { + const { size, type, checked, checkable } = toRefs(props); + + const classNames = computed(() => { + return { + 'o-tag': true, + [`o-tag-size-${size.value}`]: true, + [`o-tag-type-${type.value}`]: true, + 'o-tag-checked': checked.value, + 'o-tag-checkable': checkable.value, + }; + }); + + const onClick = (e: MouseEvent) => { + emit('click', e); + }; + + return () => { + return ( + + {slots.default?.()} + {checked.value && type.value === 'primary' && ( + + + + + + )} + + ); + }; + }, +}); diff --git a/opendesign/tag/src/var.scss b/opendesign/tag/src/var.scss new file mode 100644 index 0000000000000000000000000000000000000000..0facd39668816325ecad9a94095041c16531f3fd --- /dev/null +++ b/opendesign/tag/src/var.scss @@ -0,0 +1,49 @@ +.o-tag { + // 文字颜色 + --o-tag-font-color: var(--o-color-text4); + --o-tag-font-color-primary: var(--o-color-brand1); + --o-tag-font-color-secondary: var(--o-color-text3); + // 文字颜色 hover态,注:只有类型为outline的按钮hover时有文字颜色变化 + --o-tag-font-color_hover: var(--o-color-brand2); + // 文字颜色 avtive态,注:只有类型为outline的按钮active时有文字颜色变化 + --o-tag-font-color_active: var(--o-color-brand3); + + // 背景颜色 + --o-tag-bg-color: var(--o-color-transparent); + --o-tag-bg-color-primary: var(--o-color-brand1); + --o-tag-bg-color-secondary: var(--o-color-secondary); + --o-tag-bg-color-text: var(--o-color-transparent); + + // 背景颜色 hover态 + --o-tag-bg-color_hover: var(--o-color-transparent); + --o-tag-bg-color-primary_hover: var(--o-color-brand2); + + // 背景颜色 active态 + --o-tag-bg-color_active: var(--o-color-transparent); + --o-tag-bg-color-primary_active: var(--o-color-brand3); + + // border + --o-tag-border: 1px solid var(--o-color-border1); + --o-tag-border-primary: 1px solid var(--o-color-brand1); + --o-tag-border-secondary: 1px solid var(--o-color-transparent); + --o-tag-border-text: 1px solid var(--o-color-transparent); + // border hover态 + --o-tag-border_hover: 1px solid var(--o-color-brand2); + --o-tag-border-primary_hover: 1px solid var(--o-color-brand2); + + // font-size + --o-tag-font-size: var(--o-font-size-text); + --o-tag-small-font-size: var(--o-font-size-tip); + + // line-height + --o-tag-line-height: var(--o-line-height-text); + --o-tag-small-line-height: var(--o-line-height-tip); + + // padding + --o-tag-padding: 3px 12px; + --o-tag-small-padding: 0 8px; + --o-tag-secondary-padding: 2px 4px; + + // 特殊背景 + --o-tag-bg-color-secondary: linear-gradient(225deg, #feb32a 0%, #f6d365 100%); +} diff --git a/opendesign/timeline/index.ts b/opendesign/timeline/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..742ea80cb05308becec353ddc8f0c7b2620f0a68 --- /dev/null +++ b/opendesign/timeline/index.ts @@ -0,0 +1,8 @@ +import type { App } from 'vue'; +import Timeline from './src/timeline'; + +Timeline.install = function (app: App) { + app.component(Timeline.name, Timeline); +}; + +export { Timeline }; diff --git a/opendesign/timeline/src/timeline-types.ts b/opendesign/timeline/src/timeline-types.ts new file mode 100644 index 0000000000000000000000000000000000000000..6b400ff1b3d2fb9cb8e83fcbb4681e4d0faa6ed6 --- /dev/null +++ b/opendesign/timeline/src/timeline-types.ts @@ -0,0 +1,18 @@ +import { ExtractDefaultPropTypes } from 'vue'; + +export const timelineProps = { + leftArrow: { + type: Boolean, + default: true, + }, + rightArrow: { + type: Boolean, + default: true, + }, + modelValue: { + type: String, + default: '', + }, +}; + +export type TimelineProps = ExtractDefaultPropTypes; diff --git a/opendesign/timeline/src/timeline.scss b/opendesign/timeline/src/timeline.scss new file mode 100644 index 0000000000000000000000000000000000000000..f019985ed2f7e4d7b26b7940891fc44b67fab095 --- /dev/null +++ b/opendesign/timeline/src/timeline.scss @@ -0,0 +1,73 @@ +@import './var.scss'; +.o-timeline { + position: relative; + + &-list { + display: flex; + justify-content: space-evenly; + position: relative; + + &::after { + width: 100%; + height: 2px; + background-color: var(--o-timeline-background-color); + content: ''; + display: block; + position: absolute; + top: 43px; + z-index: 2; + } + } + + &-item { + position: relative; + z-index: 3; + list-style: none; + text-align: center; + cursor: pointer; + } + + &-day { + font-size: var(--o-timeline-font-size); + color: var(--o-timeline-font-color); + line-height: var(--o-timeline-line-height); + margin-bottom: var(--o-timeline-spacing-word); + transition: var(--o-timeline-transition); + } + &-icon { + cursor: pointer; + width: var(--o-timeline-font-size-icon); + height: var(--o-timeline-font-size-icon); + color: var(--o-timeline-font-color); + display: inline-block; + background-color: var(--o-timeline-background-icon); + transition: var(--o-timeline-transition); + } + .active { + .o-timeline-day { + color: var(--o-timeline-font-color-active); + } + .o-timeline-icon { + color: var(--o-timeline-font-color-active); + } + } + + &-left-arrow { + cursor: pointer; + position: absolute; + top: 28px; + left: -10px; + z-index: 4; + color: var(--o-timeline-background-color); + font-size: var(--o-timeline-font-size-icon); + } + &-right-arrow { + cursor: pointer; + position: absolute; + top: 28px; + right: -10px; + z-index: 4; + color: var(--o-timeline-background-color); + font-size: var(--o-timeline-font-size-icon); + } +} diff --git a/opendesign/timeline/src/timeline.tsx b/opendesign/timeline/src/timeline.tsx new file mode 100644 index 0000000000000000000000000000000000000000..3ae8313e751faf3223bf506770d42b177e2d814a --- /dev/null +++ b/opendesign/timeline/src/timeline.tsx @@ -0,0 +1,148 @@ +import { defineComponent, ref, Ref, toRefs, onMounted } from 'vue'; +import { timelineProps, TimelineProps } from './timeline-types'; +import IconLeft from '~icons/app/icon-chevron-left.svg'; +import IconRight from '~icons/app/icon-chevron-right'; +import IconChecked from '~icons/app/icon-checked.svg'; +import IconUnchecked from '~icons/app/icon-unchecked.svg'; +import './timeline.scss'; + +export default defineComponent({ + name: 'OTimeline', + props: timelineProps, + emits: ['update:modelValue'], + setup(props: TimelineProps, { emit }) { + const { leftArrow, rightArrow, modelValue } = toRefs(props); + // 六月 + const SPLITEMONTH = 6; + // 时间线列表 + const timeList: Ref = ref([]); + // 命中的tab + const activeTab = ref(5); + // 最左与最右阈值 + const leftThreshold: string = '2020-10'; + const rightThreshold: Ref = ref(''); + // 时间线列表赋值 + const changeDate = (year: number, month: number): Array => { + const result: Array = []; + if (month >= SPLITEMONTH) { + for (let i = 0; i < 6; i++) { + result.push( + year + + '-' + + (month - (6 - i - 1) >= 10 + ? month - (6 - i - 1) + : '0' + (month - (6 - i - 1))) + ); + } + } else { + // last year + for (let i = 1; i <= 6 - month; i++) { + result.push( + year - + 1 + + '-' + + (6 + i + month >= 10 ? 6 + i + month : '0' + (6 + i + month)) + ); + } + // this year + for (let i = 1; i < month + 1; i++) { + result.push(year + '-0' + i); + } + } + return result; + }; + // 初始化时间线列表赋值 + const initDate = () => { + const modelDate = !isNaN(new Date(modelValue.value).getTime()) + ? new Date(modelValue.value) + : new Date(); + const modelYear = modelDate.getFullYear(); + const _modelYear = + modelDate.getFullYear() === 2020 ? 2021 : modelDate.getFullYear(); + const modelMonth = + (modelYear === 2021 && modelDate.getMonth() + 1 < 3) || + modelYear === 2020 + ? 3 + : modelDate.getMonth() + 1; + const year = new Date().getFullYear(); + const month = new Date().getMonth() + 1; + rightThreshold.value = year + '-' + (month >= 10 ? month : '0' + month); + timeList.value = changeDate(_modelYear, modelMonth); + emit('update:modelValue', timeList.value[activeTab.value]); + }; + // 点击时间线tab + const useClickTab = (index: number): void => { + activeTab.value = index; + emit('update:modelValue', timeList.value[activeTab.value]); + }; + // 点击左侧按钮 + const useClickLeft = () => { + const date = new Date(timeList.value[4]); + const year = date.getFullYear(); + const month = date.getMonth() + 1; + timeList.value = changeDate(year, month); + emit('update:modelValue', timeList.value[activeTab.value]); + }; + // 点击右侧按钮 + const useClickRight = () => { + const date = new Date(timeList.value[5]); + const year = date.getFullYear(); + const month = date.getMonth() + 2; + timeList.value = + month <= 12 ? changeDate(year, month) : changeDate(year + 1, 1); + emit('update:modelValue', timeList.value[activeTab.value]); + }; + + onMounted(() => { + initDate(); + }); + + return () => { + return ( +
+ {leftArrow && + leftArrow.value && + timeList.value[0] !== leftThreshold ? ( + useClickLeft()} + class="o-timeline-left-arrow" + > + ) : ( + '' + )} +
    + {timeList && + timeList.value.map((item, index) => { + return ( +
  • useClickTab(index)} + > +

    {item}

    + {index === activeTab.value ? ( + + ) : ( + + )} +
  • + ); + })} +
+ {rightArrow && + rightArrow.value && + timeList.value[5] !== rightThreshold.value ? ( + useClickRight()} + > + ) : ( + '' + )} +
+ ); + }; + }, +}); diff --git a/opendesign/timeline/src/var.scss b/opendesign/timeline/src/var.scss new file mode 100644 index 0000000000000000000000000000000000000000..d75006df4825ce6892bb5aa8419ca235ab600340 --- /dev/null +++ b/opendesign/timeline/src/var.scss @@ -0,0 +1,22 @@ +.o-timeline { + // 背景颜色 + --o-timeline-background-color: var(--o-color-neutral11); + --o-timeline-background-icon: var(--o-color-bg1); + + // 文字颜色 + --o-timeline-font-color-active: var(--o-color-brand1); + --o-timeline-font-color: var(--o-color-text4); + + // font-size + --o-timeline-font-size: var(--o-font-size-h6); + --o-timeline-font-size-icon: var(--o-font-size-h5); + + // line-height + --o-timeline-line-height: var(--o-line-height-h6); + + // 动画 + --o-timeline-transition: all 0.2s; + + // 间距 + --o-timeline-spacing-word: var(--o-spacing-h10); +} diff --git a/opendesign/tree/OTree.vue b/opendesign/tree/OTree.vue new file mode 100644 index 0000000000000000000000000000000000000000..31034f608442509deb1417f05732ae69bcc29abe --- /dev/null +++ b/opendesign/tree/OTree.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/opendesign/tree/index.ts b/opendesign/tree/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..f1d3c7569f3b75656f38940f2e78e727d20750b7 --- /dev/null +++ b/opendesign/tree/index.ts @@ -0,0 +1,7 @@ +import type { App } from 'vue'; +import Tree from './OTree.vue'; +Tree.install = function (app: App) { + app.component('OTree', Tree); +}; + +export { Tree }; diff --git a/package.json b/package.json new file mode 100644 index 0000000000000000000000000000000000000000..00a702d301f050ba73893899d7b149d7946a4981 --- /dev/null +++ b/package.json @@ -0,0 +1,52 @@ +{ + "name": "quick-issue", + "version": "0.0.1", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview", + "lint": "eslint \"src/**/*.{js,ts,vue,jsx,tsx}\"", + "fix": "eslint --fix \"src/**/*.{js,ts,vue,jsx,tsx}\"", + "lint:components": "eslint \"opendesign/**/*.{js,ts,vue,jsx,tsx}\"", + "prepare": "husky install" + }, + "dependencies": { + "@amap/amap-jsapi-loader": "^1.0.1", + "@kangc/v-md-editor": "^2.3.15", + "axios": "^1.4.0", + "crypto-js": "^4.1.1", + "element-plus": "^2.3.5", + "js-base64": "^3.7.5", + "lodash-es": "^4.17.21", + "opendesign": "link:opendesign", + "pinia": "^2.1.3", + "prismjs": "^1.29.0", + "vue": "^3.3.4", + "vue-i18n": "^9.2.2", + "vue-router": "^4.2.1", + "vue3-slide-verify": "^1.1.4" + }, + "devDependencies": { + "@types/lodash-es": "^4.17.7", + "@types/node": "^18.16.14", + "@types/prismjs": "^1.26.0", + "@vitejs/plugin-vue": "^3.2.0", + "@vitejs/plugin-vue-jsx": "^2.1.1", + "@vue/eslint-config-prettier": "^7.1.0", + "@vue/eslint-config-typescript": "^11.0.3", + "eslint": "^8.41.0", + "eslint-plugin-vue": "^9.13.0", + "husky": "^8.0.3", + "lint-staged": "^13.2.2", + "prettier": "^2.8.8", + "sass": "^1.62.1", + "typescript": "^4.9.5", + "unplugin-auto-import": "^0.11.5", + "unplugin-element-plus": "^0.4.1", + "unplugin-icons": "^0.14.15", + "unplugin-vue-components": "^0.22.12", + "vite": "^3.2.6", + "vue-tsc": "^0.40.13" + } +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000000000000000000000000000000000000..bc3a32d9c5e25d16fd8f0733b4272ea47971c7c2 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,4880 @@ +lockfileVersion: 5.4 + +specifiers: + '@amap/amap-jsapi-loader': ^1.0.1 + '@kangc/v-md-editor': ^2.3.15 + '@types/lodash-es': ^4.17.7 + '@types/node': ^18.16.14 + '@types/prismjs': ^1.26.0 + '@vitejs/plugin-vue': ^3.2.0 + '@vitejs/plugin-vue-jsx': ^2.1.1 + '@vue/eslint-config-prettier': ^7.1.0 + '@vue/eslint-config-typescript': ^11.0.3 + axios: ^1.4.0 + crypto-js: ^4.1.1 + element-plus: ^2.3.5 + eslint: ^8.41.0 + eslint-plugin-vue: ^9.13.0 + husky: ^8.0.3 + js-base64: ^3.7.5 + lint-staged: ^13.2.2 + lodash-es: ^4.17.21 + opendesign: link:opendesign + pinia: ^2.1.3 + prettier: ^2.8.8 + prismjs: ^1.29.0 + sass: ^1.62.1 + typescript: ^4.9.5 + unplugin-auto-import: ^0.11.5 + unplugin-element-plus: ^0.4.1 + unplugin-icons: ^0.14.15 + unplugin-vue-components: ^0.22.12 + vite: ^3.2.6 + vue: ^3.3.4 + vue-i18n: ^9.2.2 + vue-router: ^4.2.1 + vue-tsc: ^0.40.13 + vue3-slide-verify: ^1.1.4 + +dependencies: + '@amap/amap-jsapi-loader': 1.0.1 + '@kangc/v-md-editor': 2.3.15_vue@3.3.4 + axios: 1.4.0 + crypto-js: 4.1.1 + element-plus: 2.3.5_vue@3.3.4 + js-base64: 3.7.5 + lodash-es: 4.17.21 + opendesign: link:opendesign + pinia: 2.1.3_typescript@4.9.5+vue@3.3.4 + prismjs: 1.29.0 + vue: 3.3.4 + vue-i18n: 9.2.2_vue@3.3.4 + vue-router: 4.2.1_vue@3.3.4 + vue3-slide-verify: 1.1.4 + +devDependencies: + '@types/lodash-es': 4.17.7 + '@types/node': 18.16.14 + '@types/prismjs': 1.26.0 + '@vitejs/plugin-vue': 3.2.0_vite@3.2.6+vue@3.3.4 + '@vitejs/plugin-vue-jsx': 2.1.1_vite@3.2.6+vue@3.3.4 + '@vue/eslint-config-prettier': 7.1.0_qokqbt3mojjgfarfkyl2cug5vu + '@vue/eslint-config-typescript': 11.0.3_bobqty5xbmhlsbxniqz7dnethy + eslint: 8.41.0 + eslint-plugin-vue: 9.13.0_eslint@8.41.0 + husky: 8.0.3 + lint-staged: 13.2.2 + prettier: 2.8.8 + sass: 1.62.1 + typescript: 4.9.5 + unplugin-auto-import: 0.11.5 + unplugin-element-plus: 0.4.1_vite@3.2.6 + unplugin-icons: 0.14.15 + unplugin-vue-components: 0.22.12_vue@3.3.4 + vite: 3.2.6_3cl3pib2kx7jaftbqhg3ux7t34 + vue-tsc: 0.40.13_typescript@4.9.5 + +packages: + + /@amap/amap-jsapi-loader/1.0.1: + resolution: {integrity: sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==} + dev: false + + /@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.18 + 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.2: + resolution: {integrity: sha512-vy9fM3pIxZmX07dL+VX1aZe7ynZ+YyB0jY+jE6r3hOK6GNY2t6W8rzpFC4tgpbXUYABkFQwgJq2XYXlxbXAI0g==} + dev: true + + /@babel/code-frame/7.21.4: + resolution: {integrity: sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.18.6 + dev: true + + /@babel/compat-data/7.21.7: + resolution: {integrity: sha512-KYMqFYTaenzMK4yUtf4EW9wc4N9ef80FsbMtkwool5zpwl4YrT1SdWYSTRcT94KO4hannogdS+LxY7L+arP3gA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.21.8: + resolution: {integrity: sha512-YeM22Sondbo523Sz0+CirSPnbj9bG3P0CdHcBZdqUuaeOaYEFbOLoGU7lebvGP6P5J/WE9wOn7u7C4J9HvS1xQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.5 + '@babel/helper-compilation-targets': 7.21.5_@babel+core@7.21.8 + '@babel/helper-module-transforms': 7.21.5 + '@babel/helpers': 7.21.5 + '@babel/parser': 7.21.8 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.5 + '@babel/types': 7.21.5 + convert-source-map: 1.9.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.21.5: + resolution: {integrity: sha512-SrKK/sRv8GesIW1bDagf9cCG38IOMYZusoe1dfg0D8aiUe3Amvoj1QtjTPAWcfrZFvIwlleLb0gxzQidL9w14w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + + /@babel/helper-annotate-as-pure/7.18.6: + resolution: {integrity: sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-compilation-targets/7.21.5_@babel+core@7.21.8: + resolution: {integrity: sha512-1RkbFGUKex4lvsB9yhIfWltJM5cZKUftB2eNajaDv3dCMEp49iBG0K14uH8NnX9IPux2+mK7JGEOB0jn48/J6w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.21.7 + '@babel/core': 7.21.8 + '@babel/helper-validator-option': 7.21.0 + browserslist: 4.21.5 + lru-cache: 5.1.1 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin/7.21.8_@babel+core@7.21.8: + resolution: {integrity: sha512-+THiN8MqiH2AczyuZrnrKL6cAxFRRQDKW9h1YkBvbgKmAm6mwiacig1qT73DHIWMGo40GRnsEfN3LA+E6NtmSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-member-expression-to-functions': 7.21.5 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-replace-supers': 7.21.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-split-export-declaration': 7.18.6 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-environment-visitor/7.21.5: + resolution: {integrity: sha512-IYl4gZ3ETsWocUWgsFZLM5i1BYx9SoemminVEXadgLBa9TdeorzgLKm8wWLA6J1N/kT3Kch8XIk1laNzYoHKvQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-function-name/7.21.0: + resolution: {integrity: sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-hoist-variables/7.18.6: + resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-member-expression-to-functions/7.21.5: + resolution: {integrity: sha512-nIcGfgwpH2u4n9GG1HpStW5Ogx7x7ekiFHbjjFRKXbn5zUvqO9ZgotCO4x1aNbKn/x/xOUaXEhyNHCwtFCpxWg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-module-imports/7.21.4: + resolution: {integrity: sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-module-transforms/7.21.5: + resolution: {integrity: sha512-bI2Z9zBGY2q5yMHoBvJ2a9iX3ZOAzJPm7Q8Yz6YeoUjU/Cvhmi2G4QyTNyPBqqXSgTjUxRg3L0xV45HvkNWWBw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-module-imports': 7.21.4 + '@babel/helper-simple-access': 7.21.5 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/helper-validator-identifier': 7.19.1 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.5 + '@babel/types': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.18.6: + resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-plugin-utils/7.21.5: + resolution: {integrity: sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-replace-supers/7.21.5: + resolution: {integrity: sha512-/y7vBgsr9Idu4M6MprbOVUfH3vs7tsIfnVWv/Ml2xgwvyH6LTngdfbf5AdsKwkJy4zgy1X/kuNrEKvhhK28Yrg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-member-expression-to-functions': 7.21.5 + '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.5 + '@babel/types': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.21.5: + resolution: {integrity: sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers/7.20.0: + resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-split-export-declaration/7.18.6: + resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.21.5 + dev: true + + /@babel/helper-string-parser/7.21.5: + resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-option/7.21.0: + resolution: {integrity: sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helpers/7.21.5: + resolution: {integrity: sha512-BSY+JSlHxOmGsPTydUkPf1MdMQ3M81x5xGCOVgWM3G8XH77sJ292Y2oqcp0CbbgxhqBuI46iUz1tT7hqP7EfgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.5 + '@babel/types': 7.21.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.19.1 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.21.8: + resolution: {integrity: sha512-6zavDGdzG3gUqAdWvlLFfk+36RilI+Pwyuuh7HItyeScCWP3k6i8vKclAQ0bM/0y/Kz/xiwvxhMv9MgTJP5gmA==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.21.5 + + /@babel/plugin-syntax-jsx/7.21.4_@babel+core@7.21.8: + resolution: {integrity: sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-syntax-typescript/7.21.4_@babel+core@7.21.8: + resolution: {integrity: sha512-xz0D39NvhQn4t4RNsHmDnnsaQizIlUkdtYvLs8La1BlfjQ6JEwxkJGeqJMW2tAXx+q6H+WFuUTXNdYVpEya0YA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + dev: true + + /@babel/plugin-transform-typescript/7.21.3_@babel+core@7.21.8: + resolution: {integrity: sha512-RQxPz6Iqt8T0uw/WsJNReuBpWpBqs/n7mNo18sKLoTbMp+UrEekhH+pKSVC7gWz+DNjo9gryfV8YzCiT45RgMw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.21.8 + '@babel/helper-annotate-as-pure': 7.18.6 + '@babel/helper-create-class-features-plugin': 7.21.8_@babel+core@7.21.8 + '@babel/helper-plugin-utils': 7.21.5 + '@babel/plugin-syntax-typescript': 7.21.4_@babel+core@7.21.8 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/runtime/7.21.5: + resolution: {integrity: sha512-8jI69toZqqcsnqGGqwGS4Qb1VwLOEp4hz+CXPywcvjs60u3B4Pom/U/7rm4W8tMOYEB+E9wgD0mW1l3r8qlI9Q==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.11 + dev: false + + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/parser': 7.21.8 + '@babel/types': 7.21.5 + dev: true + + /@babel/traverse/7.21.5: + resolution: {integrity: sha512-AhQoI3YjWi6u/y/ntv7k48mcrCXmus0t79J9qPNlk/lAsFlCiJ047RmbfMOawySTHtywXhbXgpx/8nXMYd+oFw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.21.4 + '@babel/generator': 7.21.5 + '@babel/helper-environment-visitor': 7.21.5 + '@babel/helper-function-name': 7.21.0 + '@babel/helper-hoist-variables': 7.18.6 + '@babel/helper-split-export-declaration': 7.18.6 + '@babel/parser': 7.21.8 + '@babel/types': 7.21.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.21.5: + resolution: {integrity: sha512-m4AfNvVF2mVC/F7fDEdH2El3HzUg9It/XsCxZiOTTA3m3qYfcSVSbTfM6Q9xG+hYDniZssYhlXKKUMD5m8tF4Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.21.5 + '@babel/helper-validator-identifier': 7.19.1 + to-fast-properties: 2.0.0 + + /@braintree/sanitize-url/3.1.0: + resolution: {integrity: sha512-GcIY79elgB+azP74j8vqkiXz8xLFfIzbQJdlwOPisgbKT00tviJQuEghOXSMVxJ00HoYJbGswr4kcllUc4xCcg==} + deprecated: Potential XSS vulnerability patched in v6.0.0. + dev: false + + /@ctrl/tinycolor/3.6.0: + resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==} + engines: {node: '>=10'} + dev: false + + /@element-plus/icons-vue/2.1.0_vue@3.3.4: + resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==} + peerDependencies: + vue: ^3.2.0 + dependencies: + vue: 3.3.4 + dev: false + + /@esbuild/android-arm/0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@eslint-community/eslint-utils/4.4.0_eslint@8.41.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.41.0 + eslint-visitor-keys: 3.4.1 + dev: true + + /@eslint-community/regexpp/4.5.1: + resolution: {integrity: sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + + /@eslint/eslintrc/2.0.3: + resolution: {integrity: sha512-+5gy6OQfk+xx3q0d6jGZZC3f3KzAkXc/IanVxd1is/VIIziRqqt3ongQz0FiTUXqTk0c7aDB3OaFuKnuSoJicQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.5.2 + globals: 13.20.0 + ignore: 5.2.4 + 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.41.0: + resolution: {integrity: sha512-LxcyMGxwmTh2lY9FwHPGWOHmYFCZvbrFCBZL4FzSSsxsRPuhrYUg/49/0KDfW8tnIEaEHtfmn6+NPN+1DqaNmA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@floating-ui/core/1.2.6: + resolution: {integrity: sha512-EvYTiXet5XqweYGClEmpu3BoxmsQ4hkj3QaYA6qEnigCWffTP3vNRwBReTdrwDwo7OoJ3wM8Uoe9Uk4n+d4hfg==} + dev: false + + /@floating-ui/dom/1.2.8: + resolution: {integrity: sha512-XLwhYV90MxiHDq6S0rzFZj00fnDM+A1R9jhSioZoMsa7G0Q0i+Q4x40ajR8FHSdYDE1bgjG45mIWe6jtv9UPmg==} + dependencies: + '@floating-ui/core': 1.2.6 + dev: false + + /@humanwhocodes/config-array/0.11.8: + resolution: {integrity: sha512-UybHIJzJnR5Qc/MsD9Kr+RpO2h+/P1GhOwdiLPXK5TWk5sgTdu88bTD9UP+CKbPPh5Rni1u0GjAdYQLemG8g+g==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + 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/1.2.1: + resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + dev: true + + /@iconify/types/2.0.0: + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + dev: true + + /@iconify/utils/2.1.5: + resolution: {integrity: sha512-6MvDI+I6QMvXn5rK9KQGdpEE4mmLTcuQdLZEiX5N+uZB+vc4Yw9K1OtnOgkl8mp4d9X0UrILREyZgF1NUwUt+Q==} + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.2 + '@iconify/types': 2.0.0 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.4.3 + 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.18 + dev: true + + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + 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/sourcemap-codec/1.4.14: + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + dev: true + + /@jridgewell/sourcemap-codec/1.4.15: + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + /@jridgewell/trace-mapping/0.3.18: + resolution: {integrity: sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==} + dependencies: + '@jridgewell/resolve-uri': 3.1.0 + '@jridgewell/sourcemap-codec': 1.4.14 + dev: true + + /@kangc/v-md-editor/2.3.15_vue@3.3.4: + resolution: {integrity: sha512-tPsBJd4YwJSZK3+mbeBu9Iol9Zi3BboNr1QbDfsxVQ/4hlMgEpMT+vj3/e5FNwgBx50RIphU0j9qNLK+dgFmqA==} + peerDependencies: + '@vue/compiler-sfc': ^3.0.0 + vue: ^3.0.0 + dependencies: + '@babel/runtime': 7.21.5 + '@vuepress/markdown': 1.9.9 + codemirror: 5.65.13 + copy-to-clipboard: 3.3.3 + highlight.js: 10.7.3 + insert-text-at-cursor: 0.3.0 + katex: 0.13.24 + markdown-it: 12.3.2 + markdown-it-attrs: 4.1.6_markdown-it@12.3.2 + markdown-it-container: 3.0.0 + mermaid: 8.14.0 + prismjs: 1.29.0 + resize-observer-polyfill: 1.5.1 + vant: 3.6.11_vue@3.3.4 + vue: 3.3.4 + xss: 1.0.14 + transitivePeerDependencies: + - supports-color + dev: false + + /@mrmlnc/readdir-enhanced/2.2.1: + resolution: {integrity: sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==} + engines: {node: '>=4'} + dependencies: + call-me-maybe: 1.0.2 + glob-to-regexp: 0.3.0 + dev: false + + /@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/1.1.3: + resolution: {integrity: sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==} + engines: {node: '>= 6'} + dev: false + + /@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.15.0 + dev: true + + /@rollup/pluginutils/4.2.1: + resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} + engines: {node: '>= 8.0.0'} + dependencies: + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@rollup/pluginutils/5.0.2: + resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.1 + estree-walker: 2.0.2 + picomatch: 2.3.1 + dev: true + + /@sxzz/popperjs-es/2.11.7: + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + dev: false + + /@types/estree/1.0.1: + resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==} + dev: true + + /@types/glob/7.2.0: + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 18.16.14 + dev: false + + /@types/json-schema/7.0.11: + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + dev: true + + /@types/lodash-es/4.17.7: + resolution: {integrity: sha512-z0ptr6UI10VlU6l5MYhGwS4mC8DZyYer2mCoyysZtSF7p26zOX8UpbrV0YpNYLGS8K4PUFIyEr62IMFFjveSiQ==} + dependencies: + '@types/lodash': 4.14.194 + + /@types/lodash/4.14.194: + resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==} + + /@types/minimatch/5.1.2: + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + dev: false + + /@types/node/18.16.14: + resolution: {integrity: sha512-+ImzUB3mw2c5ISJUq0punjDilUQ5GnUim0ZRvchHIWJmOC0G+p0kzhXBqj6cDjK0QdPFwzrHWgrJp3RPvCG5qg==} + + /@types/prismjs/1.26.0: + resolution: {integrity: sha512-ZTaqn/qSqUuAq1YwvOFQfVW1AR/oQJlLSZVustdjwI+GZ8kr0MSHBj0tsXPW1EqHubx50gtBEjbPGsdZwQwCjQ==} + dev: true + + /@types/semver/7.5.0: + resolution: {integrity: sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==} + dev: true + + /@types/web-bluetooth/0.0.16: + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + dev: false + + /@typescript-eslint/eslint-plugin/5.59.6_4qbuxpmdupj46lq2zjlghng6yy: + resolution: {integrity: sha512-sXtOgJNEuRU5RLwPUb1jxtToZbgvq3M6FPpY4QENxoOggK+UpTxUBpj6tD8+Qh2g46Pi9We87E+eHnUw8YcGsw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.1 + '@typescript-eslint/parser': 5.59.6_5ujgynla27k2qkzlnkldjwsutm + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/type-utils': 5.59.6_5ujgynla27k2qkzlnkldjwsutm + '@typescript-eslint/utils': 5.59.6_5ujgynla27k2qkzlnkldjwsutm + debug: 4.3.4 + eslint: 8.41.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 + semver: 7.5.1 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/parser/5.59.6_5ujgynla27k2qkzlnkldjwsutm: + resolution: {integrity: sha512-7pCa6al03Pv1yf/dUg/s1pXz/yGMUBAw5EeWqNTFiSueKvRNonze3hma3lhdsOrQcaOXhbk5gKu2Fludiho9VA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/typescript-estree': 5.59.6_typescript@4.9.5 + debug: 4.3.4 + eslint: 8.41.0 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/scope-manager/5.59.6: + resolution: {integrity: sha512-gLbY3Le9Dxcb8KdpF0+SJr6EQ+hFGYFl6tVY8VxLPFDfUZC7BHFw+Vq7bM5lE9DwWPfx4vMWWTLGXgpc0mAYyQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/visitor-keys': 5.59.6 + dev: true + + /@typescript-eslint/type-utils/5.59.6_5ujgynla27k2qkzlnkldjwsutm: + resolution: {integrity: sha512-A4tms2Mp5yNvLDlySF+kAThV9VTBPCvGf0Rp8nl/eoDX9Okun8byTKoj3fJ52IJitjWOk0fKPNQhXEB++eNozQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.59.6_typescript@4.9.5 + '@typescript-eslint/utils': 5.59.6_5ujgynla27k2qkzlnkldjwsutm + debug: 4.3.4 + eslint: 8.41.0 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/types/5.59.6: + resolution: {integrity: sha512-tH5lBXZI7T2MOUgOWFdVNUILsI02shyQvfzG9EJkoONWugCG77NDDa1EeDGw7oJ5IvsTAAGVV8I3Tk2PNu9QfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@typescript-eslint/typescript-estree/5.59.6_typescript@4.9.5: + resolution: {integrity: sha512-vW6JP3lMAs/Tq4KjdI/RiHaaJSO7IUsbkz17it/Rl9Q+WkQ77EOuOnlbaU8kKfVIOJxMhnRiBG+olE7f3M16DA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/visitor-keys': 5.59.6 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + semver: 7.5.1 + tsutils: 3.21.0_typescript@4.9.5 + typescript: 4.9.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@typescript-eslint/utils/5.59.6_5ujgynla27k2qkzlnkldjwsutm: + resolution: {integrity: sha512-vzaaD6EXbTS29cVH0JjXBdzMt6VBlv+hE31XktDRMX1j3462wZCJa7VzO2AxXEXcIl8GQqZPcOPuW/Z1tZVogg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.41.0 + '@types/json-schema': 7.0.11 + '@types/semver': 7.5.0 + '@typescript-eslint/scope-manager': 5.59.6 + '@typescript-eslint/types': 5.59.6 + '@typescript-eslint/typescript-estree': 5.59.6_typescript@4.9.5 + eslint: 8.41.0 + eslint-scope: 5.1.1 + semver: 7.5.1 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + + /@typescript-eslint/visitor-keys/5.59.6: + resolution: {integrity: sha512-zEfbFLzB9ETcEJ4HZEEsCR9HHeNku5/Qw1jSS5McYJv5BR+ftYXwFFAH5Al+xkGaZEqowMwl7uoJjQb1YSPF8Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + '@typescript-eslint/types': 5.59.6 + eslint-visitor-keys: 3.4.1 + dev: true + + /@vant/icons/1.8.0: + resolution: {integrity: sha512-sKfEUo2/CkQFuERxvkuF6mGQZDKu3IQdj5rV9Fm0weJXtchDSSQ+zt8qPCNUEhh9Y8shy5PzxbvAfOOkCwlCXg==} + dev: false + + /@vant/popperjs/1.3.0: + resolution: {integrity: sha512-hB+czUG+aHtjhaEmCJDuXOep0YTZjdlRR+4MSmIFnkCQIxJaXLQdSsR90XWvAI2yvKUI7TCGqR8pQg2RtvkMHw==} + dev: false + + /@vant/use/1.5.1_vue@3.3.4: + resolution: {integrity: sha512-Zxd7lDz/LliVYEQi3PR9a8CQa/kGCVzF0u9hqDMaTlgXlbG0wHMFPllrcG0ThR6bfs8xrYVuSFM9pJn6HSoUGQ==} + peerDependencies: + vue: ^3.0.0 + dependencies: + vue: 3.3.4 + dev: false + + /@vitejs/plugin-vue-jsx/2.1.1_vite@3.2.6+vue@3.3.4: + resolution: {integrity: sha512-JgDhxstQlwnHBvZ1BSnU5mbmyQ14/t5JhREc6YH5kWyu2QdAAOsLF6xgHoIWarj8tddaiwFrNzLbWJPudpXKYA==} + engines: {node: ^14.18.0 || >=16.0.0} + peerDependencies: + vite: ^3.0.0 + vue: ^3.0.0 + dependencies: + '@babel/core': 7.21.8 + '@babel/plugin-transform-typescript': 7.21.3_@babel+core@7.21.8 + '@vue/babel-plugin-jsx': 1.1.1_@babel+core@7.21.8 + vite: 3.2.6_3cl3pib2kx7jaftbqhg3ux7t34 + vue: 3.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@vitejs/plugin-vue/3.2.0_vite@3.2.6+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: 3.2.6_3cl3pib2kx7jaftbqhg3ux7t34 + vue: 3.3.4 + dev: true + + /@volar/code-gen/0.40.13: + resolution: {integrity: sha512-4gShBWuMce868OVvgyA1cU5WxHbjfEme18Tw6uVMfweZCF5fB2KECG0iPrA9D54vHk3FeHarODNwgIaaFfUBlA==} + dependencies: + '@volar/source-map': 0.40.13 + dev: true + + /@volar/source-map/0.40.13: + resolution: {integrity: sha512-dbdkAB2Nxb0wLjAY5O64o3ywVWlAGONnBIoKAkXSf6qkGZM+nJxcizsoiI66K+RHQG0XqlyvjDizfnTxr+6PWg==} + dependencies: + '@vue/reactivity': 3.2.38 + dev: true + + /@volar/typescript-faster/0.40.13: + resolution: {integrity: sha512-uy+TlcFkKoNlKEnxA4x5acxdxLyVDIXGSc8cYDNXpPKjBKXrQaetzCzlO3kVBqu1VLMxKNGJMTKn35mo+ILQmw==} + dependencies: + semver: 7.5.1 + dev: true + + /@volar/vue-language-core/0.40.13: + resolution: {integrity: sha512-QkCb8msi2KUitTdM6Y4kAb7/ZlEvuLcbBFOC2PLBlFuoZwyxvSP7c/dBGmKGtJlEvMX0LdCyrg5V2aBYxD38/Q==} + dependencies: + '@volar/code-gen': 0.40.13 + '@volar/source-map': 0.40.13 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-sfc': 3.3.4 + '@vue/reactivity': 3.3.4 + '@vue/shared': 3.3.4 + dev: true + + /@volar/vue-typescript/0.40.13: + resolution: {integrity: sha512-o7bNztwjs8JmbQjVkrnbZUOfm7q4B8ZYssETISN1tRaBdun6cfNqgpkvDYd+VUBh1O4CdksvN+5BUNnwAz4oCQ==} + dependencies: + '@volar/code-gen': 0.40.13 + '@volar/typescript-faster': 0.40.13 + '@volar/vue-language-core': 0.40.13 + dev: true + + /@vue/babel-helper-vue-transform-on/1.0.2: + resolution: {integrity: sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==} + dev: true + + /@vue/babel-plugin-jsx/1.1.1_@babel+core@7.21.8: + resolution: {integrity: sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==} + dependencies: + '@babel/helper-module-imports': 7.21.4 + '@babel/plugin-syntax-jsx': 7.21.4_@babel+core@7.21.8 + '@babel/template': 7.20.7 + '@babel/traverse': 7.21.5 + '@babel/types': 7.21.5 + '@vue/babel-helper-vue-transform-on': 1.0.2 + camelcase: 6.3.0 + html-tags: 3.3.1 + svg-tags: 1.0.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: true + + /@vue/compiler-core/3.3.4: + resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + dependencies: + '@babel/parser': 7.21.8 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + + /@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-sfc/3.3.4: + resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + dependencies: + '@babel/parser': 7.21.8 + '@vue/compiler-core': 3.3.4 + '@vue/compiler-dom': 3.3.4 + '@vue/compiler-ssr': 3.3.4 + '@vue/reactivity-transform': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.0 + postcss: 8.4.23 + source-map-js: 1.0.2 + + /@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/devtools-api/6.5.0: + resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} + dev: false + + /@vue/eslint-config-prettier/7.1.0_qokqbt3mojjgfarfkyl2cug5vu: + resolution: {integrity: sha512-Pv/lVr0bAzSIHLd9iz0KnvAr4GKyCEl+h52bc4e5yWuDVtLgFwycF7nrbWTAQAS+FU6q1geVd07lc6EWfJiWKQ==} + peerDependencies: + eslint: '>= 7.28.0' + prettier: '>= 2.0.0' + dependencies: + eslint: 8.41.0 + eslint-config-prettier: 8.8.0_eslint@8.41.0 + eslint-plugin-prettier: 4.2.1_xcqkel4mpum3npntysob2xmn54 + prettier: 2.8.8 + dev: true + + /@vue/eslint-config-typescript/11.0.3_bobqty5xbmhlsbxniqz7dnethy: + resolution: {integrity: sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==} + 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': 5.59.6_4qbuxpmdupj46lq2zjlghng6yy + '@typescript-eslint/parser': 5.59.6_5ujgynla27k2qkzlnkldjwsutm + eslint: 8.41.0 + eslint-plugin-vue: 9.13.0_eslint@8.41.0 + typescript: 4.9.5 + vue-eslint-parser: 9.3.0_eslint@8.41.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@vue/reactivity-transform/3.3.4: + resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + dependencies: + '@babel/parser': 7.21.8 + '@vue/compiler-core': 3.3.4 + '@vue/shared': 3.3.4 + estree-walker: 2.0.2 + magic-string: 0.30.0 + + /@vue/reactivity/3.2.38: + resolution: {integrity: sha512-6L4myYcH9HG2M25co7/BSo0skKFHpAN8PhkNPM4xRVkyGl1K5M3Jx4rp5bsYhvYze2K4+l+pioN4e6ZwFLUVtw==} + dependencies: + '@vue/shared': 3.2.38 + dev: true + + /@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.2 + + /@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.2.38: + resolution: {integrity: sha512-dTyhTIRmGXBjxJE+skC8tTWCGLCVc4wQgRRLt8+O9p5ewBAjoBwtCAkLPrtToSr1xltoe3st21Pv953aOZ7alg==} + dev: true + + /@vue/shared/3.3.4: + resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + + /@vuepress/markdown/1.9.9: + resolution: {integrity: sha512-JzFdBdGe5aoiKSaEgF+h3JLDXNVfWPI5DJWXrIt7rhhkMJesF6HowIznPLdXqukzHfXHcPvo9oQ4o6eT0YmVGA==} + dependencies: + '@vuepress/shared-utils': 1.9.9 + markdown-it: 8.4.2 + markdown-it-anchor: 5.3.0_markdown-it@8.4.2 + markdown-it-chain: 1.3.0_markdown-it@8.4.2 + markdown-it-emoji: 1.4.0 + markdown-it-table-of-contents: 0.4.4 + prismjs: 1.29.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@vuepress/shared-utils/1.9.9: + resolution: {integrity: sha512-qhk/7QF5LgMEXhEB1hlqreGFgkz4p2pmaBBNFxnAnYmSwmyO+u/oFOpZLI16QRx9Wg6ekR2ENmByQLxV7y4lJg==} + dependencies: + chalk: 2.4.2 + escape-html: 1.0.3 + fs-extra: 7.0.1 + globby: 9.2.0 + gray-matter: 4.0.3 + hash-sum: 1.0.2 + semver: 6.3.0 + toml: 3.0.0 + upath: 1.2.0 + transitivePeerDependencies: + - supports-color + dev: false + + /@vueuse/core/9.13.0_vue@3.3.4: + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0_vue@3.3.4 + vue-demi: 0.14.5_vue@3.3.4 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /@vueuse/metadata/9.13.0: + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + dev: false + + /@vueuse/shared/9.13.0_vue@3.3.4: + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + dependencies: + vue-demi: 0.14.5_vue@3.3.4 + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + + /acorn-jsx/5.3.2_acorn@8.8.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.8.2 + dev: true + + /acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + 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-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + 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 + + /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: false + + /argparse/2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /arr-diff/4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: false + + /arr-flatten/1.1.0: + resolution: {integrity: sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==} + engines: {node: '>=0.10.0'} + dev: false + + /arr-union/3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: false + + /array-union/1.0.2: + resolution: {integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==} + engines: {node: '>=0.10.0'} + dependencies: + array-uniq: 1.0.3 + dev: false + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-uniq/1.0.3: + resolution: {integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==} + engines: {node: '>=0.10.0'} + dev: false + + /array-unique/0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: false + + /assign-symbols/1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: false + + /astral-regex/2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + 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 + + /atob/2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: false + + /axios/1.4.0: + resolution: {integrity: sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==} + dependencies: + follow-redirects: 1.15.2 + 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==} + + /base/0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.0 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 + dev: false + + /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 + + /brace-expansion/2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces/2.3.2: + resolution: {integrity: sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==} + engines: {node: '>=0.10.0'} + dependencies: + arr-flatten: 1.1.0 + array-unique: 0.3.2 + extend-shallow: 2.0.1 + fill-range: 4.0.0 + isobject: 3.0.1 + repeat-element: 1.1.4 + snapdragon: 0.8.2 + snapdragon-node: 2.1.1 + split-string: 3.1.0 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /browserslist/4.21.5: + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001488 + electron-to-chromium: 1.4.402 + node-releases: 2.0.11 + update-browserslist-db: 1.0.11_browserslist@4.21.5 + dev: true + + /cache-base/1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.0 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: false + + /call-me-maybe/1.0.2: + resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} + dev: false + + /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.30001488: + resolution: {integrity: sha512-NORIQuuL4xGpIy6iCCQGN4iFjlBXtfKWIenlUuyZJumLRIindLb7wXM+GO8erEhb7vXfcnf4BAg2PrSDN5TNLQ==} + 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 + + /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 + + /chalk/5.2.0: + resolution: {integrity: sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.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.2 + dev: true + + /class-utils/0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: false + + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-cursor/3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + + /cli-truncate/2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + + /cli-truncate/3.1.0: + resolution: {integrity: sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + slice-ansi: 5.0.0 + string-width: 5.1.2 + dev: true + + /codemirror/5.65.13: + resolution: {integrity: sha512-SVWEzKXmbHmTQQWaz03Shrh4nybG0wXx2MEu3FO4ezbPW8IbnZEd5iGHGEffSUaitKYa3i+pHpBsSvw8sPHtzg==} + dev: false + + /collection-visit/1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: false + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + + /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==} + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /colorette/2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + 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/10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: false + + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false + + /commander/8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false + + /component-emitter/1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + dev: false + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + dev: true + + /copy-descriptor/0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} + dev: false + + /copy-to-clipboard/3.3.3: + resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} + dependencies: + toggle-selection: 1.0.6 + dev: false + + /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 + + /crypto-js/4.1.1: + resolution: {integrity: sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==} + dev: false + + /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 + + /csstype/3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + /d3-array/1.2.4: + resolution: {integrity: sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw==} + dev: false + + /d3-array/3.2.3: + resolution: {integrity: sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: false + + /d3-axis/1.0.12: + resolution: {integrity: sha512-ejINPfPSNdGFKEOAtnBtdkpr24c4d4jsei6Lg98mxf424ivoDP2956/5HDpIAtmHo85lqT4pruy+zEgvRUBqaQ==} + dev: false + + /d3-axis/3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + dev: false + + /d3-brush/1.1.6: + resolution: {integrity: sha512-7RW+w7HfMCPyZLifTz/UnJmI5kdkXtpCbombUSs8xniAyo0vIbrDzDwUJB6eJOgl9u5DQOt2TQlYumxzD1SvYA==} + dependencies: + d3-dispatch: 1.0.6 + d3-drag: 1.2.5 + d3-interpolate: 1.4.0 + d3-selection: 1.4.2 + d3-transition: 1.3.2 + dev: false + + /d3-brush/3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1_d3-selection@3.0.0 + dev: false + + /d3-chord/1.0.6: + resolution: {integrity: sha512-JXA2Dro1Fxw9rJe33Uv+Ckr5IrAa74TlfDEhE/jfLOaXegMQFQTAgAw9WnZL8+HxVBRXaRGCkrNU7pJeylRIuA==} + dependencies: + d3-array: 1.2.4 + d3-path: 1.0.9 + dev: false + + /d3-chord/3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-collection/1.0.7: + resolution: {integrity: sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A==} + dev: false + + /d3-color/1.4.1: + resolution: {integrity: sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==} + dev: false + + /d3-color/3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-contour/1.3.2: + resolution: {integrity: sha512-hoPp4K/rJCu0ladiH6zmJUEz6+u3lgR+GSm/QdM2BBvDraU39Vr7YdDCicJcxP1z8i9B/2dJLgDC1NcvlF8WCg==} + dependencies: + d3-array: 1.2.4 + dev: false + + /d3-contour/4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.3 + dev: false + + /d3-delaunay/6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + dependencies: + delaunator: 5.0.0 + dev: false + + /d3-dispatch/1.0.6: + resolution: {integrity: sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA==} + dev: false + + /d3-dispatch/3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: false + + /d3-drag/1.2.5: + resolution: {integrity: sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w==} + dependencies: + d3-dispatch: 1.0.6 + d3-selection: 1.4.2 + dev: false + + /d3-drag/3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + dev: false + + /d3-dsv/1.2.0: + resolution: {integrity: sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g==} + hasBin: true + dependencies: + commander: 2.20.3 + iconv-lite: 0.4.24 + rw: 1.3.3 + dev: false + + /d3-dsv/3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + dev: false + + /d3-ease/1.0.7: + resolution: {integrity: sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==} + dev: false + + /d3-ease/3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-fetch/1.2.0: + resolution: {integrity: sha512-yC78NBVcd2zFAyR/HnUiBS7Lf6inSCoWcSxFfw8FYL7ydiqe80SazNwoffcqOfs95XaLo7yebsmQqDKSsXUtvA==} + dependencies: + d3-dsv: 1.2.0 + dev: false + + /d3-fetch/3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + dependencies: + d3-dsv: 3.0.1 + dev: false + + /d3-force/1.2.1: + resolution: {integrity: sha512-HHvehyaiUlVo5CxBJ0yF/xny4xoaxFxDnBXNvNcfW9adORGZfyNF1dj6DGLKyk4Yh3brP/1h3rnDzdIAwL08zg==} + dependencies: + d3-collection: 1.0.7 + d3-dispatch: 1.0.6 + d3-quadtree: 1.0.7 + d3-timer: 1.0.10 + dev: false + + /d3-force/3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + dev: false + + /d3-format/1.4.5: + resolution: {integrity: sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==} + dev: false + + /d3-format/3.1.0: + resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} + engines: {node: '>=12'} + dev: false + + /d3-geo/1.12.1: + resolution: {integrity: sha512-XG4d1c/UJSEX9NfU02KwBL6BYPj8YKHxgBEw5om2ZnTRSbIcego6dhHwcxuSR3clxh0EpE38os1DVPOmnYtTPg==} + dependencies: + d3-array: 1.2.4 + dev: false + + /d3-geo/3.1.0: + resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.3 + dev: false + + /d3-hierarchy/1.1.9: + resolution: {integrity: sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ==} + dev: false + + /d3-hierarchy/3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate/1.4.0: + resolution: {integrity: sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==} + dependencies: + d3-color: 1.4.1 + dev: false + + /d3-interpolate/3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-path/1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: false + + /d3-path/3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false + + /d3-polygon/1.0.6: + resolution: {integrity: sha512-k+RF7WvI08PC8reEoXa/w2nSg5AUMTi+peBD9cmFc+0ixHfbs4QmxxkarVal1IkVkgxVuk9JSHhJURHiyHKAuQ==} + dev: false + + /d3-polygon/3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + dev: false + + /d3-quadtree/1.0.7: + resolution: {integrity: sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA==} + dev: false + + /d3-quadtree/3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + dev: false + + /d3-random/1.1.2: + resolution: {integrity: sha512-6AK5BNpIFqP+cx/sreKzNjWbwZQCSUatxq+pPRmFIQaWuoD+NrbVWw7YWpHiXpCQ/NanKdtGDuB+VQcZDaEmYQ==} + dev: false + + /d3-random/3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + dev: false + + /d3-scale-chromatic/1.5.0: + resolution: {integrity: sha512-ACcL46DYImpRFMBcpk9HhtIyC7bTBR4fNOPxwVSl0LfulDAwyiHyPOTqcDG1+t5d4P9W7t/2NAuWu59aKko/cg==} + dependencies: + d3-color: 1.4.1 + d3-interpolate: 1.4.0 + dev: false + + /d3-scale-chromatic/3.0.0: + resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + dev: false + + /d3-scale/2.2.2: + resolution: {integrity: sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==} + dependencies: + d3-array: 1.2.4 + d3-collection: 1.0.7 + d3-format: 1.4.5 + d3-interpolate: 1.4.0 + d3-time: 1.1.0 + d3-time-format: 2.3.0 + dev: false + + /d3-scale/4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.3 + d3-format: 3.1.0 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: false + + /d3-selection/1.4.2: + resolution: {integrity: sha512-SJ0BqYihzOjDnnlfyeHT0e30k0K1+5sR3d5fNueCNeuhZTnGw4M4o8mqJchSwgKMXCNFo+e2VTChiSJ0vYtXkg==} + dev: false + + /d3-selection/3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + dev: false + + /d3-shape/1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: false + + /d3-shape/3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-time-format/2.3.0: + resolution: {integrity: sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==} + dependencies: + d3-time: 1.1.0 + dev: false + + /d3-time-format/4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: false + + /d3-time/1.1.0: + resolution: {integrity: sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA==} + dev: false + + /d3-time/3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.3 + dev: false + + /d3-timer/1.0.10: + resolution: {integrity: sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==} + dev: false + + /d3-timer/3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + + /d3-transition/1.3.2: + resolution: {integrity: sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA==} + dependencies: + d3-color: 1.4.1 + d3-dispatch: 1.0.6 + d3-ease: 1.0.7 + d3-interpolate: 1.4.0 + d3-selection: 1.4.2 + d3-timer: 1.0.10 + dev: false + + /d3-transition/3.0.1_d3-selection@3.0.0: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + dev: false + + /d3-voronoi/1.1.4: + resolution: {integrity: sha512-dArJ32hchFsrQ8uMiTBLq256MpnZjeuBtdHpaDlYuQyjU0CVzCJl/BVW+SkszaAeH95D/8gxqAhgx0ouAWAfRg==} + dev: false + + /d3-zoom/1.8.3: + resolution: {integrity: sha512-VoLXTK4wvy1a0JpH2Il+F2CiOhVu7VRXWF5M/LroMIh3/zBAC3WAt7QoIvPibOavVo20hN6/37vwAsdBejLyKQ==} + dependencies: + d3-dispatch: 1.0.6 + d3-drag: 1.2.5 + d3-interpolate: 1.4.0 + d3-selection: 1.4.2 + d3-transition: 1.3.2 + dev: false + + /d3-zoom/3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1_d3-selection@3.0.0 + dev: false + + /d3/5.16.0: + resolution: {integrity: sha512-4PL5hHaHwX4m7Zr1UapXW23apo6pexCgdetdJ5kTmADpG/7T9Gkxw0M0tf/pjoB63ezCCm0u5UaFYy2aMt0Mcw==} + dependencies: + d3-array: 1.2.4 + d3-axis: 1.0.12 + d3-brush: 1.1.6 + d3-chord: 1.0.6 + d3-collection: 1.0.7 + d3-color: 1.4.1 + d3-contour: 1.3.2 + d3-dispatch: 1.0.6 + d3-drag: 1.2.5 + d3-dsv: 1.2.0 + d3-ease: 1.0.7 + d3-fetch: 1.2.0 + d3-force: 1.2.1 + d3-format: 1.4.5 + d3-geo: 1.12.1 + d3-hierarchy: 1.1.9 + d3-interpolate: 1.4.0 + d3-path: 1.0.9 + d3-polygon: 1.0.6 + d3-quadtree: 1.0.7 + d3-random: 1.1.2 + d3-scale: 2.2.2 + d3-scale-chromatic: 1.5.0 + d3-selection: 1.4.2 + d3-shape: 1.3.7 + d3-time: 1.1.0 + d3-time-format: 2.3.0 + d3-timer: 1.0.10 + d3-transition: 1.3.2 + d3-voronoi: 1.1.4 + d3-zoom: 1.8.3 + dev: false + + /d3/7.8.4: + resolution: {integrity: sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.3 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.0 + d3-geo: 3.1.0 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.0.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1_d3-selection@3.0.0 + d3-zoom: 3.0.0 + dev: false + + /dagre-d3/0.6.4: + resolution: {integrity: sha512-e/6jXeCP7/ptlAM48clmX4xTZc5Ek6T6kagS7Oz2HrYSdqcLZFLqpAfh7ldbZRFfxCZVyh61NEPR08UQRVxJzQ==} + dependencies: + d3: 5.16.0 + dagre: 0.8.5 + graphlib: 2.1.8 + lodash: 4.17.21 + dev: false + + /dagre/0.8.5: + resolution: {integrity: sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==} + dependencies: + graphlib: 2.1.8 + lodash: 4.17.21 + dev: false + + /dayjs/1.11.7: + resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==} + dev: false + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: false + + /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 + + /decode-uri-component/0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: false + + /deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + dev: true + + /deepmerge/1.5.2: + resolution: {integrity: sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==} + engines: {node: '>=0.10.0'} + dev: false + + /define-property/0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.6 + dev: false + + /define-property/1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + dev: false + + /define-property/2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.2 + isobject: 3.0.1 + dev: false + + /delaunator/5.0.0: + resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} + dependencies: + robust-predicates: 3.0.1 + dev: false + + /delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + dev: false + + /dir-glob/2.2.2: + resolution: {integrity: sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==} + engines: {node: '>=4'} + dependencies: + path-type: 3.0.0 + 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 + + /dompurify/2.3.5: + resolution: {integrity: sha512-kD+f8qEaa42+mjdOpKeztu9Mfx5bv9gVLO6K9jRx4uGvh6Wv06Srn4jr1wPNY2OOUGGSKHNFN+A8MA3v0E0QAQ==} + dev: false + + /eastasianwidth/0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: true + + /electron-to-chromium/1.4.402: + resolution: {integrity: sha512-gWYvJSkohOiBE6ecVYXkrDgNaUjo47QEKK0kQzmWyhkH+yoYiG44bwuicTGNSIQRG3WDMsWVZJLRnJnLNkbWvA==} + dev: true + + /element-plus/2.3.5_vue@3.3.4: + resolution: {integrity: sha512-g27DHm2C5/tPwte9H6Juu+JOdzT9z1ALHTIvia6MwnBdCrI4kd77o6KcYdodU15/tYiPBoCEmobhl/7GUDb+1Q==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@ctrl/tinycolor': 3.6.0 + '@element-plus/icons-vue': 2.1.0_vue@3.3.4 + '@floating-ui/dom': 1.2.8 + '@popperjs/core': /@sxzz/popperjs-es/2.11.7 + '@types/lodash': 4.14.194 + '@types/lodash-es': 4.17.7 + '@vueuse/core': 9.13.0_vue@3.3.4 + async-validator: 4.2.5 + dayjs: 1.11.7 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3_tknf7errc3xdqocd3ryzzla7vq + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.3.4 + transitivePeerDependencies: + - '@vue/composition-api' + dev: false + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emoji-regex/9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: true + + /entities/1.1.2: + resolution: {integrity: sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==} + dev: false + + /entities/2.1.0: + resolution: {integrity: sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==} + dev: false + + /es-module-lexer/0.10.5: + resolution: {integrity: sha512-+7IwY/kiGAacQfY+YBhKMvEmyAJnw5grTUgjG85Pe7vcUI/6b7pZjZG8nQ7+48YhzEAEqrEgD2dCz/JIK+AYvw==} + dev: true + + /esbuild-android-64/0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-android-arm64/0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-64/0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-darwin-arm64/0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-64/0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-freebsd-arm64/0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-32/0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-64/0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm/0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-arm64/0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-mips64le/0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-ppc64le/0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-riscv64/0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-linux-s390x/0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /esbuild-netbsd-64/0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-openbsd-64/0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /esbuild-sunos-64/0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-32/0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-64/0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild-windows-arm64/0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /esbuild/0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + engines: {node: '>=12'} + hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.15.18 + '@esbuild/linux-loong64': 0.15.18 + esbuild-android-64: 0.15.18 + esbuild-android-arm64: 0.15.18 + esbuild-darwin-64: 0.15.18 + esbuild-darwin-arm64: 0.15.18 + esbuild-freebsd-64: 0.15.18 + esbuild-freebsd-arm64: 0.15.18 + esbuild-linux-32: 0.15.18 + esbuild-linux-64: 0.15.18 + esbuild-linux-arm: 0.15.18 + esbuild-linux-arm64: 0.15.18 + esbuild-linux-mips64le: 0.15.18 + esbuild-linux-ppc64le: 0.15.18 + esbuild-linux-riscv64: 0.15.18 + esbuild-linux-s390x: 0.15.18 + esbuild-netbsd-64: 0.15.18 + esbuild-openbsd-64: 0.15.18 + esbuild-sunos-64: 0.15.18 + esbuild-windows-32: 0.15.18 + esbuild-windows-64: 0.15.18 + esbuild-windows-arm64: 0.15.18 + 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'} + + /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.8.0_eslint@8.41.0: + resolution: {integrity: sha512-wLbQiFre3tdGgpDv67NQKnJuTlcUVYHas3k+DZCc2U2BadthoEY4B7hLPvAxaqdyOGCzuLfii2fqGph10va7oA==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + dependencies: + eslint: 8.41.0 + dev: true + + /eslint-plugin-prettier/4.2.1_xcqkel4mpum3npntysob2xmn54: + resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} + engines: {node: '>=12.0.0'} + peerDependencies: + eslint: '>=7.28.0' + eslint-config-prettier: '*' + prettier: '>=2.0.0' + peerDependenciesMeta: + eslint-config-prettier: + optional: true + dependencies: + eslint: 8.41.0 + eslint-config-prettier: 8.8.0_eslint@8.41.0 + prettier: 2.8.8 + prettier-linter-helpers: 1.0.0 + dev: true + + /eslint-plugin-vue/9.13.0_eslint@8.41.0: + resolution: {integrity: sha512-aBz9A8WB4wmpnVv0pYUt86cmH9EkcwWzgEwecBxMoRNhQjTL5i4sqadnwShv/hOdr8Hbl8XANGV7dtX9UQIAyA==} + 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.41.0 + eslint: 8.41.0 + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.0.13 + semver: 7.5.1 + vue-eslint-parser: 9.3.0_eslint@8.41.0 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /eslint-scope/7.2.0: + resolution: {integrity: sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw==} + 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.1: + resolution: {integrity: sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /eslint/8.41.0: + resolution: {integrity: sha512-WQDQpzGBOP5IrXPo4Hc0814r4/v2rrIsB0rhT7jtunIalgg6gYXWhRMOejVO8yH21T/FGaxjmFjBMNqcIlmH1Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.41.0 + '@eslint-community/regexpp': 4.5.1 + '@eslint/eslintrc': 2.0.3 + '@eslint/js': 8.41.0 + '@humanwhocodes/config-array': 0.11.8 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + 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.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 + 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.20.0 + graphemer: 1.4.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + 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.1 + strip-ansi: 6.0.1 + strip-json-comments: 3.1.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + + /espree/9.5.2: + resolution: {integrity: sha512-7OASN1Wma5fum5SrNhFMAMJxOUAbhyfQ8dQ//PJaJbNw0URTPWqIghHWt1MmAANKhHZIYOHruW4Kw4ruUWOdGw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.8.2 + acorn-jsx: 5.3.2_acorn@8.8.2 + eslint-visitor-keys: 3.4.1 + dev: true + + /esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /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/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.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 + + /execa/7.1.1: + resolution: {integrity: sha512-wH0eMf/UXckdUYnO21+HDztteVv05rq2GXksxT4fCGeHkBhw1DROXh40wcjMcRqDOWE7iPJ4n3M7e2+YFP+76Q==} + engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 4.3.1 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.1.0 + onetime: 6.0.0 + signal-exit: 3.0.7 + strip-final-newline: 3.0.0 + dev: true + + /expand-brackets/2.1.4: + resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==} + engines: {node: '>=0.10.0'} + dependencies: + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + posix-character-classes: 0.1.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /extend-shallow/2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: false + + /extend-shallow/3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: false + + /extglob/2.0.4: + resolution: {integrity: sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==} + engines: {node: '>=0.10.0'} + dependencies: + array-unique: 0.3.2 + define-property: 1.0.0 + expand-brackets: 2.1.4 + extend-shallow: 2.0.1 + fragment-cache: 0.2.1 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /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/2.2.7: + resolution: {integrity: sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==} + engines: {node: '>=4.0.0'} + dependencies: + '@mrmlnc/readdir-enhanced': 2.2.1 + '@nodelib/fs.stat': 1.1.3 + glob-parent: 3.1.0 + is-glob: 4.0.3 + merge2: 1.4.1 + micromatch: 3.1.10 + transitivePeerDependencies: + - supports-color + dev: false + + /fast-glob/3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + 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.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + 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.0.4 + dev: true + + /fill-range/4.0.0: + resolution: {integrity: sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-number: 3.0.0 + repeat-string: 1.6.1 + to-regex-range: 2.1.1 + dev: false + + /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.0.4: + resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.2.7 + rimraf: 3.0.2 + dev: true + + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + dev: true + + /follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + /for-in/1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + 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 + + /fragment-cache/0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: false + + /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: false + + /fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + 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 + + /get-value/2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: false + + /glob-parent/3.1.0: + resolution: {integrity: sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==} + dependencies: + is-glob: 3.1.0 + path-dirname: 1.0.2 + dev: false + + /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-to-regexp/0.3.0: + resolution: {integrity: sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==} + dev: false + + /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 + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globals/13.20.0: + resolution: {integrity: sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ==} + 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.2.12 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby/9.2.0: + resolution: {integrity: sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==} + engines: {node: '>=6'} + dependencies: + '@types/glob': 7.2.0 + array-union: 1.0.2 + dir-glob: 2.2.2 + fast-glob: 2.2.7 + glob: 7.2.3 + ignore: 4.0.6 + pify: 4.0.1 + slash: 2.0.0 + transitivePeerDependencies: + - supports-color + dev: false + + /graceful-fs/4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + dev: false + + /grapheme-splitter/1.0.4: + resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + dev: true + + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + + /graphlib/2.1.8: + resolution: {integrity: sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==} + dependencies: + lodash: 4.17.21 + dev: false + + /gray-matter/4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} + dependencies: + js-yaml: 3.14.1 + kind-of: 6.0.3 + section-matter: 1.0.0 + strip-bom-string: 1.0.0 + dev: false + + /has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-value/0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: false + + /has-value/1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: false + + /has-values/0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: false + + /has-values/1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: false + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hash-sum/1.0.2: + resolution: {integrity: sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==} + dev: false + + /highlight.js/10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + dev: false + + /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 + + /human-signals/4.3.1: + resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==} + engines: {node: '>=14.18.0'} + dev: true + + /husky/8.0.3: + resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} + engines: {node: '>=14'} + hasBin: true + dev: true + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: false + + /ignore/4.0.6: + resolution: {integrity: sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==} + engines: {node: '>= 4'} + dev: false + + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + dev: true + + /immutable/4.3.0: + resolution: {integrity: sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==} + 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 + + /imurmurhash/0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /insert-text-at-cursor/0.3.0: + resolution: {integrity: sha512-/nPtyeX9xPUvxZf+r0518B7uqNKlP+LqNJqSiXFEaa2T71rWIwTVXGH7hB9xO/EVdwa5/pWlFCPwShOW81XIxQ==} + dev: false + + /internmap/2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false + + /is-accessor-descriptor/0.1.6: + resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /is-accessor-descriptor/1.0.0: + resolution: {integrity: sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: false + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: false + + /is-core-module/2.12.1: + resolution: {integrity: sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==} + dependencies: + has: 1.0.3 + dev: true + + /is-data-descriptor/0.1.4: + resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /is-data-descriptor/1.0.0: + resolution: {integrity: sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 6.0.3 + dev: false + + /is-descriptor/0.1.6: + resolution: {integrity: sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 0.1.6 + is-data-descriptor: 0.1.4 + kind-of: 5.1.0 + dev: false + + /is-descriptor/1.0.2: + resolution: {integrity: sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==} + engines: {node: '>=0.10.0'} + dependencies: + is-accessor-descriptor: 1.0.0 + is-data-descriptor: 1.0.0 + kind-of: 6.0.3 + dev: false + + /is-extendable/0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false + + /is-extendable/1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: false + + /is-extglob/2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-fullwidth-code-point/4.0.0: + resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} + engines: {node: '>=12'} + dev: true + + /is-glob/3.1.0: + resolution: {integrity: sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: false + + /is-glob/4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-number/3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /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-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-stream/3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + + /is-windows/1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: false + + /isarray/1.0.0: + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + dev: false + + /isexe/2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + dev: true + + /isobject/2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: false + + /isobject/3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: false + + /javascript-stringify/1.6.0: + resolution: {integrity: sha512-fnjC0up+0SjEJtgmmG+teeel68kutkvzfctO/KxE3qJlbunkJYAshgH3boU++gSBHP8z5/r0ts0qRIrHf0RTQQ==} + dev: false + + /js-base64/3.7.5: + resolution: {integrity: sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==} + dev: false + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /js-yaml/3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + dev: false + + /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-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.0: + resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + dev: true + + /jsonfile/4.0.0: + resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} + optionalDependencies: + graceful-fs: 4.2.11 + dev: false + + /katex/0.13.24: + resolution: {integrity: sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==} + hasBin: true + dependencies: + commander: 8.3.0 + dev: false + + /khroma/1.4.1: + resolution: {integrity: sha512-+GmxKvmiRuCcUYDgR7g5Ngo0JEDeOsGdNONdU2zsiBQaK4z19Y2NvXqfEDE0ZiIrg45GTZyAnPLVsLZZACYm3Q==} + dev: false + + /kind-of/3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: false + + /kind-of/4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: false + + /kind-of/5.1.0: + resolution: {integrity: sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==} + engines: {node: '>=0.10.0'} + dev: false + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: false + + /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 + + /lilconfig/2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: true + + /linkify-it/2.2.0: + resolution: {integrity: sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==} + dependencies: + uc.micro: 1.0.6 + dev: false + + /linkify-it/3.0.3: + resolution: {integrity: sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==} + dependencies: + uc.micro: 1.0.6 + dev: false + + /lint-staged/13.2.2: + resolution: {integrity: sha512-71gSwXKy649VrSU09s10uAT0rWCcY3aewhMaHyl2N84oBk4Xs9HgxvUp3AYu+bNsK4NrOYYxvSgg7FyGJ+jGcA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true + dependencies: + chalk: 5.2.0 + cli-truncate: 3.1.0 + commander: 10.0.1 + debug: 4.3.4 + execa: 7.1.1 + lilconfig: 2.1.0 + listr2: 5.0.8 + micromatch: 4.0.5 + normalize-path: 3.0.0 + object-inspect: 1.12.3 + pidtree: 0.6.0 + string-argv: 0.3.2 + yaml: 2.2.2 + transitivePeerDependencies: + - enquirer + - supports-color + dev: true + + /listr2/5.0.8: + resolution: {integrity: sha512-mC73LitKHj9w6v30nLNGPetZIlfpUniNSsxxrbaPcWOjDb92SHPzJPi/t+v1YC/lxKz/AJ9egOjww0qUuFxBpA==} + engines: {node: ^14.13.1 || >=16.0.0} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.0 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + + /local-pkg/0.4.3: + resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} + engines: {node: '>=14'} + 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_tknf7errc3xdqocd3ryzzla7vq: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + dependencies: + '@types/lodash-es': 4.17.7 + lodash: 4.17.21 + lodash-es: 4.17.21 + dev: false + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + /log-update/4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + + /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.30.0: + resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==} + engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + + /map-cache/0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: false + + /map-visit/1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: false + + /markdown-it-anchor/5.3.0_markdown-it@8.4.2: + resolution: {integrity: sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==} + peerDependencies: + markdown-it: '*' + dependencies: + markdown-it: 8.4.2 + dev: false + + /markdown-it-attrs/4.1.6_markdown-it@12.3.2: + resolution: {integrity: sha512-O7PDKZlN8RFMyDX13JnctQompwrrILuz2y43pW2GagcwpIIElkAdfeek+erHfxUOlXWPsjFeWmZ8ch1xtRLWpA==} + engines: {node: '>=6'} + peerDependencies: + markdown-it: '>= 9.0.0' + dependencies: + markdown-it: 12.3.2 + dev: false + + /markdown-it-chain/1.3.0_markdown-it@8.4.2: + resolution: {integrity: sha512-XClV8I1TKy8L2qsT9iX3qiV+50ZtcInGXI80CA+DP62sMs7hXlyV/RM3hfwy5O3Ad0sJm9xIwQELgANfESo8mQ==} + engines: {node: '>=6.9'} + peerDependencies: + markdown-it: '>=5.0.0' + dependencies: + markdown-it: 8.4.2 + webpack-chain: 4.12.1 + dev: false + + /markdown-it-container/3.0.0: + resolution: {integrity: sha512-y6oKTq4BB9OQuY/KLfk/O3ysFhB3IMYoIWhGJEidXt1NQFocFK2sA2t0NYZAMyMShAGL6x5OPIbrmXPIqaN9rw==} + dev: false + + /markdown-it-emoji/1.4.0: + resolution: {integrity: sha512-QCz3Hkd+r5gDYtS2xsFXmBYrgw6KuWcJZLCEkdfAuwzZbShCmCfta+hwAMq4NX/4xPzkSHduMKgMkkPUJxSXNg==} + dev: false + + /markdown-it-table-of-contents/0.4.4: + resolution: {integrity: sha512-TAIHTHPwa9+ltKvKPWulm/beozQU41Ab+FIefRaQV1NRnpzwcV9QOe6wXQS5WLivm5Q/nlo0rl6laGkMDZE7Gw==} + engines: {node: '>6.4.0'} + dev: false + + /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 + + /markdown-it/8.4.2: + resolution: {integrity: sha512-GcRz3AWTqSUphY3vsUqQSFMbgR38a4Lh3GWlHRh/7MRwz8mcu9n2IO7HOh+bXHrR9kOPDl5RNCaEsrneb+xhHQ==} + hasBin: true + dependencies: + argparse: 1.0.10 + entities: 1.1.2 + linkify-it: 2.2.0 + mdurl: 1.0.1 + uc.micro: 1.0.6 + dev: false + + /mdurl/1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + dev: false + + /memoize-one/6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + dev: false + + /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'} + + /mermaid/8.14.0: + resolution: {integrity: sha512-ITSHjwVaby1Li738sxhF48sLTxcNyUAoWfoqyztL1f7J6JOLpHOuQPNLBb6lxGPUA0u7xP9IRULgvod0dKu35A==} + dependencies: + '@braintree/sanitize-url': 3.1.0 + d3: 7.8.4 + dagre: 0.8.5 + dagre-d3: 0.6.4 + dompurify: 2.3.5 + graphlib: 2.1.8 + khroma: 1.4.1 + moment-mini: 2.29.4 + stylis: 4.2.0 + dev: false + + /micromatch/3.1.10: + resolution: {integrity: sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + braces: 2.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + extglob: 2.0.4 + fragment-cache: 0.2.1 + kind-of: 6.0.3 + nanomatch: 1.2.13 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /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 + + /mimic-fn/4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} + engines: {node: '>=12'} + dev: true + + /minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + + /minimatch/5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /mixin-deep/1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 + dev: false + + /mlly/1.2.1: + resolution: {integrity: sha512-1aMEByaWgBPEbWV2BOPEMySRrzl7rIHXmQxam4DM8jVjalTQDjpN2ZKOLUrwyhfZQO7IXHml2StcHMhooDeEEQ==} + dependencies: + acorn: 8.8.2 + pathe: 1.1.0 + pkg-types: 1.0.3 + ufo: 1.1.2 + dev: true + + /moment-mini/2.29.4: + resolution: {integrity: sha512-uhXpYwHFeiTbY9KSgPPRoo1nt8OxNVdMVoTBYHfSEKeRkIkwGpO+gERmhuhBtzfaeOyTkykSrm2+noJBgqt3Hg==} + dev: false + + /ms/2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /nanoid/3.3.6: + resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + /nanomatch/1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + + /natural-compare/1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + dev: true + + /node-releases/2.0.11: + resolution: {integrity: sha512-+M0PwXeU80kRohZ3aT4J/OnR+l9/KD2nVLNNoRgFtnf+umQVFdGBAO2N8+nCnEi0xlh/Wk3zOGC+vNNx+uM79Q==} + 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-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /npm-run-path/5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: 4.0.0 + dev: true + + /nth-check/2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /object-copy/0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: false + + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + dev: true + + /object-visit/1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /object.pick/1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: false + + /once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /onetime/6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} + engines: {node: '>=12'} + dependencies: + mimic-fn: 4.0.0 + dev: true + + /optionator/0.9.1: + resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.3 + 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 + + /p-map/4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 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 + + /pascalcase/0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: false + + /path-dirname/1.0.2: + resolution: {integrity: sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==} + dev: false + + /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'} + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-key/4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type/3.0.0: + resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} + engines: {node: '>=4'} + dependencies: + pify: 3.0.0 + dev: false + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pathe/1.1.0: + resolution: {integrity: sha512-ODbEPR0KKHqECXW1GoxdDb+AZvULmXjVPy4rt+pGo2+TnjJTIPJQSVS6N63n8T2Ip+syHhbn52OewKicV0373w==} + 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 + + /pify/3.0.0: + resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==} + engines: {node: '>=4'} + dev: false + + /pify/4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + dev: false + + /pinia/2.1.3_typescript@4.9.5+vue@3.3.4: + resolution: {integrity: sha512-XNA/z/ye4P5rU1pieVmh0g/hSuDO98/a5UC8oSP0DNdvt6YtetJNHTrXwpwsQuflkGT34qKxAEcp7lSxXNjf/A==} + 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.0 + typescript: 4.9.5 + vue: 3.3.4 + vue-demi: 0.14.5_vue@3.3.4 + dev: false + + /pkg-types/1.0.3: + resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.2.1 + pathe: 1.1.0 + dev: true + + /posix-character-classes/0.1.1: + resolution: {integrity: sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==} + engines: {node: '>=0.10.0'} + dev: false + + /postcss-selector-parser/6.0.13: + resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss/8.4.23: + resolution: {integrity: sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.6 + 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/2.8.8: + resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dev: true + + /prismjs/1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: false + + /proxy-from-env/1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + dev: false + + /punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + engines: {node: '>=6'} + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + 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.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + dev: false + + /regex-not/1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: false + + /repeat-element/1.1.4: + resolution: {integrity: sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==} + engines: {node: '>=0.10.0'} + dev: false + + /repeat-string/1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + dev: false + + /resize-observer-polyfill/1.5.1: + resolution: {integrity: sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==} + dev: false + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-url/0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: false + + /resolve/1.22.2: + resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==} + hasBin: true + dependencies: + is-core-module: 2.12.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /restore-cursor/3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + + /ret/0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: false + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rfdc/1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + dev: true + + /robust-predicates/3.0.1: + resolution: {integrity: sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==} + dev: false + + /rollup/2.79.1: + resolution: {integrity: sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==} + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /rw/1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: false + + /rxjs/7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + dependencies: + tslib: 2.5.2 + dev: true + + /safe-regex/1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: false + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false + + /sass/1.62.1: + resolution: {integrity: sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + chokidar: 3.5.3 + immutable: 4.3.0 + source-map-js: 1.0.2 + dev: true + + /scule/1.0.0: + resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} + dev: true + + /section-matter/1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} + dependencies: + extend-shallow: 2.0.1 + kind-of: 6.0.3 + dev: false + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + + /semver/7.5.1: + resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /set-value/2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: false + + /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 + + /signal-exit/3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: true + + /slash/2.0.0: + resolution: {integrity: sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==} + engines: {node: '>=6'} + dev: false + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /slice-ansi/3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi/5.0.0: + resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} + engines: {node: '>=12'} + dependencies: + ansi-styles: 6.2.1 + is-fullwidth-code-point: 4.0.0 + dev: true + + /snapdragon-node/2.1.1: + resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 1.0.0 + isobject: 3.0.1 + snapdragon-util: 3.0.1 + dev: false + + /snapdragon-util/3.0.1: + resolution: {integrity: sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /snapdragon/0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /source-map-js/1.0.2: + resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} + engines: {node: '>=0.10.0'} + + /source-map-resolve/0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: false + + /source-map-url/0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: false + + /source-map/0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: false + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: false + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + deprecated: Please use @jridgewell/sourcemap-codec instead + dev: true + + /split-string/3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: false + + /sprintf-js/1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false + + /static-extend/0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: false + + /string-argv/0.3.2: + resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} + engines: {node: '>=0.6.19'} + dev: true + + /string-width/4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + dev: true + + /string-width/5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.0.1 + dev: true + + /strip-ansi/6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-bom-string/1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /strip-final-newline/3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} + engines: {node: '>=12'} + dev: true + + /strip-json-comments/3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: true + + /strip-literal/1.0.1: + resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==} + dependencies: + acorn: 8.8.2 + dev: true + + /stylis/4.2.0: + resolution: {integrity: sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==} + dev: false + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + + /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 + + /text-table/0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: true + + /through/2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + /to-object-path/0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: false + + /to-regex-range/2.1.1: + resolution: {integrity: sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + repeat-string: 1.6.1 + dev: false + + /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 + + /to-regex/3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: false + + /toggle-selection/1.0.6: + resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==} + dev: false + + /toml/3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + dev: false + + /tslib/1.14.1: + resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} + dev: true + + /tslib/2.5.2: + resolution: {integrity: sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA==} + dev: true + + /tsutils/3.21.0_typescript@4.9.5: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.9.5 + 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 + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /typescript/4.9.5: + resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} + engines: {node: '>=4.2.0'} + hasBin: true + + /uc.micro/1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + dev: false + + /ufo/1.1.2: + resolution: {integrity: sha512-TrY6DsjTQQgyS3E3dBaOXf0TpPD8u9FVrVYmKVegJuFw51n/YB9XPt+U6ydzFG5ZIN7+DIjPbNmXoBj9esYhgQ==} + dev: true + + /unimport/1.3.0: + resolution: {integrity: sha512-fOkrdxglsHd428yegH0wPH/6IfaSdDeMXtdRGn6en/ccyzc2aaoxiUTMrJyc6Bu+xoa18RJRPMfLUHEzjz8atw==} + dependencies: + '@rollup/pluginutils': 5.0.2 + escape-string-regexp: 5.0.0 + fast-glob: 3.2.12 + local-pkg: 0.4.3 + magic-string: 0.27.0 + mlly: 1.2.1 + pathe: 1.1.0 + pkg-types: 1.0.3 + scule: 1.0.0 + strip-literal: 1.0.1 + unplugin: 1.3.1 + transitivePeerDependencies: + - rollup + dev: true + + /union-value/1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: false + + /universalify/0.1.2: + resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} + engines: {node: '>= 4.0.0'} + dev: false + + /unplugin-auto-import/0.11.5: + resolution: {integrity: sha512-nvbL2AQwLRR8wbHpJ6L1EBVNmjN045RSedTa4NtsGRkSQFXkI1iKHs4dTqJwcKZsnFrZOAKtLPiN1/oQTObLZw==} + engines: {node: '>=14'} + peerDependencies: + '@vueuse/core': '*' + peerDependenciesMeta: + '@vueuse/core': + optional: true + dependencies: + '@antfu/utils': 0.7.2 + '@rollup/pluginutils': 5.0.2 + local-pkg: 0.4.3 + magic-string: 0.26.7 + unimport: 1.3.0 + unplugin: 1.3.1 + transitivePeerDependencies: + - rollup + dev: true + + /unplugin-element-plus/0.4.1_vite@3.2.6: + resolution: {integrity: sha512-x8L35sppkbtnAf+aSPXNsLPjCUrM0mWKgujqMIgrHiDQaGbpMlNnbN2kjP5CMclykNOw8fUCreEhtxPyzg8tmw==} + engines: {node: '>=14.19.0'} + dependencies: + '@rollup/pluginutils': 4.2.1 + es-module-lexer: 0.10.5 + magic-string: 0.26.7 + unplugin: 0.7.2_vite@3.2.6 + transitivePeerDependencies: + - esbuild + - rollup + - vite + - webpack + 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.2 + '@iconify/utils': 2.1.5 + debug: 4.3.4 + kolorist: 1.8.0 + local-pkg: 0.4.3 + unplugin: 1.3.1 + transitivePeerDependencies: + - supports-color + dev: true + + /unplugin-vue-components/0.22.12_vue@3.3.4: + resolution: {integrity: sha512-FxyzsuBvMCYPIk+8cgscGBQ345tvwVu+qY5IhE++eorkyvA4Z1TiD/HCiim+Kbqozl10i4K+z+NCa2WO2jexRA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + dependencies: + '@antfu/utils': 0.7.2 + '@rollup/pluginutils': 5.0.2 + chokidar: 3.5.3 + debug: 4.3.4 + fast-glob: 3.2.12 + local-pkg: 0.4.3 + magic-string: 0.27.0 + minimatch: 5.1.6 + resolve: 1.22.2 + unplugin: 1.3.1 + vue: 3.3.4 + transitivePeerDependencies: + - rollup + - supports-color + dev: true + + /unplugin/0.7.2_vite@3.2.6: + resolution: {integrity: sha512-m7thX4jP8l5sETpLdUASoDOGOcHaOVtgNyrYlToyQUvILUtEzEnngRBrHnAX3IKqooJVmXpoa/CwQ/QqzvGaHQ==} + peerDependencies: + esbuild: '>=0.13' + rollup: ^2.50.0 + vite: ^2.3.0 || ^3.0.0-0 + webpack: 4 || 5 + peerDependenciesMeta: + esbuild: + optional: true + rollup: + optional: true + vite: + optional: true + webpack: + optional: true + dependencies: + acorn: 8.8.2 + chokidar: 3.5.3 + vite: 3.2.6_3cl3pib2kx7jaftbqhg3ux7t34 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.4.6 + dev: true + + /unplugin/1.3.1: + resolution: {integrity: sha512-h4uUTIvFBQRxUKS2Wjys6ivoeofGhxzTe2sRWlooyjHXVttcVfV/JiavNd3d4+jty0SVV0dxGw9AkY9MwiaCEw==} + dependencies: + acorn: 8.8.2 + chokidar: 3.5.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.5.0 + dev: true + + /unset-value/1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: false + + /upath/1.2.0: + resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} + engines: {node: '>=4'} + dev: false + + /update-browserslist-db/1.0.11_browserslist@4.21.5: + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.5 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.0 + dev: true + + /urix/0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: false + + /use/3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: false + + /util-deprecate/1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: true + + /vant/3.6.11_vue@3.3.4: + resolution: {integrity: sha512-ueEu4rOePQUoeP6mjuVHogmg3t05yejrYkFCG/NMWY2haOscvQTFGDVuUazmNdjgizqL1D9rH6xV0qy2aRWF9Q==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vant/icons': 1.8.0 + '@vant/popperjs': 1.3.0 + '@vant/use': 1.5.1_vue@3.3.4 + vue: 3.3.4 + dev: false + + /vite/3.2.6_3cl3pib2kx7jaftbqhg3ux7t34: + resolution: {integrity: sha512-nTXTxYVvaQNLoW5BQ8PNNQ3lPia57gzsQU/Khv+JvzKPku8kNZL6NMUR/qwXhMG6E+g1idqEPanomJ+VZgixEg==} + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.16.14 + esbuild: 0.15.18 + postcss: 8.4.23 + resolve: 1.22.2 + rollup: 2.79.1 + sass: 1.62.1 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /vue-demi/0.14.5_vue@3.3.4: + resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==} + 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-eslint-parser/9.3.0_eslint@8.41.0: + resolution: {integrity: sha512-48IxT9d0+wArT1+3wNIy0tascRoywqSUe2E1YalIC1L8jsUGe5aJQItWfRok7DVFGz3UYvzEI7n5wiTXsCMAcQ==} + engines: {node: ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + debug: 4.3.4 + eslint: 8.41.0 + eslint-scope: 7.2.0 + eslint-visitor-keys: 3.4.1 + espree: 9.5.2 + esquery: 1.5.0 + lodash: 4.17.21 + semver: 7.5.1 + 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.0 + vue: 3.3.4 + dev: false + + /vue-router/4.2.1_vue@3.3.4: + resolution: {integrity: sha512-nW28EeifEp8Abc5AfmAShy5ZKGsGzjcnZ3L1yc2DYUo+MqbBClrRP9yda3dIekM4I50/KnEwo1wkBLf7kHH5Cw==} + peerDependencies: + vue: ^3.2.0 + dependencies: + '@vue/devtools-api': 6.5.0 + vue: 3.3.4 + dev: false + + /vue-tsc/0.40.13_typescript@4.9.5: + resolution: {integrity: sha512-xzuN3g5PnKfJcNrLv4+mAjteMd5wLm5fRhW0034OfNJZY4WhB07vhngea/XeGn7wNYt16r7syonzvW/54dcNiA==} + hasBin: true + peerDependencies: + typescript: '*' + dependencies: + '@volar/vue-language-core': 0.40.13 + '@volar/vue-typescript': 0.40.13 + typescript: 4.9.5 + 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 + + /vue3-slide-verify/1.1.4: + resolution: {integrity: sha512-er2d9TSPsF5CcmoxBfP6eSkc4IHROwXu6Ytghkwf52apXpXy2ZtW3tOgHnmFWb3GHESKxZ9bsFXqSX+fJ6hjrg==} + dependencies: + vue: 3.3.4 + dev: false + + /webpack-chain/4.12.1: + resolution: {integrity: sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==} + dependencies: + deepmerge: 1.5.2 + javascript-stringify: 1.6.0 + dev: false + + /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.4.6: + resolution: {integrity: sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==} + dev: true + + /webpack-virtual-modules/0.5.0: + resolution: {integrity: sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==} + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + dev: true + + /wrap-ansi/6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /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 + + /yaml/2.2.2: + resolution: {integrity: sha512-CBKFWExMn46Foo4cldiChEzn7S7SRV+wqiluAb6xmueD/fGyRHIhX8m14vVGgeFWjN540nKCNVj6P21eQjgTuA==} + engines: {node: '>= 14'} + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..aec5a877df4c405962ad807c17925983684b129b Binary files /dev/null and b/public/favicon.ico differ diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000000000000000000000000000000000000..de591316beaf0c44037a994442b454d81f4eb527 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/src/api/api-login.ts b/src/api/api-login.ts new file mode 100644 index 0000000000000000000000000000000000000000..ce6537e84b45388ee3f911b69c97a46687a7c83e --- /dev/null +++ b/src/api/api-login.ts @@ -0,0 +1,68 @@ +/** + * @file 登录接口配置文件 + * */ + +import { request } from '@/shared/axios'; +import type { AxiosResponse } from '@/shared/axios'; +import { getUserAuth } from '@/shared/login'; +import { ElMessage } from 'element-plus'; + +/** + * 获取授权的相关回调链接 + */ + +const params = { + community: 'opengauss', + client_id: '90aa315f895544359209920da32ff75a', +}; +export function queryPermission() { + const url = '/api-omapi/oneid/personal/center/user'; + const { token } = getUserAuth(); + + return request + .get(url, { + params, + global: true, + $doException: true, + headers: { + token, + }, + }) + .then((res: AxiosResponse) => res.data) + .catch((err) => { + const message = err?.response?.data?.message || ''; + if (message && message !== 'token expires') { + ElMessage({ + type: 'error', + message: err.message, + }); + } + }); +} + +/** + * 获取idtoken用于退出 + */ + +export function queryIDToken() { + const url = '/api-omapi/oneid/logout'; + const { token } = getUserAuth(); + return request + .get(url, { + params, + $doException: true, + headers: { + token, + }, + }) + .then((res: AxiosResponse) => res.data) + .catch((err) => { + const message = err?.response?.data?.message || ''; + if (message && message !== 'token expires') { + ElMessage({ + type: 'error', + message: err.message, + }); + } + }); +} diff --git a/src/api/api-quick-issue.ts b/src/api/api-quick-issue.ts new file mode 100644 index 0000000000000000000000000000000000000000..1971e2bcec0bd8c706565c96d8448ad404eda3c1 --- /dev/null +++ b/src/api/api-quick-issue.ts @@ -0,0 +1,187 @@ +import { request } from '@/shared/axios'; +import type { AxiosResponse } from '@/shared/axios'; +import { IssueQueryData } from '@/shared/@types/type-quick-issue'; +import { getAuthorization } from '@/shared/utils'; + +function getHeaderConfig() { + const headersConfig = { + headers: { + authorization: getAuthorization(), + }, + }; + return headersConfig; +} +/** + * 获取issue 数据 + * @name getRepoIssue + * @return {Array} + */ +export function getRepoIssue(params: IssueQueryData) { + const url = '/api-issues/issues/'; + params = JSON.parse(JSON.stringify(params)); + if ( + Array.isArray(params.label) && + Array.isArray(params.issue_state) && + Array.isArray(params.exclusion) && + Array.isArray(params.milestone) + ) { + params.exclusion = params.exclusion.join(','); + params.label = params.label.join(','); + params.issue_state = params.issue_state.join(','); + params.milestone = params.milestone.join(','); + } + return request + .get(url, { params }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} +/** + * 获取筛选条件 + * @name getRepoIssue + * @return {Array} + */ +export function getIssueSelectOption(type: string, params: object | null) { + type === 'exLabels' ? (type = 'labels') : ''; + const url = `/api-issues/issues/${type}`; + return request + .get(url, { params }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} + +/** + * 上传 issue 图片 + * @name uploadIssueImage + * @return {String} + */ +export function uploadIssueImage(params: object) { + const url = '/api-issues/image/'; + return request + .post(url, params, { + headers: { + 'Content-Type': 'multipart/form-data', + authorization: getAuthorization(), + }, + }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} + +/** + * issue 提交邮箱验证 + * @name getRepoIssue + * @return {String} + */ +export function verifySubmitterEmail(params: object) { + const url = '/api-issues/verify/'; + + return request + .post(url, params, getHeaderConfig()) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} +/** + * sig仓库查找 + * @name getRepoIssue + * @return {String} + */ +export function getReposData(params: object) { + const url = `/api-issues/repos/`; + return request + .get(url, { params }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} +/** + * 创建issue + * @name getRepoIssue + * @return {String} + */ +export function createIssue(params: object) { + const url = `/api-issues/new-issue/`; + return request + .post(url, params, getHeaderConfig()) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} + +/** + * 上传 文件 + * @name uploadFile + * @return {String} + */ +export function uploadIssueFile(params: object) { + const url = '/api-issues/attachment/'; + return request + .post(url, params, { + headers: { + 'Content-Type': 'multipart/form-data', + authorization: getAuthorization(), + }, + }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} +/** + * 获取pull 数据 + * @name getLabelColors + * @return {Array} + */ +export function getLabelColors() { + const url = '/api-issues/colors'; + return request + .get(url) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} +/** + * 获取pull 数据 + * @name getRepoPull + * @return {Array} + */ +export function getRepoPull(params: any) { + const url = '/api-issues/pulls'; + params = JSON.parse(JSON.stringify(params)); + if (typeof params.label === 'object' && typeof params.state === 'object') { + params.label = params.label.join(','); + params.state = params.state.join(','); + params.exclusion = params.exclusion.join(','); + } + return request + .get(url, { params }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} +/** + * 获取筛选条件 + * @name getPrSelectOption + * @return {Array} + */ +export function getPrSelectOption(type: string, params: object | null) { + type === 'exLabels' ? (type = 'labels') : ''; + const url = `/api-issues/pulls/${type}`; + return request + .get(url, { params }) + .then((res: AxiosResponse) => res?.data) + .catch((e: any) => { + console.error(e); + }); +} diff --git a/src/api/api-sig.ts b/src/api/api-sig.ts new file mode 100644 index 0000000000000000000000000000000000000000..c2d7ef77935a6f6d1de755909885d798b8344b54 --- /dev/null +++ b/src/api/api-sig.ts @@ -0,0 +1,71 @@ +import { request } from '@/shared/axios'; +import type { AxiosResponse } from '@/shared/axios'; +import { FeatureInfo, GroupInfo } from '@/shared/@types/type-sig'; +/** + * 获取sig landscape + * @returns {Promise} + */ +export function getSigLandscape(lang: string): Promise { + const url = '/api-dsapi/query/sig/scoreAll?community=opengauss'; + return request.get(url).then((res: AxiosResponse) => { + const data = res.data?.data; + + const info: GroupInfo[] = []; + for (let i = 0, len = data.length; i < len; i++) { + const item = data[i]; + lang === 'zh' + ? '' + : ((item.group = item.en_group), (item.feature = item.en_feature)); + if (item.group === '' && item.feature === '') { + continue; + } + + if ( + !info.find((group: GroupInfo) => { + return group.groupName === item.group; + }) + ) { + info.push({ + groupName: item.group, + features: [], + }); + } + + const groupInfo: GroupInfo | undefined = info.find((group: GroupInfo) => { + return group.groupName === item.group; + }); + + if ( + !groupInfo?.features.find((feature: any) => { + return feature.featureName === item.feature; + }) + ) { + groupInfo?.features.push({ + featureName: item.feature, + sigs: [], + }); + } + + const featureInfo: FeatureInfo | undefined = groupInfo?.features.find( + (feature: FeatureInfo) => { + return feature.featureName === item.feature; + } + ); + featureInfo?.sigs.push(item.sig_names); + } + info.sort((b: GroupInfo, a: GroupInfo) => { + return a.features.length - b.features.length; + }); + info.forEach((group: GroupInfo) => { + group.features.sort((b: FeatureInfo, a: FeatureInfo) => { + return a.sigs.length - b.sigs.length; + }); + group.features.forEach((feature: FeatureInfo) => { + feature.sigs.sort((b: string, a: string) => { + return b.toLowerCase().localeCompare(a); + }); + }); + }); + return info; + }); +} diff --git a/src/assets/category/quick-issue/quick-bg.jpg b/src/assets/category/quick-issue/quick-bg.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce2a0fd5fc4f2360b104dc0ecebc91690b940a0e Binary files /dev/null and b/src/assets/category/quick-issue/quick-bg.jpg differ diff --git a/src/assets/category/verify/img1.jpg b/src/assets/category/verify/img1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ce43f174e54e20549c4cda2dfde0ed579fc21a7d Binary files /dev/null and b/src/assets/category/verify/img1.jpg differ diff --git a/src/assets/category/verify/img2.jpg b/src/assets/category/verify/img2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1a3bd6d5b142c0dd951b59773bf84a29c800bd3e Binary files /dev/null and b/src/assets/category/verify/img2.jpg differ diff --git a/src/assets/category/verify/img3.jpg b/src/assets/category/verify/img3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..165d36f3e61db2d563f10d93eb64f13cce06f90a Binary files /dev/null and b/src/assets/category/verify/img3.jpg differ diff --git a/src/assets/category/verify/img4.jpg b/src/assets/category/verify/img4.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2046128c3fb02224eeed15b1066b119e40134144 Binary files /dev/null and b/src/assets/category/verify/img4.jpg differ diff --git a/src/assets/category/verify/img5.jpg b/src/assets/category/verify/img5.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fb4b61502c326b8c0832a618c4847290cc11d7de Binary files /dev/null and b/src/assets/category/verify/img5.jpg differ diff --git a/src/assets/category/verify/img6.jpg b/src/assets/category/verify/img6.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c13bb90e7369abf2d0c9c812bb4b2039cac04d9a Binary files /dev/null and b/src/assets/category/verify/img6.jpg differ 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/bilibili.png b/src/assets/footer/bilibili.png new file mode 100644 index 0000000000000000000000000000000000000000..11bb133e1f8e6e1471571edd053ea63828fca302 Binary files /dev/null and b/src/assets/footer/bilibili.png differ diff --git a/src/assets/footer/csdn.png b/src/assets/footer/csdn.png new file mode 100644 index 0000000000000000000000000000000000000000..0fe4ceec8e87570defebc1357a8f72aabac4ea6a Binary files /dev/null and b/src/assets/footer/csdn.png differ diff --git a/src/assets/footer/cto.png b/src/assets/footer/cto.png new file mode 100644 index 0000000000000000000000000000000000000000..6a8e658d5f8274080fee699f29fa0d961ab5ced6 Binary files /dev/null and b/src/assets/footer/cto.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-logo.svg b/src/assets/footer/footer-logo.svg new file mode 100644 index 0000000000000000000000000000000000000000..3729c7f38941deb5e76e4022a1ae1cb972ec3ac6 --- /dev/null +++ b/src/assets/footer/footer-logo.svg @@ -0,0 +1,34 @@ + + + openGauss_w + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/footer/infoq.png b/src/assets/footer/infoq.png new file mode 100644 index 0000000000000000000000000000000000000000..935607e636aad30d952614befe1adb34c6c33e14 Binary files /dev/null and b/src/assets/footer/infoq.png differ diff --git a/src/assets/footer/modb.png b/src/assets/footer/modb.png new file mode 100644 index 0000000000000000000000000000000000000000..19b18c7e09fd1b67a682b0e41798f5fe13d3c886 Binary files /dev/null and b/src/assets/footer/modb.png differ diff --git a/src/assets/footer/oschina.png b/src/assets/footer/oschina.png new file mode 100644 index 0000000000000000000000000000000000000000..93d459c054b3f33f88a4d2d0ff9978c3dbc96196 Binary files /dev/null and b/src/assets/footer/oschina.png differ diff --git a/src/assets/footer/wechat.png b/src/assets/footer/wechat.png new file mode 100644 index 0000000000000000000000000000000000000000..675383a4666ef3d350cceca9e8014efd6d4a3ecc Binary files /dev/null and b/src/assets/footer/wechat.png differ diff --git a/src/assets/footer/zhihu.png b/src/assets/footer/zhihu.png new file mode 100644 index 0000000000000000000000000000000000000000..dad400f9ce825dc89a62d75859150ebe52c59138 Binary files /dev/null and b/src/assets/footer/zhihu.png differ 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/opengauss-logo.png b/src/assets/opengauss-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5cef065c38db8854e3c78c3f1009355943401c9d Binary files /dev/null and b/src/assets/opengauss-logo.png differ 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/svg-icons/icon-add.svg b/src/assets/svg-icons/icon-add.svg new file mode 100644 index 0000000000000000000000000000000000000000..de17cbdc97bf23a2ccd38cdb0ae87a9b1c767f6d --- /dev/null +++ b/src/assets/svg-icons/icon-add.svg @@ -0,0 +1,4 @@ + +add + + 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..e0392c33c67fa4cfb48c2fabd07a183b9c751b82 --- /dev/null +++ b/src/assets/svg-icons/icon-arrow-left.svg @@ -0,0 +1,4 @@ + +arrow-left + + 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..fe354712fa0b695bcec903346b4b22c1a0597e7d --- /dev/null +++ b/src/assets/svg-icons/icon-arrow-right.svg @@ -0,0 +1,4 @@ + +arrow-right + + diff --git a/src/assets/svg-icons/icon-arrow-traingle-down.svg b/src/assets/svg-icons/icon-arrow-traingle-down.svg new file mode 100644 index 0000000000000000000000000000000000000000..c47b18d3daab5bd50578996e942bd3c3a848ead5 --- /dev/null +++ b/src/assets/svg-icons/icon-arrow-traingle-down.svg @@ -0,0 +1,4 @@ + +arrow-triangle-solid-down + + diff --git a/src/assets/svg-icons/icon-arrow-traingle-left.svg b/src/assets/svg-icons/icon-arrow-traingle-left.svg new file mode 100644 index 0000000000000000000000000000000000000000..27b72d68c910365f00aaa9a1ff97c877163e1f8a --- /dev/null +++ b/src/assets/svg-icons/icon-arrow-traingle-left.svg @@ -0,0 +1,4 @@ + +arrow-triangle-solid-left + + diff --git a/src/assets/svg-icons/icon-arrow-traingle-right.svg b/src/assets/svg-icons/icon-arrow-traingle-right.svg new file mode 100644 index 0000000000000000000000000000000000000000..b13302ad7a91fb736b2c6249a296445263103033 --- /dev/null +++ b/src/assets/svg-icons/icon-arrow-traingle-right.svg @@ -0,0 +1,4 @@ + +arrow-triangle-solid-right + + diff --git a/src/assets/svg-icons/icon-arrow-traingle-up.svg b/src/assets/svg-icons/icon-arrow-traingle-up.svg new file mode 100644 index 0000000000000000000000000000000000000000..3eb80e7ad5be628156f64f4dae1b170c1ebef2c7 --- /dev/null +++ b/src/assets/svg-icons/icon-arrow-traingle-up.svg @@ -0,0 +1,5 @@ + + +arrow-triangle-solid-up + + diff --git a/src/assets/svg-icons/icon-browse.svg b/src/assets/svg-icons/icon-browse.svg new file mode 100644 index 0000000000000000000000000000000000000000..0d2f29bb551b6bc099a572feee3c47e2a964a73b --- /dev/null +++ b/src/assets/svg-icons/icon-browse.svg @@ -0,0 +1,4 @@ + +browse + + diff --git a/src/assets/svg-icons/icon-calendar.svg b/src/assets/svg-icons/icon-calendar.svg new file mode 100644 index 0000000000000000000000000000000000000000..fcc7b24701568aa76cee47f8045476be08655a99 --- /dev/null +++ b/src/assets/svg-icons/icon-calendar.svg @@ -0,0 +1,4 @@ + +calendar + + diff --git a/src/assets/svg-icons/icon-cancel-solid.svg b/src/assets/svg-icons/icon-cancel-solid.svg new file mode 100644 index 0000000000000000000000000000000000000000..43f8b5dfbf721fe892323368b78a9553dd4f6b32 --- /dev/null +++ b/src/assets/svg-icons/icon-cancel-solid.svg @@ -0,0 +1,4 @@ + +cancel-solid + + diff --git a/src/assets/svg-icons/icon-cancel.svg b/src/assets/svg-icons/icon-cancel.svg new file mode 100644 index 0000000000000000000000000000000000000000..d739028ec0ed16920265d40e2973213e79a2ee37 --- /dev/null +++ b/src/assets/svg-icons/icon-cancel.svg @@ -0,0 +1,4 @@ + +cancel + + diff --git a/src/assets/svg-icons/icon-checked.svg b/src/assets/svg-icons/icon-checked.svg new file mode 100644 index 0000000000000000000000000000000000000000..1ed90de5901b8b5b231d6aac0345ca93b6032781 --- /dev/null +++ b/src/assets/svg-icons/icon-checked.svg @@ -0,0 +1,5 @@ + +checked + + + 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..f7ab44679c94dc6d46fae0d3944ed60ea3292384 --- /dev/null +++ b/src/assets/svg-icons/icon-chevron-down.svg @@ -0,0 +1,4 @@ + + + \ No newline at end of file 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..52bee9e625bf4877fca2baa1040c22bc0a8de792 --- /dev/null +++ b/src/assets/svg-icons/icon-chevron-left.svg @@ -0,0 +1,4 @@ + +chevron-left + + 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..b2ddf739080111e1adea1e197ebc8bb677561ae1 --- /dev/null +++ b/src/assets/svg-icons/icon-chevron-right.svg @@ -0,0 +1,4 @@ + +chevron-right + + 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..29bd404e011e6742092abf06e7c9ed4553c1d88a --- /dev/null +++ b/src/assets/svg-icons/icon-chevron-up.svg @@ -0,0 +1,4 @@ + +chevron-up + + diff --git a/src/assets/svg-icons/icon-comment.svg b/src/assets/svg-icons/icon-comment.svg new file mode 100644 index 0000000000000000000000000000000000000000..bcfad8936e59da9d3f5e5092753fb1b9d393bd5b --- /dev/null +++ b/src/assets/svg-icons/icon-comment.svg @@ -0,0 +1,4 @@ + +comment + + diff --git a/src/assets/svg-icons/icon-copy.svg b/src/assets/svg-icons/icon-copy.svg new file mode 100644 index 0000000000000000000000000000000000000000..b04681aea05166828b515b73d143e8ada073ea78 --- /dev/null +++ b/src/assets/svg-icons/icon-copy.svg @@ -0,0 +1,4 @@ + +copy + + diff --git a/src/assets/svg-icons/icon-delete.svg b/src/assets/svg-icons/icon-delete.svg new file mode 100644 index 0000000000000000000000000000000000000000..40827cd99252d65b4fabb76dac3d903ba4096f28 --- /dev/null +++ b/src/assets/svg-icons/icon-delete.svg @@ -0,0 +1,4 @@ + +delete + + diff --git a/src/assets/svg-icons/icon-dividers.svg b/src/assets/svg-icons/icon-dividers.svg new file mode 100644 index 0000000000000000000000000000000000000000..2509bf149701da458ac9bf8a28772a3602734087 --- /dev/null +++ b/src/assets/svg-icons/icon-dividers.svg @@ -0,0 +1,4 @@ + +dividers + + diff --git a/src/assets/svg-icons/icon-doc.svg b/src/assets/svg-icons/icon-doc.svg new file mode 100644 index 0000000000000000000000000000000000000000..44b0f8077fb0a13a8b148150cb30659c5f7d44df --- /dev/null +++ b/src/assets/svg-icons/icon-doc.svg @@ -0,0 +1,4 @@ + +doc + + diff --git a/src/assets/svg-icons/icon-done-outline.svg b/src/assets/svg-icons/icon-done-outline.svg new file mode 100644 index 0000000000000000000000000000000000000000..22d49d60e97a539b8dde8004b9e335bfc95caa0a --- /dev/null +++ b/src/assets/svg-icons/icon-done-outline.svg @@ -0,0 +1,4 @@ + +done-outline + + diff --git a/src/assets/svg-icons/icon-done-solid.svg b/src/assets/svg-icons/icon-done-solid.svg new file mode 100644 index 0000000000000000000000000000000000000000..e17ccdb885cd7fe376a899d10a231118483bb7d3 --- /dev/null +++ b/src/assets/svg-icons/icon-done-solid.svg @@ -0,0 +1,4 @@ + +done-solid + + diff --git a/src/assets/svg-icons/icon-done.svg b/src/assets/svg-icons/icon-done.svg new file mode 100644 index 0000000000000000000000000000000000000000..e295ef2ed58c49e901e3621414a6ef6b1f43c0e3 --- /dev/null +++ b/src/assets/svg-icons/icon-done.svg @@ -0,0 +1,4 @@ + +done + + diff --git a/src/assets/svg-icons/icon-download.svg b/src/assets/svg-icons/icon-download.svg new file mode 100644 index 0000000000000000000000000000000000000000..fc5d0ab85ec1ab679da23f72f8467edda9c37618 --- /dev/null +++ b/src/assets/svg-icons/icon-download.svg @@ -0,0 +1,4 @@ + +download + + diff --git a/src/assets/svg-icons/icon-ellipsis.svg b/src/assets/svg-icons/icon-ellipsis.svg new file mode 100644 index 0000000000000000000000000000000000000000..a55a52f95f44de9d9ee7b77e0cede26cf5b92cc3 --- /dev/null +++ b/src/assets/svg-icons/icon-ellipsis.svg @@ -0,0 +1,6 @@ + +ellipsis + + + + diff --git a/src/assets/svg-icons/icon-filter.svg b/src/assets/svg-icons/icon-filter.svg new file mode 100644 index 0000000000000000000000000000000000000000..e5ce5f489df32d6fcc848ffe2d324f2ced8a8cc2 --- /dev/null +++ b/src/assets/svg-icons/icon-filter.svg @@ -0,0 +1,4 @@ + +filter + + diff --git a/src/assets/svg-icons/icon-gitee.svg b/src/assets/svg-icons/icon-gitee.svg new file mode 100644 index 0000000000000000000000000000000000000000..fb85c6404d25763cbdd51161c192acc4f6f504c0 --- /dev/null +++ b/src/assets/svg-icons/icon-gitee.svg @@ -0,0 +1,11 @@ + + gitee + + + + + + \ No newline at end of file diff --git a/src/assets/svg-icons/icon-home.svg b/src/assets/svg-icons/icon-home.svg new file mode 100644 index 0000000000000000000000000000000000000000..7da985cf194139603e3923b3da34580d197a5fdc --- /dev/null +++ b/src/assets/svg-icons/icon-home.svg @@ -0,0 +1,4 @@ + +home + + diff --git a/src/assets/svg-icons/icon-link.svg b/src/assets/svg-icons/icon-link.svg new file mode 100644 index 0000000000000000000000000000000000000000..3414d33f1d0d240af2831409175c8da9cbe847eb --- /dev/null +++ b/src/assets/svg-icons/icon-link.svg @@ -0,0 +1,4 @@ + +link + + diff --git a/src/assets/svg-icons/icon-live-streaming.svg b/src/assets/svg-icons/icon-live-streaming.svg new file mode 100644 index 0000000000000000000000000000000000000000..8212eddb77ca8451ec8ff8138d1091f529017184 --- /dev/null +++ b/src/assets/svg-icons/icon-live-streaming.svg @@ -0,0 +1,4 @@ + +live-streaming + + 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-mail.svg b/src/assets/svg-icons/icon-mail.svg new file mode 100644 index 0000000000000000000000000000000000000000..7d799b7d4c631216ca49d46e4eb156ff967aa797 --- /dev/null +++ b/src/assets/svg-icons/icon-mail.svg @@ -0,0 +1,4 @@ + +icon-mail + + \ No newline at end of file diff --git a/src/assets/svg-icons/icon-map-pin.svg b/src/assets/svg-icons/icon-map-pin.svg new file mode 100644 index 0000000000000000000000000000000000000000..1b38890c84e2d79381a4128a17c20fb4ab1909ce --- /dev/null +++ b/src/assets/svg-icons/icon-map-pin.svg @@ -0,0 +1,4 @@ + +map-pin + + diff --git a/src/assets/svg-icons/icon-menu.svg b/src/assets/svg-icons/icon-menu.svg new file mode 100644 index 0000000000000000000000000000000000000000..312f46bad88450784f69023d49fd581e835f4a15 --- /dev/null +++ b/src/assets/svg-icons/icon-menu.svg @@ -0,0 +1,4 @@ + +iconm-menu + + diff --git a/src/assets/svg-icons/icon-moon-outline.svg b/src/assets/svg-icons/icon-moon-outline.svg new file mode 100644 index 0000000000000000000000000000000000000000..2252db7a18fe189d6fa46057acfd6ab1fd6b6377 --- /dev/null +++ b/src/assets/svg-icons/icon-moon-outline.svg @@ -0,0 +1,4 @@ + +moon-outline + + diff --git a/src/assets/svg-icons/icon-moon-solid.svg b/src/assets/svg-icons/icon-moon-solid.svg new file mode 100644 index 0000000000000000000000000000000000000000..290fb5f388a464e35c84116c9f5e1c59ecff4d2a --- /dev/null +++ b/src/assets/svg-icons/icon-moon-solid.svg @@ -0,0 +1,4 @@ + +moon-solid + + diff --git a/src/assets/svg-icons/icon-more.svg b/src/assets/svg-icons/icon-more.svg new file mode 100644 index 0000000000000000000000000000000000000000..c5b5317faa1f5d9a9071b145c3a2f48e98e891c4 --- /dev/null +++ b/src/assets/svg-icons/icon-more.svg @@ -0,0 +1,4 @@ + +more + + diff --git a/src/assets/svg-icons/icon-pulldown.svg b/src/assets/svg-icons/icon-pulldown.svg new file mode 100644 index 0000000000000000000000000000000000000000..10685a6f586b117f6934c4c5b2b5e95fb7224f9c --- /dev/null +++ b/src/assets/svg-icons/icon-pulldown.svg @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/src/assets/svg-icons/icon-refresh.svg b/src/assets/svg-icons/icon-refresh.svg new file mode 100644 index 0000000000000000000000000000000000000000..2acdac4c4bfb0d5071107068f8376257f1691d7a --- /dev/null +++ b/src/assets/svg-icons/icon-refresh.svg @@ -0,0 +1,4 @@ + +refresh + + diff --git a/src/assets/svg-icons/icon-required-fields.svg b/src/assets/svg-icons/icon-required-fields.svg new file mode 100644 index 0000000000000000000000000000000000000000..af1ab576e46ca26740bf72707f90280ed808dc80 --- /dev/null +++ b/src/assets/svg-icons/icon-required-fields.svg @@ -0,0 +1,4 @@ + +required-fields + + diff --git a/src/assets/svg-icons/icon-search.svg b/src/assets/svg-icons/icon-search.svg new file mode 100644 index 0000000000000000000000000000000000000000..846548ace11935cdba25d0444c7dcf40c44ec565 --- /dev/null +++ b/src/assets/svg-icons/icon-search.svg @@ -0,0 +1,4 @@ + +search + + diff --git a/src/assets/svg-icons/icon-setting.svg b/src/assets/svg-icons/icon-setting.svg new file mode 100644 index 0000000000000000000000000000000000000000..787c08346b212bfbc2c812ffedd8fa920c46a418 --- /dev/null +++ b/src/assets/svg-icons/icon-setting.svg @@ -0,0 +1,16 @@ + + + settings_outlined@1x + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/assets/svg-icons/icon-star-outlined.svg b/src/assets/svg-icons/icon-star-outlined.svg new file mode 100644 index 0000000000000000000000000000000000000000..edcc7c2fef7601dcc4803ed29630171fbbbb1d1b --- /dev/null +++ b/src/assets/svg-icons/icon-star-outlined.svg @@ -0,0 +1,4 @@ + +star-outlined + + diff --git a/src/assets/svg-icons/icon-star-solid.svg b/src/assets/svg-icons/icon-star-solid.svg new file mode 100644 index 0000000000000000000000000000000000000000..aedbbb1b64ebbacacd6aa3995ca3b9a7a3876d05 --- /dev/null +++ b/src/assets/svg-icons/icon-star-solid.svg @@ -0,0 +1,4 @@ + +star-solid + + diff --git a/src/assets/svg-icons/icon-sun-outline.svg b/src/assets/svg-icons/icon-sun-outline.svg new file mode 100644 index 0000000000000000000000000000000000000000..eb55e9797f66427d52291c243b2e4011725f1167 --- /dev/null +++ b/src/assets/svg-icons/icon-sun-outline.svg @@ -0,0 +1,4 @@ + +sun-outline + + diff --git a/src/assets/svg-icons/icon-sun-solid.svg b/src/assets/svg-icons/icon-sun-solid.svg new file mode 100644 index 0000000000000000000000000000000000000000..478413aaf74f2acf09b9c8546b94749e5f24d36a --- /dev/null +++ b/src/assets/svg-icons/icon-sun-solid.svg @@ -0,0 +1,4 @@ + +sun-solid + + diff --git a/src/assets/svg-icons/icon-tag.svg b/src/assets/svg-icons/icon-tag.svg new file mode 100644 index 0000000000000000000000000000000000000000..98b1a28227df5563a47733c026b9190481450f1d --- /dev/null +++ b/src/assets/svg-icons/icon-tag.svg @@ -0,0 +1,4 @@ + +tag + + diff --git a/src/assets/svg-icons/icon-time.svg b/src/assets/svg-icons/icon-time.svg new file mode 100644 index 0000000000000000000000000000000000000000..314459da80eaf79aefc03aceeedc9779f550e590 --- /dev/null +++ b/src/assets/svg-icons/icon-time.svg @@ -0,0 +1,4 @@ + +time + + diff --git a/src/assets/svg-icons/icon-tips.svg b/src/assets/svg-icons/icon-tips.svg new file mode 100644 index 0000000000000000000000000000000000000000..353019407e50a7ff8e342b499dcc98abce0bcbcf --- /dev/null +++ b/src/assets/svg-icons/icon-tips.svg @@ -0,0 +1,4 @@ + +tips + + diff --git a/src/assets/svg-icons/icon-toggle-off.svg b/src/assets/svg-icons/icon-toggle-off.svg new file mode 100644 index 0000000000000000000000000000000000000000..0649a7e4dd595b8d7fa349c234b67b2fb6db8922 --- /dev/null +++ b/src/assets/svg-icons/icon-toggle-off.svg @@ -0,0 +1,4 @@ + +toggle-off + + diff --git a/src/assets/svg-icons/icon-toggle-on.svg b/src/assets/svg-icons/icon-toggle-on.svg new file mode 100644 index 0000000000000000000000000000000000000000..4c26e9e81beb50b380df8699035d563a414a41d7 --- /dev/null +++ b/src/assets/svg-icons/icon-toggle-on.svg @@ -0,0 +1,4 @@ + +toggle-on + + diff --git a/src/assets/svg-icons/icon-unchecked.svg b/src/assets/svg-icons/icon-unchecked.svg new file mode 100644 index 0000000000000000000000000000000000000000..1c36619f7297fe06546f4b9c6b4d8fb3c0ffb114 --- /dev/null +++ b/src/assets/svg-icons/icon-unchecked.svg @@ -0,0 +1,4 @@ + +unchecked + + diff --git a/src/assets/svg-icons/icon-user.svg b/src/assets/svg-icons/icon-user.svg new file mode 100644 index 0000000000000000000000000000000000000000..302067cbb58eff28803c32d2e4d27fb25531b1d7 --- /dev/null +++ b/src/assets/svg-icons/icon-user.svg @@ -0,0 +1,4 @@ + +user + + diff --git a/src/assets/svg-icons/icon-video.svg b/src/assets/svg-icons/icon-video.svg new file mode 100644 index 0000000000000000000000000000000000000000..f9cd5ecc73fa987734770178d5fb2f4abfce59b5 --- /dev/null +++ b/src/assets/svg-icons/icon-video.svg @@ -0,0 +1,4 @@ + +video + + diff --git a/src/components/AppContent.vue b/src/components/AppContent.vue new file mode 100644 index 0000000000000000000000000000000000000000..c6390b5e2bb9b183d8789c357926ec152fb77d83 --- /dev/null +++ b/src/components/AppContent.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/src/components/AppEditor.vue b/src/components/AppEditor.vue new file mode 100644 index 0000000000000000000000000000000000000000..c5553011b9d94ea469dc14e2441a85219fae21e2 --- /dev/null +++ b/src/components/AppEditor.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/AppFooter.vue b/src/components/AppFooter.vue new file mode 100644 index 0000000000000000000000000000000000000000..cc7f4bcf77c17d82311edfa54366eb6f6b3b3c01 --- /dev/null +++ b/src/components/AppFooter.vue @@ -0,0 +1,463 @@ + + + + + diff --git a/src/components/AppHeader.vue b/src/components/AppHeader.vue new file mode 100644 index 0000000000000000000000000000000000000000..3ac3c975c0308d5393f324df2587cd529595b17b --- /dev/null +++ b/src/components/AppHeader.vue @@ -0,0 +1,261 @@ + + + + + diff --git a/src/components/AppIssue.vue b/src/components/AppIssue.vue new file mode 100644 index 0000000000000000000000000000000000000000..df471111794e26e9758e9443485a891801b46411 --- /dev/null +++ b/src/components/AppIssue.vue @@ -0,0 +1,1506 @@ + + + + + + diff --git a/src/components/AppPull.vue b/src/components/AppPull.vue new file mode 100644 index 0000000000000000000000000000000000000000..7dd536354d6bd7c79863913724ba2c900d021448 --- /dev/null +++ b/src/components/AppPull.vue @@ -0,0 +1,1272 @@ + + + + + + diff --git a/src/components/AppSlideVerify.vue b/src/components/AppSlideVerify.vue new file mode 100644 index 0000000000000000000000000000000000000000..c9c1c27bf4f7e3b1fdb6a7ec88674b22bed6b599 --- /dev/null +++ b/src/components/AppSlideVerify.vue @@ -0,0 +1,236 @@ + + + diff --git a/src/components/DocAnchor.vue b/src/components/DocAnchor.vue new file mode 100644 index 0000000000000000000000000000000000000000..7df8643019c470bbd8282354ca28b7be3337717c --- /dev/null +++ b/src/components/DocAnchor.vue @@ -0,0 +1,138 @@ + + + + diff --git a/src/components/HeaderNav.vue b/src/components/HeaderNav.vue new file mode 100644 index 0000000000000000000000000000000000000000..0e24d637655983f58b1e32a958590ab040a37609 --- /dev/null +++ b/src/components/HeaderNav.vue @@ -0,0 +1,225 @@ + + + + + diff --git a/src/components/ONav.vue b/src/components/ONav.vue new file mode 100644 index 0000000000000000000000000000000000000000..d772188ec5e6432811f694d22e21242ad5d81a02 --- /dev/null +++ b/src/components/ONav.vue @@ -0,0 +1,95 @@ + + + + diff --git a/src/components/SigLandscapeFeature.vue b/src/components/SigLandscapeFeature.vue new file mode 100644 index 0000000000000000000000000000000000000000..aea18eeb82b068e5c25728aa3a93ee4ae0040bc4 --- /dev/null +++ b/src/components/SigLandscapeFeature.vue @@ -0,0 +1,163 @@ + + + + + diff --git a/src/components/hooks/useClickOutside.ts b/src/components/hooks/useClickOutside.ts new file mode 100644 index 0000000000000000000000000000000000000000..19defd0b6141d40b55ba61f8b0b070ba491370a7 --- /dev/null +++ b/src/components/hooks/useClickOutside.ts @@ -0,0 +1,20 @@ +import { ref, onMounted, onUnmounted, 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/data/quick-issue/quick-issue.ts b/src/data/quick-issue/quick-issue.ts new file mode 100644 index 0000000000000000000000000000000000000000..d0d1ed0857438715174a13c993da7e591a8ff71d --- /dev/null +++ b/src/data/quick-issue/quick-issue.ts @@ -0,0 +1,54 @@ +export default { + PRIORITY: [ + { + id: 0, + value: '不指定', + }, + { + id: 1, + value: '不重要', + }, + { + id: 2, + value: '次要', + }, + { + id: 3, + value: '主要', + }, + { + id: 4, + value: '严重', + }, + ], + ISSUE_STATE: [ + '待办的', + '进行中', + '已完成', + '已拒绝', + '已确认', + '设计中', + '开发中', + '已验证', + '修复中', + '已取消', + '已挂起', + '新建', + '已接纳', + ], + SOLT_TIME: ['提交时间', '更新时间'], + PR_STATE: [ + { + VALUE: 'open', + TEXT: '开启的', + }, + { + VALUE: 'closed', + TEXT: '关闭的', + }, + { + VALUE: 'merged', + TEXT: '合入的', + }, + ], +}; diff --git a/src/i18n/common/common-en.ts b/src/i18n/common/common-en.ts new file mode 100644 index 0000000000000000000000000000000000000000..f10006c2b9bb8babd9589ad17485c3c4b7826a8f --- /dev/null +++ b/src/i18n/common/common-en.ts @@ -0,0 +1,250 @@ +import { + GITEE_LINK, + DATA_LINK, + STATUS_LINK, + GIYHUB_LINK, +} from '@/shared/url-config'; +export default { + require_field: `必填`, + COMMON_CONFIG: { + DOWNLOAD: `Download`, + ISO: `Software Packages`, + SUPPORTTOOLS: `Support Tools`, + DOCS: `Documentation`, + MOOC: `Mooc`, + KNOWLEDGE: `Knowledge`, + ADVANCED: `Advanced`, + COMMUNITY: `Community`, + CONTRIBUTION: `Contribution`, + ONLINECOMMUNICATION: `Communication`, + MEMBER: `Organization`, + USERPRACTICE: `User Practice`, + STATISTICS: `Statistics`, + NEWS: `News`, + BLOG: `Blog`, + VIDEO: `Videos`, + EVENTS: `Events`, + CERTIFICATION: `Certification`, + SECURITY: `Vulnerability Report`, + ADVISORIES: `Security Advisories`, + CVE: `CVE`, + TAG: `Tag filter`, + BROWSE: `Browse`, + TIMES: `times`, + TIME: `Time`, + AUTHOR: `Author`, + TAGS: `Tags`, + ALL: `All`, + PREV: `Previous:`, + NEXT: `Next:`, + STRATEGY: `Post Your Blog`, + }, + NAV_ROUTER_CONFIG: [ + { + NAME: `Download`, + ID: `download`, + CHILDREN: [ + { + NAME: `Software Packages`, + ID: `iso`, + PATH: `/download/`, + }, + { + NAME: `Support Tools`, + ID: `supporttools`, + PATH: `/supporttools/`, + }, + ], + CLASS: [`download`, `supporttools`], + }, + { + NAME: `Learning`, + ID: `learning`, + CHILDREN: [ + { + NAME: `Documentation`, + PATH: ``, + ID: `docs`, + IS_OPEN_WINDOW: 1, + }, + ], + CLASS: [`learning`], + }, + { + NAME: `Community`, + ID: `community`, + CHILDREN: [ + { + NAME: `Contribution`, + ID: `contribution`, + PATH: `/contribution/`, + }, + { + NAME: `Communication`, + ID: `onlineCommunication`, + PATH: `/community/onlineCommunication/`, + }, + { + NAME: `Organization`, + ID: `member`, + PATH: `/member/`, + }, + { + NAME: `User Practice`, + ID: `userPractice`, + PATH: `/userPractice/`, + }, + { + NAME: `Statistics`, + ID: `statistics`, + PATH: `${DATA_LINK}zh/overview`, + IS_OPEN_MINISITE_WINDOW: 1, + }, + ], + CLASS: [`contribution`, `member`, `community`, `onlineCommunication`], + }, + { + NAME: `Connect`, + ID: `connect`, + CHILDREN: [ + { + NAME: `News`, + ID: `News`, + PATH: `/news/`, + }, + { + NAME: `Blog`, + ID: `blog`, + PATH: `/blogs/`, + }, + { + NAME: `Events`, + ID: `events`, + PATH: `/events/`, + }, + { + NAME: `Videos`, + ID: `video`, + PATH: `/video/`, + }, + ], + CLASS: [`news`, `blog`, `video`, `events`], + }, + { + NAME: `Certification`, + ID: `Certification`, + CHILDREN: [ + { + NAME: `Distribution Certification`, + ID: `certification`, + PATH: `/certification/`, + }, + { + NAME: `oGSP Certification`, + ID: `ogsp`, + PATH: `/ogsp/`, + }, + ], + CLASS: [`certification`, `ogsp`], + }, + { + NAME: `Security`, + ID: `discovery`, + CHILDREN: [ + { + NAME: `Vulnerability Report`, + ID: `security`, + PATH: `/security/`, + }, + { + NAME: `Security Advisories`, + ID: `advisories`, + PATH: `/security-advisories/`, + }, + { + NAME: `CVE`, + ID: `cve`, + PATH: `/cve/`, + }, + ], + CLASS: [`security`, `advisories`, `cve`], + }, + { + NAME: `Code`, + ID: `code`, + CHILDREN: [ + { + NAME: `Gitee`, + PATH: `${GITEE_LINK}opengauss`, + IS_OPEN_MINISITE_WINDOW: 1, + }, + { + NAME: `Github`, + PATH: `${GIYHUB_LINK}opengauss-mirror`, + IS_OPEN_MINISITE_WINDOW: 1, + }, + ], + CLASS: [`code`], + }, + ], + LANG: `English`, + LANG_LIST: [`中文`, `English`], + USER_CENTER: `User Center`, + LOGOUT: `Logout`, + GITTE: `Source code`, + CODE: `CODE`, + FOOTER: { + COPY_RIGHT: `Copyright © openGauss 2023. All rights reserved.`, + RIGHT_LIST: [ + { + NAME: `Trademark`, + URL: `/en/brand/`, + TARGET: `_self`, + }, + { + NAME: `Privacy Policy`, + URL: `/en/privacyPolicy/`, + TARGET: `_self`, + }, + { + NAME: `Legal Notice`, + URL: `/en/legal/`, + TARGET: `_self`, + }, + { + NAME: `About Us`, + URL: `/en/aboutUs/`, + TARGET: `_self`, + }, + { + NAME: `Service Status`, + URL: STATUS_LINK, + TARGET: `_blank`, + }, + ], + QR_CODE: `WeChat Subscription`, + }, + BUILDING: { + BUILDING: `Building`, + BUILDINGMES: `Coming soon…`, + }, + SEARCH: { + BROWSEHISTORY: `History`, + CLEAN: `Clean up`, + TOPSEARCH: `Top search`, + CHANGE: `Change`, + PLEACHOLDER: `Please enter the content`, + }, + PREV: `Prev`, + NEXT: `Next`, + ALL: `All`, + TYPE: `Type`, + VIEW_MORE: `View More`, + COOKIE: { + TEXT: [ + `This site uses cookies. By continuing to browse the site you are agreeing to our use of cookies.`, + `Read our privacy policy.`, + ], + PATH: `/en/privacyPolicy/`, + }, +}; diff --git a/src/i18n/common/common-zh.ts b/src/i18n/common/common-zh.ts new file mode 100644 index 0000000000000000000000000000000000000000..800a81fd5f29055550aed42c94e481445aa46bc2 --- /dev/null +++ b/src/i18n/common/common-zh.ts @@ -0,0 +1,284 @@ +import { + GITEE_LINK, + DATA_LINK, + GIYHUB_LINK, + STATUS_LINK, +} from '@/shared/url-config'; +export default { + REQUIRE_FIELD: `必填`, + COMMON_CONFIG: { + DOWNLOAD: `下载`, + ISO: `软件包`, + SUPPORTTOOLS: `支持工具`, + DOCS: `文档`, + MOOC: `慕课`, + KNOWLEDGE: `知识图谱`, + ADVANCED: `学习进阶`, + COMMUNITY: `社区`, + CONTRIBUTION: `社区贡献`, + ONLINECOMMUNICATION: `线上交流`, + MEMBER: `社区组织`, + USERPRACTICE: `用户实践`, + STATISTICS: `贡献看板`, + NEWS: `新闻`, + BLOG: `博客`, + VIDEO: `视频`, + EVENTS: `活动`, + SUMMIT: `峰会`, + CERTIFICATION: `发行版认证`, + TRAINING: `培训认证`, + SECURITY: `漏洞管理`, + ADVISORIES: `安全公告`, + CVE: `CVE`, + TAG: `Tag筛选`, + BROWSE: `浏览`, + TIMES: `次`, + TIME: `时间`, + AUTHOR: `作者`, + TAGS: `标签`, + ALL: `全部`, + PREV: `上一篇:`, + NEXT: `下一篇:`, + STRATEGY: `欢迎投稿`, + }, + NAV_ROUTER_CONFIG: [ + { + NAME: `下载`, + ID: `download`, + CHILDREN: [ + { + NAME: `软件包`, + ID: `iso`, + PATH: `/download/`, + }, + { + NAME: `支持工具`, + ID: `supporttools`, + PATH: `/supporttools/`, + }, + ], + CLASS: [`download`, `supporttools`], + }, + { + NAME: `学习`, + ID: `learning`, + CHILDREN: [ + { + NAME: `文档`, + PATH: ``, + ID: `docs`, + IS_OPEN_WINDOW: 1, + }, + { + NAME: `知识图谱`, + ID: `knowledge`, + PATH: `/knowledge/`, + }, + { + NAME: `学习进阶`, + ID: `advanced`, + PATH: `/advanced/`, + }, + ], + CLASS: [`learning`, `knowledge`, `advanced`], + }, + { + NAME: `社区`, + ID: `community`, + CHILDREN: [ + { + NAME: `社区贡献`, + ID: `contribution`, + PATH: `/contribution/`, + }, + { + NAME: `线上交流`, + ID: `onlineCommunication`, + PATH: `/community/onlineCommunication/`, + }, + { + NAME: `社区组织`, + ID: `member`, + PATH: `/member/`, + }, + { + NAME: `用户实践`, + ID: `userPractice`, + PATH: `/userPractice/`, + }, + { + NAME: `贡献看板`, + ID: `statistics`, + PATH: `${DATA_LINK}zh/overview`, + IS_OPEN_MINISITE_WINDOW: 1, + }, + ], + CLASS: [ + `contribution`, + `member`, + `userPractice`, + `community`, + `onlineCommunication`, + ], + }, + { + NAME: `互动`, + ID: `connect`, + CHILDREN: [ + { + NAME: `新闻`, + ID: `news`, + PATH: `/news/`, + }, + { + NAME: `博客`, + ID: `blog`, + PATH: `/blogs/`, + }, + { + NAME: `活动`, + ID: `events`, + PATH: `/events/`, + }, + { + NAME: `视频`, + ID: `video`, + PATH: `/video/`, + }, + { + NAME: `峰会`, + ID: `summit`, + PATH: `/summit/devday2023/`, + // IS_OPEN_MINISITE_WINDOW: 1, + }, + ], + CLASS: [`news`, `blog`, `video`, `events`, `summit`], + }, + { + NAME: `认证`, + ID: `Certification`, + CHILDREN: [ + { + NAME: `发行版认证`, + ID: `certification`, + PATH: `/certification/`, + }, + { + NAME: `兼容性列表`, + ID: `compatibility`, + PATH: `/compatibility/`, + }, + { + NAME: `服务商认证`, + ID: `ogsp`, + PATH: `/ogsp/`, + }, + { + NAME: `培训认证`, + ID: `training`, + PATH: `/training/`, + }, + ], + CLASS: [`certification`, `training`, `ogsp`], + }, + { + NAME: `安全`, + ID: `discovery`, + CHILDREN: [ + { + NAME: `漏洞管理`, + ID: `security`, + PATH: `/security/`, + }, + { + NAME: `安全公告`, + ID: `advisories`, + PATH: `/security-advisories/`, + }, + { + NAME: `CVE`, + ID: `cve`, + PATH: `/cve/`, + }, + ], + CLASS: [`security`, `advisories`, `cve`], + }, + { + NAME: `代码`, + ID: `code`, + CHILDREN: [ + { + NAME: `Gitee`, + PATH: `${GITEE_LINK}opengauss`, + IS_OPEN_MINISITE_WINDOW: 1, + }, + { + NAME: `Github`, + PATH: `${GIYHUB_LINK}opengauss-mirror`, + IS_OPEN_MINISITE_WINDOW: 1, + }, + ], + CLASS: [`code`], + }, + ], + LANG: `中文`, + LANG_LIST: [`中文`, `English`], + USER_CENTER: `个人中心`, + LOGOUT: `退出登录`, + GITTE: `源码`, + CODE: `代码`, + FOOTER: { + COPY_RIGHT: `版权所有 © openGauss 2023 保留一切权利`, + RIGHT_LIST: [ + { + NAME: `品牌`, + URL: `/zh/brand/`, + TARGET: `_self`, + }, + { + NAME: `隐私政策`, + URL: `/zh/privacyPolicy/`, + TARGET: `_self`, + }, + { + NAME: `法律声明`, + URL: `/zh/legal/`, + TARGET: `_self`, + }, + { + NAME: `关于我们`, + URL: `/zh/aboutUs/`, + TARGET: `_self`, + }, + { + NAME: `服务状态`, + URL: STATUS_LINK, + TARGET: `_blank`, + }, + ], + QR_CODE: `扫码关注公众号`, + }, + BUILDING: { + BUILDING: `建设中`, + BUILDINGMES: `敬请期待...`, + }, + SEARCH: { + BROWSEHISTORY: `历史记录`, + CLEAN: `清除`, + TOPSEARCH: `热门搜索`, + CHANGE: `换一批`, + PLEACHOLDER: `请输入内容`, + }, + PREV: `上一页`, + NEXT: `下一页`, + ALL: `全部`, + TYPE: `类型`, + VIEW_MORE: `查看更多`, + COOKIE: { + TEXT: [ + `本站点使用Cookies,继续浏览表示您同意我们使用Cookies。`, + `Cookies和隐私政策。`, + ], + PATH: `/zh/privacyPolicy/`, + }, +}; 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..66abe785143a074daa35b2c7ddd8d79cf51bc68b --- /dev/null +++ b/src/i18n/index.ts @@ -0,0 +1,25 @@ +import { createI18n } from 'vue-i18n'; + +import common from './common'; +import quickIssue from './quick-issue'; + +const messages = { + zh: { + common: common.zh, + quickIssue: quickIssue.zh, + }, + en: { + common: common.en, + quickIssue: quickIssue.en, + }, +}; + +const i18n = createI18n({ + globalInjection: true, + locale: 'zh', + legacy: false, + messages, + global: true, +}); + +export default i18n; diff --git a/src/i18n/quick-issue/index.ts b/src/i18n/quick-issue/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..467c263250c2f3317c22904ac873a0e632c08054 --- /dev/null +++ b/src/i18n/quick-issue/index.ts @@ -0,0 +1,7 @@ +import zh from './quick-issue-zh'; +import en from './quick-issue-en'; + +export default { + zh, + en, +}; diff --git a/src/i18n/quick-issue/quick-issue-en.ts b/src/i18n/quick-issue/quick-issue-en.ts new file mode 100644 index 0000000000000000000000000000000000000000..c0cb44a501381a094c327b61a1cc67a33706b203 --- /dev/null +++ b/src/i18n/quick-issue/quick-issue-en.ts @@ -0,0 +1,67 @@ +export default { + LANG: 'English', + ISSUE_TITLE: 'New Issue', + PLACEHOLDER: 'Issue ID, Repository or Title', + PLACEHOLDER_PR: 'SIG, Repository or Title', + SEARCH_PLACEHOLDER: 'Search', + SUBMIT_ISSUE: 'Submit Issue', + ID: 'ID', + GITTE_USER: 'Create Issue on Gitee', + NOT_GITEE_USER: "I don't have a Gitee account", + SELECT: 'Select', + INPUT: 'Enter', + STATE: 'Status', + FILE: 'Attachment', + EMAIL: 'Email', + CODE: 'Verification Code', + REPO_NAME: 'Repository', + TITLE: 'Title', + DESCRIPTIVE: 'Description', + TYPE: 'Type', + PRIORITY: 'Priority', + SUBMITTER: 'Creator', + MILESTONE: 'Milestone', + ASSIGNER: 'Assignees', + LABEL: 'Labels', + SELECT_LABEL: 'Include Labels', + BRANCH: 'Branch', + CREATED_AT: 'Submitted At', + UPDATE_AT: 'Updated At', + ALL: 'All', + MY_ASSIGNMENTS: 'My Assignments', + MY_SUBMISSIONS: 'My Submissions', + CANCEL: 'Cancel', + CREATE: 'New Issue', + CANCEL1: 'Cancel', + CONTINUE: 'New and Continue', + PRIVACY: 'Privacy Statement', + SELECT_ALL: 'Select All', + EXCLUDE: 'Exclude Labels', + LABER_TIP: 'PRs containing all included labels will be displayed', + LABER_TIP1: 'PRs containing any of the excluded labels will be hidden', + PRIVACY_TEXT: + 'By filling and submitting the content, I fully understand and agree to the terms of the openGauss ', + SELECT_SIG: 'Select SIG', + SEND_CODE: 'Send Verification Code', + MANDATORY: 'Mandatory', + MANDATORY1: 'Mandatory', + EMAIL_ADRESS: 'Enter an email address', + TITLE_LIMIT: 'Title cannot exceed 100 characters', + RIGHT_EMAIL_ADRESS: 'Enter a valid email address', + VER_CODE: 'Enter the verification code', + VER_CODE1: 'Enter the 6-digit verification code', + EMPTY_REPO: + 'This SIG does not have a repository. The issue will be submitted to opengauss/community', + RESEND: 'Resend Verification Code', + RESEND1: 'Resend Verification Code in {0}', + SUCCESS_CREATED: 'Issue created successfully', + SUCCESS_SEND_MAIL: 'Sent verification email successfully', + SIZE_LIMIT: 'Attachment size cannot exceed 10 MB', + SUCCESS_UPLOAD: 'Attachment uploaded successfully', + SUCCESS_UPLOAD1: + 'The issue is created but the attachment fails to be uploaded', + SWIPE_RIGHT: 'Swipe right to complete the verification.', + SWIPER: 'Slide for verification', + VERIFY_FAIL: 'Verification failed.', + VERIFY_SUCCESS: 'Verification succeeds in', +}; diff --git a/src/i18n/quick-issue/quick-issue-zh.ts b/src/i18n/quick-issue/quick-issue-zh.ts new file mode 100644 index 0000000000000000000000000000000000000000..133bcdd336ff2dc82c226f76b2ddc1be4497fd2d --- /dev/null +++ b/src/i18n/quick-issue/quick-issue-zh.ts @@ -0,0 +1,66 @@ +export default { + LANG: '中文', + ISSUE_TITLE: '新建需求', + PLACEHOLDER: 'issue ID、仓库、标题', + PLACEHOLDER_PR: 'SIG、仓库、标题', + SEARCH_PLACEHOLDER: '请输入关键字', + SUBMIT_ISSUE: '提交 Issue', + ID: 'ID', + GITTE_USER: '前往Gitee创建Issue', + NOT_GITEE_USER: '我不是Gitee用户', + SELECT: '请选择', + INPUT: '请填写', + STATE: '状态', + FILE: '附件', + EMAIL: '邮箱', + CODE: '验证码', + REPO_NAME: '仓库', + TITLE: '标题', + DESCRIPTIVE: '描述', + TYPE: '类型', + PRIORITY: '优先级', + SUBMITTER: '提交人', + ASSIGNER: '指派给', + LABEL: '标签', + SELECT_LABEL: '选择标签', + BRANCH: '分支', + RELATION_BRANCH: '关联分支', + MILESTONE: '里程碑', + CREATED_AT: '提交时间', + UPDATE_AT: '更新时间', + ALL: '全部', + MY_ASSIGNMENTS: '待处理的', + MY_SUBMISSIONS: '我提交的', + CANCEL: '取消选项', + CREATE: '新建', + CANCEL1: '取消', + CONTINUE: '新建并继续', + PRIVACY: '隐私声明', + SELECT_ALL: '选择全部', + EXCLUDE: '排除标签', + LABER_TIP: '同时包括所有“选中标签”的PR将会被筛选出来', + LABER_TIP1: '包含“排除标签”的PR不会被筛选出来', + PRIVACY_TEXT: + '您理解并同意,您填写并提交的内容,即视为您已充分阅读并同意openGauss的', + SELECT_SIG: '选择SIG组', + SEND_CODE: '发送验证码', + MANDATORY: '必选项', + MANDATORY1: '必填项', + TITLE_LIMIT: '标题长度不超过100字符', + EMAIL_ADRESS: '请填写邮箱', + RIGHT_EMAIL_ADRESS: '请输入正确格式邮箱', + VER_CODE: '请填写验证码', + VER_CODE1: '请填写6位数字验证码', + EMPTY_REPO: '此SIG下无仓库。默认提交至 opengauss/community 仓库', + RESEND: '重新发送验证码', + RESEND1: '{0}后重新发送', + SUCCESS_CREATED: '创建issue成功', + SUCCESS_SEND_MAIL: '成功发送验证邮件', + SIZE_LIMIT: '附件不得超过10MB,请重新选择文件。', + SUCCESS_UPLOAD: '附件上传成功', + SUCCESS_UPLOAD1: 'Issue 创建成功,附件上传失败!', + SWIPE_RIGHT: '向右滑动完成验证', + SWIPER: '请拖动滑块完成人机校验', + VERIFY_FAIL: '验证失败', + VERIFY_SUCCESS: '验证成功', +}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000000000000000000000000000000000000..0a58b0ad2d4dd85629b3e87a7c37a65629b0ba19 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,31 @@ +import { createApp } from 'vue'; +import { createPinia } from 'pinia'; +import { router } from './routers'; +import i18n from './i18n'; +import '@/shared/allow_sensor/sensorsdata.min.js'; +import '@/shared/allow_sensor/sensors.js'; +import '@/shared/styles/index.scss'; + +// import '@/shared/styles/element-plus/index.scss'; + +import VueMarkdownEditor from '@kangc/v-md-editor'; +import '@kangc/v-md-editor/lib/style/base-editor.css'; +import vuepressTheme from '@kangc/v-md-editor/lib/theme/vuepress.js'; +import Prism from 'prismjs'; + +import App from './App.vue'; +import OpenDesign from 'opendesign'; + +VueMarkdownEditor.use(vuepressTheme, { + Prism, +}); + +const app = createApp(App); + +app.use(i18n); +app.use(createPinia()); +app.use(OpenDesign); +app.use(router); +app.use(VueMarkdownEditor); + +app.mount('#app'); diff --git a/src/routers/index.ts b/src/routers/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..259bf334d41ad6a5288b133cffb94671b49b65d9 --- /dev/null +++ b/src/routers/index.ts @@ -0,0 +1,42 @@ +import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router'; +import { useLangStore } from '@/stores'; + +export const routes: RouteRecordRaw[] = [ + { path: '/', redirect: '/zh/issues' }, + { path: '/zh/', redirect: '/zh/issues' }, + { path: '/en/', redirect: '/en/issues' }, + { + path: '/zh/issues', + name: 'issues', + alias: '/en/issues', + component: () => import('@/views/TheQuickIssue.vue'), + }, + { + path: '/zh/pulls', + name: 'pulls', + alias: '/en/pulls', + component: () => import('@/views/pull-request/PullRequest.vue'), + }, + { + path: '/zh/new-issues', + name: 'new-issues', + alias: '/en/new-issues', + component: () => import('@/views/submit-issue/SubmitIssue.vue'), + }, +]; + +export const router = createRouter({ + history: createWebHistory(), + routes, + scrollBehavior() { + return { top: 0 }; + }, +}); + +router.beforeEach((to) => { + // 设置语言 + const langStore = useLangStore(); + const lang = to.fullPath.includes('en') ? 'en' : 'zh'; + // localStorage.setItem('lang', lang); + langStore.lang = lang; +}); diff --git a/src/shared/@types/type-quick-issue.ts b/src/shared/@types/type-quick-issue.ts new file mode 100644 index 0000000000000000000000000000000000000000..2eb93e9b1e0c5a8a179062cdc2d0830e40682eaa --- /dev/null +++ b/src/shared/@types/type-quick-issue.ts @@ -0,0 +1,35 @@ +export interface IssueQueryData { + page: number; + per_page: number; + search: string; + issue_type: string; + priority: string; + direction: string; + create: string; + author: string; + exclusion: Array | string; + assignee: string; + label: Array | string; + branch: string; + repo: string; + issue_state: Array | string; + milestone: Array | string; +} + +export interface OptionList { + page: number; + keyword: string; + data: any[]; + total?: number; +} +export interface IssueData { + title: string; + issue_type_id: string | number | undefined; + sig: string; + project_id: number; + repo: string; + email: string; + code: string; + description: string; + privacy: Array; +} diff --git a/src/shared/@types/type-sig.ts b/src/shared/@types/type-sig.ts new file mode 100644 index 0000000000000000000000000000000000000000..aa20a9a2086223e532baa79e106d7ac7256400b0 --- /dev/null +++ b/src/shared/@types/type-sig.ts @@ -0,0 +1,9 @@ +export interface FeatureInfo { + featureName: string; + sigs: string[]; +} + +export interface GroupInfo { + groupName: string; + features: FeatureInfo[]; +} diff --git a/src/shared/allow_sensor/sensors.js b/src/shared/allow_sensor/sensors.js new file mode 100644 index 0000000000000000000000000000000000000000..0c7f6f6d076ba642047b21ef6847aacac644aefb --- /dev/null +++ b/src/shared/allow_sensor/sensors.js @@ -0,0 +1,567 @@ +const root = typeof self !== 'undefined' ? self : this; +const _window = root || {}; +// 变量库 +const VariableLibrary = { + navigator: typeof root.navigator !== 'undefined' ? root.navigator : {}, + // 信息map + infoMap: { + engine: ['WebKit', 'Trident', 'Gecko', 'Presto'], + browser: [ + 'Safari', + 'Chrome', + 'Edge', + 'IE', + 'Firefox', + 'Firefox Focus', + 'Chromium', + 'Opera', + 'Vivaldi', + 'Yandex', + 'Arora', + 'Lunascape', + 'QupZilla', + 'Coc Coc', + 'Kindle', + 'Iceweasel', + 'Konqueror', + 'Iceape', + 'SeaMonkey', + 'Epiphany', + '360', + '360SE', + '360EE', + 'UC', + 'QQBrowser', + 'QQ', + 'Baidu', + 'Maxthon', + 'Sogou', + 'LBBROWSER', + '2345Explorer', + 'TheWorld', + 'XiaoMi', + 'Quark', + 'Qiyu', + 'Wechat', + 'WechatWork', + 'Taobao', + 'Alipay', + 'Weibo', + 'Douban', + 'Suning', + 'iQiYi', + ], + os: [ + 'Windows', + 'Linux', + 'Mac OS', + 'Android', + 'Ubuntu', + 'FreeBSD', + 'Debian', + 'iOS', + 'Windows Phone', + 'BlackBerry', + 'MeeGo', + 'Symbian', + 'Chrome OS', + 'WebOS', + ], + }, +}; +// 方法库 +var MethodLibrary = (function () { + return { + // 获取匹配库 + getMatchMap: function (u) { + return { + // 内核 + Trident: u.indexOf('Trident') > -1 || u.indexOf('NET CLR') > -1, + Presto: u.indexOf('Presto') > -1, + WebKit: u.indexOf('AppleWebKit') > -1, + Gecko: u.indexOf('Gecko/') > -1, + // 浏览器 + Safari: u.indexOf('Safari') > -1, + Chrome: u.indexOf('Chrome') > -1 || u.indexOf('CriOS') > -1, + IE: u.indexOf('MSIE') > -1 || u.indexOf('Trident') > -1, + Edge: u.indexOf('Edge') > -1, + Firefox: u.indexOf('Firefox') > -1 || u.indexOf('FxiOS') > -1, + 'Firefox Focus': u.indexOf('Focus') > -1, + Chromium: u.indexOf('Chromium') > -1, + Opera: u.indexOf('Opera') > -1 || u.indexOf('OPR') > -1, + Vivaldi: u.indexOf('Vivaldi') > -1, + Yandex: u.indexOf('YaBrowser') > -1, + Arora: u.indexOf('Arora') > -1, + Lunascape: u.indexOf('Lunascape') > -1, + QupZilla: u.indexOf('QupZilla') > -1, + 'Coc Coc': u.indexOf('coc_coc_browser') > -1, + Kindle: u.indexOf('Kindle') > -1 || u.indexOf('Silk/') > -1, + Iceweasel: u.indexOf('Iceweasel') > -1, + Konqueror: u.indexOf('Konqueror') > -1, + Iceape: u.indexOf('Iceape') > -1, + SeaMonkey: u.indexOf('SeaMonkey') > -1, + Epiphany: u.indexOf('Epiphany') > -1, + 360: u.indexOf('QihooBrowser') > -1 || u.indexOf('QHBrowser') > -1, + '360EE': u.indexOf('360EE') > -1, + '360SE': u.indexOf('360SE') > -1, + UC: u.indexOf('UC') > -1 || u.indexOf(' UBrowser') > -1, + QQBrowser: u.indexOf('QQBrowser') > -1, + QQ: u.indexOf('QQ/') > -1, + Baidu: u.indexOf('Baidu') > -1 || u.indexOf('BIDUBrowser') > -1, + Maxthon: u.indexOf('Maxthon') > -1, + Sogou: u.indexOf('MetaSr') > -1 || u.indexOf('Sogou') > -1, + LBBROWSER: u.indexOf('LBBROWSER') > -1 || u.indexOf('LieBaoFast') > -1, + '2345Explorer': u.indexOf('2345Explorer') > -1, + TheWorld: u.indexOf('TheWorld') > -1, + XiaoMi: u.indexOf('MiuiBrowser') > -1, + Quark: u.indexOf('Quark') > -1, + Qiyu: u.indexOf('Qiyu') > -1, + Wechat: u.indexOf('MicroMessenger') > -1, + WechatWork: u.indexOf('wxwork/') > -1, + Taobao: u.indexOf('AliApp(TB') > -1, + Alipay: u.indexOf('AliApp(AP') > -1, + Weibo: u.indexOf('Weibo') > -1, + Douban: u.indexOf('com.douban.frodo') > -1, + Suning: u.indexOf('SNEBUY-APP') > -1, + iQiYi: u.indexOf('IqiyiApp') > -1, + // 系统或平台 + Windows: u.indexOf('Windows') > -1, + Linux: u.indexOf('Linux') > -1 || u.indexOf('X11') > -1, + 'Mac OS': u.indexOf('Macintosh') > -1, + Android: u.indexOf('Android') > -1 || u.indexOf('Adr') > -1, + Ubuntu: u.indexOf('Ubuntu') > -1, + FreeBSD: u.indexOf('FreeBSD') > -1, + Debian: u.indexOf('Debian') > -1, + 'Windows Phone': + u.indexOf('IEMobile') > -1 || u.indexOf('Windows Phone') > -1, + BlackBerry: u.indexOf('BlackBerry') > -1 || u.indexOf('RIM') > -1, + MeeGo: u.indexOf('MeeGo') > -1, + Symbian: u.indexOf('Symbian') > -1, + iOS: u.indexOf('like Mac OS X') > -1, + 'Chrome OS': u.indexOf('CrOS') > -1, + WebOS: u.indexOf('hpwOS') > -1, + // 设备 + Mobile: + u.indexOf('Mobi') > -1 || + u.indexOf('iPh') > -1 || + u.indexOf('480') > -1, + Tablet: u.indexOf('Tablet') > -1 || u.indexOf('Nexus 7') > -1, + iPad: u.indexOf('iPad') > -1, + }; + }, + // 在信息map和匹配库中进行匹配 + matchInfoMap: function (_this) { + const u = VariableLibrary.navigator.userAgent || {}; + const match = MethodLibrary.getMatchMap(u); + for (const s in VariableLibrary.infoMap) { + for (let i = 0; i < VariableLibrary.infoMap[s].length; i++) { + const value = VariableLibrary.infoMap[s][i]; + if (match[value]) { + _this[s] = value; + } + } + } + }, + // 获取当前操作系统 + getOS: function () { + const _this = this; + MethodLibrary.matchInfoMap(_this); + return _this.os; + }, + // 获取操作系统版本 + getOSVersion: function () { + const _this = this; + const u = VariableLibrary.navigator.userAgent || {}; + _this.osVersion = ''; + // 系统版本信息 + const osVersion = { + Windows: function () { + const v = u.replace(/^.*Windows NT ([\d.]+);.*$/, '$1'); + const oldWindowsVersionMap = { + 6.4: '10', + 6.3: '8.1', + 6.2: '8', + 6.1: '7', + '6.0': 'Vista', + 5.2: 'XP', + 5.1: 'XP', + '5.0': '2000', + }; + return oldWindowsVersionMap[v] || v; + }, + Android: function () { + return u.replace(/^.*Android ([\d.]+);.*$/, '$1'); + }, + iOS: function () { + return u.replace(/^.*OS ([\d_]+) like.*$/, '$1').replace(/_/g, '.'); + }, + Debian: function () { + return u.replace(/^.*Debian\/([\d.]+).*$/, '$1'); + }, + 'Windows Phone': function () { + return u.replace(/^.*Windows Phone( OS)? ([\d.]+);.*$/, '$2'); + }, + 'Mac OS': function () { + return u.replace(/^.*Mac OS X ([\d_]+).*$/, '$1').replace(/_/g, '.'); + }, + WebOS: function () { + return u.replace(/^.*hpwOS\/([\d.]+);.*$/, '$1'); + }, + }; + if (osVersion[_this.os]) { + _this.osVersion = osVersion[_this.os](); + if (_this.osVersion == u) { + _this.osVersion = ''; + } + } + return _this.osVersion; + }, + // 浏览器信息 + getBrowserInfo: function () { + const _this = this; + MethodLibrary.matchInfoMap(_this); + + const u = VariableLibrary.navigator.userAgent || {}; + + const _mime = function (option, value) { + const mimeTypes = VariableLibrary.navigator.mimeTypes; + for (const key in mimeTypes) { + if (mimeTypes[key][option] == value) { + return true; + } + } + return false; + }; + + const match = MethodLibrary.getMatchMap(u); + + let is360 = false; + if (_window.chrome) { + const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1'); + if (chrome_version > 36 && _window.showModalDialog) { + is360 = true; + } else if (chrome_version > 45) { + is360 = _mime('type', 'application/vnd.chromium.remoting-viewer'); + } + } + if (match['Baidu'] && match['Opera']) { + match['Baidu'] = false; + } + if (match['Mobile']) { + match['Mobile'] = !(u.indexOf('iPad') > -1); + } + if (is360) { + if (_mime('type', 'application/gameplugin')) { + match['360SE'] = true; + } else if ( + VariableLibrary.navigator && + typeof VariableLibrary.navigator['connection']['saveData'] === + 'undefined' + ) { + match['360SE'] = true; + } else { + match['360EE'] = true; + } + } + if (match['IE'] || match['Edge']) { + const navigator_top = window.screenTop - window.screenY; + switch (navigator_top) { + case 71: // 无收藏栏,贴边 + break; + case 74: // 无收藏栏,非贴边 + break; + case 99: // 有收藏栏,贴边 + break; + case 102: // 有收藏栏,非贴边 + match['360EE'] = true; + break; + case 75: // 无收藏栏,贴边 + break; + case 105: // 有收藏栏,贴边 + break; + case 104: // 有收藏栏,非贴边 + match['360SE'] = true; + break; + default: + break; + } + } + + const browerVersionMap = { + Safari: function () { + return u.replace(/^.*Version\/([\d.]+).*$/, '$1'); + }, + Chrome: function () { + return u + .replace(/^.*Chrome\/([\d.]+).*$/, '$1') + .replace(/^.*CriOS\/([\d.]+).*$/, '$1'); + }, + IE: function () { + return u + .replace(/^.*MSIE ([\d.]+).*$/, '$1') + .replace(/^.*rv:([\d.]+).*$/, '$1'); + }, + Edge: function () { + return u.replace(/^.*Edge\/([\d.]+).*$/, '$1'); + }, + Firefox: function () { + return u + .replace(/^.*Firefox\/([\d.]+).*$/, '$1') + .replace(/^.*FxiOS\/([\d.]+).*$/, '$1'); + }, + 'Firefox Focus': function () { + return u.replace(/^.*Focus\/([\d.]+).*$/, '$1'); + }, + Chromium: function () { + return u.replace(/^.*Chromium\/([\d.]+).*$/, '$1'); + }, + Opera: function () { + return u + .replace(/^.*Opera\/([\d.]+).*$/, '$1') + .replace(/^.*OPR\/([\d.]+).*$/, '$1'); + }, + Vivaldi: function () { + return u.replace(/^.*Vivaldi\/([\d.]+).*$/, '$1'); + }, + Yandex: function () { + return u.replace(/^.*YaBrowser\/([\d.]+).*$/, '$1'); + }, + Arora: function () { + return u.replace(/^.*Arora\/([\d.]+).*$/, '$1'); + }, + Lunascape: function () { + return u.replace(/^.*Lunascape[\\/\s]([\d.]+).*$/, '$1'); + }, + QupZilla: function () { + return u.replace(/^.*QupZilla[\\/\s]([\d.]+).*$/, '$1'); + }, + 'Coc Coc': function () { + return u.replace(/^.*coc_coc_browser\/([\d.]+).*$/, '$1'); + }, + Kindle: function () { + return u.replace(/^.*Version\/([\d.]+).*$/, '$1'); + }, + Iceweasel: function () { + return u.replace(/^.*Iceweasel\/([\d.]+).*$/, '$1'); + }, + Konqueror: function () { + return u.replace(/^.*Konqueror\/([\d.]+).*$/, '$1'); + }, + Iceape: function () { + return u.replace(/^.*Iceape\/([\d.]+).*$/, '$1'); + }, + SeaMonkey: function () { + return u.replace(/^.*SeaMonkey\/([\d.]+).*$/, '$1'); + }, + Epiphany: function () { + return u.replace(/^.*Epiphany\/([\d.]+).*$/, '$1'); + }, + 360: function () { + return u.replace(/^.*QihooBrowser\/([\d.]+).*$/, '$1'); + }, + '360SE': function () { + const hash = { + 63: '10.0', + 55: '9.1', + 45: '8.1', + 42: '8.0', + 31: '7.0', + 21: '6.3', + }; + const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1'); + return hash[chrome_version] || ''; + }, + '360EE': function () { + const hash = { + 69: '11.0', + 63: '9.5', + 55: '9.0', + 50: '8.7', + 30: '7.5', + }; + const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1'); + return hash[chrome_version] || ''; + }, + Maxthon: function () { + return u.replace(/^.*Maxthon\/([\d.]+).*$/, '$1'); + }, + QQBrowser: function () { + return u.replace(/^.*QQBrowser\/([\d.]+).*$/, '$1'); + }, + QQ: function () { + return u.replace(/^.*QQ\/([\d.]+).*$/, '$1'); + }, + Baidu: function () { + return u.replace(/^.*BIDUBrowser[\s\\/]([\d.]+).*$/, '$1'); + }, + UC: function () { + return u.replace(/^.*UC?Browser\/([\d.]+).*$/, '$1'); + }, + Sogou: function () { + return u + .replace(/^.*SE ([\d.X]+).*$/, '$1') + .replace(/^.*SogouMobileBrowser\/([\d.]+).*$/, '$1'); + }, + LBBROWSER: function () { + let version = ''; + if (u.indexOf('LieBaoFast') > -1) { + version = u.replace(/^.*LieBaoFast\/([\d.]+).*$/, '$1'); + } + const hash = { + 57: '6.5', + 49: '6.0', + 46: '5.9', + 42: '5.3', + 39: '5.2', + 34: '5.0', + 29: '4.5', + 21: '4.0', + }; + const chrome_version = u.replace(/^.*Chrome\/([\d]+).*$/, '$1'); + return version || hash[chrome_version] || ''; + }, + '2345Explorer': function () { + return u.replace(/^.*2345Explorer\/([\d.]+).*$/, '$1'); + }, + TheWorld: function () { + return u.replace(/^.*TheWorld ([\d.]+).*$/, '$1'); + }, + XiaoMi: function () { + return u.replace(/^.*MiuiBrowser\/([\d.]+).*$/, '$1'); + }, + Quark: function () { + return u.replace(/^.*Quark\/([\d.]+).*$/, '$1'); + }, + Qiyu: function () { + return u.replace(/^.*Qiyu\/([\d.]+).*$/, '$1'); + }, + Wechat: function () { + return u.replace(/^.*MicroMessenger\/([\d.]+).*$/, '$1'); + }, + WechatWork: function () { + return u.replace(/^.*wxwork\/([\d.]+).*$/, '$1'); + }, + Taobao: function () { + return u.replace(/^.*AliApp\(TB\/([\d.]+).*$/, '$1'); + }, + Alipay: function () { + return u.replace(/^.*AliApp\(AP\/([\d.]+).*$/, '$1'); + }, + Weibo: function () { + return u.replace(/^.*weibo__([\d.]+).*$/, '$1'); + }, + Douban: function () { + return u.replace(/^.*com.douban.frodo\/([\d.]+).*$/, '$1'); + }, + Suning: function () { + return u.replace(/^.*SNEBUY-APP([\d.]+).*$/, '$1'); + }, + iQiYi: function () { + return u.replace(/^.*IqiyiVersion\/([\d.]+).*$/, '$1'); + }, + }; + _this.browserVersion = ''; + if (browerVersionMap[_this.browser]) { + _this.browserVersion = browerVersionMap[_this.browser](); + if (_this.browserVersion == u) { + _this.browserVersion = ''; + } + } + if (_this.browser == 'Chrome' && u.match(/\S+Browser/)) { + _this.browser = u.match(/\S+Browser/)[0]; + _this.version = u.replace(/^.*Browser\/([\d.]+).*$/, '$1'); + } + + return { + browser: _this.browser, + browserVersion: _this.browserVersion, + }; + }, + }; +})(); +const info = { + OS: MethodLibrary.getOS(), // 操作系统 + OSVersion: MethodLibrary.getOSVersion(), // 操作系统版本 + browserInfo: MethodLibrary.getBrowserInfo(), // 浏览器信息 +}; +const xhr = new XMLHttpRequest(); +xhr.responseType = 'json'; +xhr.open('get', '/ip-api/', true); +xhr.onload = function (e) { + if (xhr.status === 200) { + window['returnCitySN'] = xhr.response; + } else { + window['returnCitySN'] = { + query: '', + city: '', + }; + } +}; +xhr.onerror = () => { + window['returnCitySN'] = { + query: '', + city: '', + }; +}; +xhr.send(); + +let sensors = window['sensorsDataAnalytic201505']; +function initSensor() { + window['sensorsCustomBuriedData'] = { + language: location.pathname.split('/')[1] || 'en', + ip: (window['returnCitySN'] && window['returnCitySN'].query) || '', + city: (window['returnCitySN'] && window['returnCitySN'].city) || '', + os: info.OS, + osVersion: info.OSVersion, + browser: info.browserInfo.browser, + browserVersion: info.browserInfo.browserVersion, + }; + + window['setSensorsCustomBuriedData'] = (key, value) => { + window['sensorsCustomBuriedData'][key] = value; + }; + sensors.init({ + server_url: 'https://dsapi.osinfra.cn/query/track?community=openGauss', + use_client_time: true, + // 调试时开启 + show_log: false, + send_type: 'image', + is_track_single_page: function () { + return window['sensorsCustomBuriedData']; + }, + heatmap: { + //是否开启点击图,default 表示开启,自动采集 $WebClick 事件,可以设置 'not_collect' 表示关闭。 + clickmap: 'default', + custom_property: function () { + return window['sensorsCustomBuriedData']; + }, + //是否开启触达图,not_collect 表示关闭,不会自动采集 $WebStay 事件,可以设置 'default' 表示开启。 + scroll_notice_map: 'not_collect', + }, + }); + sensors.quick('isReady', function () { + sensors.getPresetProperties(); + }); + + // 给category增加两个值 + // sensors.appendProfile({catrgory: ['test_start_time', 'test_end_time']}); + // sensors.appendProfile({catrgory: 'test_exist_time'}); + sensors.quick('autoTrack', window['sensorsCustomBuriedData']); //用于采集 $pageview 事件。\ +} +function startSensor(num) { + if (!num) { + // 重试最大次数 + return; + } + if (sensors) { + initSensor(); + } else { + setTimeout(() => { + // 若是一开始没有值,则重试 + sensors = window['sensorsDataAnalytic201505']; + num--; + startSensor(num); + }, 500); + } +} +startSensor(20); diff --git a/src/shared/allow_sensor/sensorsdata.min.js b/src/shared/allow_sensor/sensorsdata.min.js new file mode 100644 index 0000000000000000000000000000000000000000..bf888c8f2433ea7cb2d9254f6b45ba0a67927324 --- /dev/null +++ b/src/shared/allow_sensor/sensorsdata.min.js @@ -0,0 +1,5 @@ +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t():t()}(this,function(){function e(e){if(!e)return!1;var t=Object.prototype.toString.call(e);return"[object Function]"==t||"[object AsyncFunction]"==t}function t(){return Date.now&&e(Date.now)?Date.now():(new Date).getTime()}function r(e){return null!=e&&"[object Object]"==Object.prototype.toString.call(e)}function i(){if("function"==typeof Uint32Array){var e="";if("undefined"!=typeof crypto?e=crypto:"undefined"!=typeof msCrypto&&(e=msCrypto),r(e)&&e.getRandomValues){var t=new Uint32Array(1),i=e.getRandomValues(t)[0],n=Math.pow(2,32);return i/n}}return _r(1e19)/1e19}function n(e){var t=null;try{t=JSON.parse(e)}catch(r){}return t}function a(e,t){this.lockGetPrefix=e||"lock-get-prefix",this.lockSetPrefix=t||"lock-set-prefix"}function s(e){return"function"==typeof e||!(!e||"object"!=typeof e)&&s(e.listener)}function l(){this._events={}}function c(e){var t=e;try{t=decodeURIComponent(e)}catch(r){t=e}return t}function u(e){e=e||"";for(var t={},r=e.substring(1),i=r.split("&"),n=0;n Invalid URL");var r=e.split("#"),i=r[0],n=r.slice(1).join("#");t=this._regex.exec(i);for(var a in this._fields)"undefined"!=typeof t[this._fields[a]]&&(this._values[a]=t[this._fields[a]]);this._values.Hostname=this._values.Host.replace(/:\d+$/,""),this._values.Origin=this._values.Protocol+"://"+this._values.Hostname,this._values.Fragment=n},new t(e)}function f(e){var t={},r=function(){var e;try{return e=new URL("http://modernizr.com/"),"http://modernizr.com/"===e.href}catch(t){return!1}};if("function"==typeof window.URL&&r())t=new URL(e),t.searchParams||(t.searchParams=function(){var e=u(t.search);return{get:function(t){return e[t]}}}());else{p(e)||(e=String(e)),e=d(e);var i=/^https?:\/\/.+/;if(i.test(e)===!1)return void pr.log("Invalid URL");var n=_(e);t.hash=n._values.Fragment,t.host=n._values.Host?n._values.Host+(n._values.Port?":"+n._values.Port:""):"",t.href=n._values.URL,t.password=n._values.Password,t.pathname=n._values.Path,t.port=n._values.Port,t.search=n._values.QueryString?"?"+n._values.QueryString:"",t.username=n._values.Username,t.hostname=n._values.Hostname,t.protocol=n._values.Protocol?n._values.Protocol+":":"",t.origin=n._values.Origin?n._values.Origin+(n._values.Port?":"+n._values.Port:""):"",t.searchParams=function(){var e=u("?"+n._values.QueryString);return{get:function(t){return e[t]}}}()}return t}function g(e){return!(!e||1!==e.nodeType)}function h(e){return void 0===e}function v(t){return Array.isArray&&e(v)?Array.isArray(t):"[object Array]"===Object.prototype.toString.call(t)}function y(e){return new gr(e)}function w(e,t,r,i){function n(e){return e&&(e.preventDefault=n.preventDefault,e.stopPropagation=n.stopPropagation,e._getPath=n._getPath),e}function a(e,t,r,i){var a=function(a){if(a=a||n(window.event)){a.target=a.srcElement;var s,o,l=!0;return"function"==typeof r&&(s=r(a)),o=t.call(e,a),"beforeunload"!==i?(!1!==s&&!1!==o||(l=!1),l):void 0}};return a}n._getPath=function(){var e=this;return this.path||this.composedPath&&this.composedPath()||y(e.target).getParents()},n.preventDefault=function(){this.returnValue=!1},n.stopPropagation=function(){this.cancelBubble=!0};var s=function(e,t,r){if(void 0===i&&"click"===t&&(i=!0),e&&e.addEventListener)e.addEventListener(t,function(e){e._getPath=n._getPath,r.call(this,e)},i);else{var s="on"+t,o=e[s];e[s]=a(e,r,o,t)}};s.apply(null,arguments)}function S(e){var t="pushState"in window.history?"popstate":"hashchange";w(window,t,e)}function b(e){if(e)return"undefined"!=typeof window.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest?new XMLHttpRequest:"undefined"!=typeof XDomainRequest?new XDomainRequest:null;if("undefined"!=typeof window.XMLHttpRequest)return new XMLHttpRequest;if(window.ActiveXObject)try{return new ActiveXObject("Msxml2.XMLHTTP")}catch(t){try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(t){pr.log(t)}}}function k(e,t,r){if(null==e)return!1;if(mr&&e.forEach===mr)e.forEach(t,r);else if(v(e))for(var i=0,n=e.length;i=200&&n.status<300||304==n.status?e.success(t(n.responseText)):e.error(t(n.responseText),n.status),n.onreadystatechange=null,n.onload=null)}catch(r){n.onreadystatechange=null,n.onload=null}},n.open(e.type,e.url,!0);try{e.credentials&&(n.withCredentials=!0),r(e.header)&&k(e.header,function(e,t){n.setRequestHeader&&n.setRequestHeader(t,e)}),e.data&&(e.cors||n.setRequestHeader&&n.setRequestHeader("X-Requested-With","XMLHttpRequest"),"application/json"===e.contentType?n.setRequestHeader&&n.setRequestHeader("Content-type","application/json; charset=UTF-8"):n.setRequestHeader&&n.setRequestHeader("Content-type","application/x-www-form-urlencoded"))}catch(l){pr.log(l)}n.send(e.data||null)}function j(e,t){var r=[];return null==e?r:Array.prototype.map&&e.map===Array.prototype.map?e.map(t):(k(e,function(e,i,n){r.push(t(e,i,n))}),r)}function N(e){var t=[];try{t=j(atob(e).split(""),function(e){return"%"+("00"+e.charCodeAt(0).toString(16)).slice(-2)})}catch(r){t=[]}try{return decodeURIComponent(t.join(""))}catch(r){return t.join("")}}function O(e){var t="";try{t=btoa(encodeURIComponent(e).replace(/%([0-9A-F]{2})/g,function(e,t){return String.fromCharCode("0x"+t)}))}catch(r){t=e}return t}function C(e,t){t=t||window;var r=!1,i=!0,n=t.document,a=n.documentElement,s=n.addEventListener,o=s?"addEventListener":"attachEvent",l=s?"removeEventListener":"detachEvent",c=s?"":"on",u=function(i){"readystatechange"==i.type&&"complete"!=n.readyState||(("load"==i.type?t:n)[l](c+i.type,u,!1),!r&&(r=!0)&&e.call(t,i.type||i))},p=function(){try{a.doScroll("left")}catch(e){return void setTimeout(p,50)}u("poll")};if("complete"==n.readyState)e.call(t,"lazy");else{if(!s&&a.doScroll){try{i=!t.frameElement}catch(d){pr.log(d)}i&&p()}n[o](c+"DOMContentLoaded",u,!1),n[o](c+"readystatechange",u,!1),t[o](c+"load",u,!1)}}function $(e){return k(Array.prototype.slice.call(arguments,1),function(t){for(var r in t)void 0!==t[r]&&void 0===e[r]&&(e[r]=t[r])}),e}function A(e){var t=e;try{t=decodeURI(e)}catch(r){t=e}return t}function T(e){var t="t6KJCZa5pDdQ9khoEM3Tj70fbP2eLSyc4BrsYugARqFIw1mzlGNVXOHiWvxUn8",r=t.length-1,i={},n=0;for(n=0;n=2&&!/^(\d+\.)+\d+$/.test(i))for(var a="."+n.splice(n.length-1,1);n.length>0;)if(a="."+n.splice(n.length-1,1)+a,document.cookie=t+"=true; path=/; domain="+a,document.cookie.indexOf(t+"=true")!==-1){var s=new Date;return s.setTime(s.getTime()-1e3),document.cookie=t+"=true; expires="+s.toGMTString()+"; path=/; SameSite=Lax; domain="+a,a}return""}function B(e){function t(e,t){e=d(e);var r;if("body"===e)return document.getElementsByTagName("body")[0];if(0===e.indexOf("#"))e=e.slice(1),r=document.getElementById(e);else if(e.indexOf(":nth-of-type")>-1){var i=e.split(":nth-of-type");if(!i[0]||!i[1])return null;var n=i[0],a=i[1].match(/\(([0-9]+)\)/);if(!a||!a[1])return null;var s=Number(a[1]);if(!(g(t)&&t.children&&t.children.length>0))return null;for(var o=t.children,l=0;l0)return null}return r?r:null}function r(e){var n,a=i.shift();if(!a)return e;try{n=t(a,e)}catch(s){pr.log(s)}return n&&g(n)?r(n):null}if(!p(e))return null;var i=e.split(">"),n=null;return n=r(),n&&g(n)?n:null}function R(e,t){var r="",i="";return e.textContent?r=d(e.textContent):e.innerText&&(r=d(e.innerText)),r&&(r=r.replace(/[\r\n]/g," ").replace(/[ ]+/g," ").substring(0,255)),i=r||"","input"!==t&&"INPUT"!==t||(i=e.value||""),i}function K(e,t){t&&"string"==typeof t||(t="hostname\u89e3\u6790\u5f02\u5e38");var r=null;try{r=f(e).hostname}catch(i){pr.log("getHostname\u4f20\u5165\u7684url\u53c2\u6570\u4e0d\u5408\u6cd5\uff01")}return r||t}function M(){try{var e=navigator.appVersion.match(/OS (\d+)[._](\d+)[._]?(\d+)?/);return e&&e[1]?Number.parseInt(e[1],10):""}catch(t){return""}}function W(e,t){t=t.replace(/[\[]/,"\\[").replace(/[\]]/,"\\]"),e=c(e);var r="[\\?&]"+t+"=([^&#]*)",i=new RegExp(r),n=i.exec(e);return null===n||n&&"string"!=typeof n[1]&&n[1].length?"":c(n[1])}function V(e){var t={},r=e.split("?"),i=r[1]||"";return i&&(t=u("?"+i)),t}function q(){return"undefined"!=typeof window.matchMedia||"undefined"!=typeof window.msMatchMedia}function F(){var e=screen.msOrientation||screen.mozOrientation||(screen.orientation||{}).type,t="\u672a\u53d6\u5230\u503c";if(e)t=e.indexOf("landscape")>-1?"landscape":"portrait";else if(q()){var r=window.matchMedia||window.msMatchMedia;r("(orientation: landscape)").matches?t="landscape":r("(orientation: portrait)").matches&&(t="portrait")}return t}function z(){var e,t={},r=navigator.userAgent.toLowerCase();return(e=r.match(/opera.([\d.]+)/))?t.opera=Number(e[1].split(".")[0]):(e=r.match(/msie ([\d.]+)/))?t.ie=Number(e[1].split(".")[0]):(e=r.match(/edge.([\d.]+)/))?t.edge=Number(e[1].split(".")[0]):(e=r.match(/firefox\/([\d.]+)/))?t.firefox=Number(e[1].split(".")[0]):(e=r.match(/chrome\/([\d.]+)/))?t.chrome=Number(e[1].split(".")[0]):(e=r.match(/version\/([\d.]+).*safari/))?t.safari=Number(e[1].match(/^\d*.\d*/)):(e=r.match(/trident\/([\d.]+)/))&&(t.ie=11),t}function X(e){return p(e)?(e=d(e),A(e)):A(location.href)}function Z(e){return p(e)?(e=d(e),A(e)):A(location.pathname)}function Y(e,t){return e.hasAttribute?e.hasAttribute(t):e.attributes?!(!e.attributes[t]||!e.attributes[t].specified):void 0}function G(e,t){if("string"==typeof t)return Y(e,t);if(v(t)){for(var r=!1,i=0;i0)for(var a=e.split(""),s=0;st)for(n=r+n;l=i*n+o,lt;)n=n/2+o;n=i*n+o}return n}function te(e,t){var r=e.indexOf;if(r)return r.call(e,t);for(var i=0;i41||t.firefox>30||t.opera>25||t.safari>12)&&(e=!0):(t.chrome>41||t.firefox>30||t.opera>25||t.safari>11.3)&&(e=!0)}else(t.chrome>38||t.edge>13||t.firefox>30||t.opera>25||t.safari>11)&&(e=!0);return e}function pe(){return"undefined"!=typeof window.XMLHttpRequest&&("withCredentials"in new XMLHttpRequest||"undefined"!=typeof XDomainRequest)}function de(t){if(!r(t)||!p(t.callbackName))return pr.log("JSONP \u8bf7\u6c42\u7f3a\u5c11 callbackName"),!1;t.success=e(t.success)?t.success:function(){},t.error=e(t.error)?t.error:function(){},t.data=t.data||"";var i=document.createElement("script"),n=document.getElementsByTagName("head")[0],a=null,s=!1;if(n.appendChild(i),ce(t.timeout)&&(a=setTimeout(function(){return!s&&(t.error("timeout"),window[t.callbackName]=function(){pr.log("call jsonp error")},a=null,n.removeChild(i),void(s=!0))},t.timeout)),window[t.callbackName]=function(){clearTimeout(a),a=null,t.success.apply(null,arguments),window[t.callbackName]=function(){pr.log("call jsonp error")},n.removeChild(i)},t.url.indexOf("?")>-1?t.url+="&callbackName="+t.callbackName:t.url+="?callbackName="+t.callbackName,r(t.data)){var o=[];k(t.data,function(e,t){o.push(t+"="+e)}),t.data=o.join("&"),t.url+="&"+t.data}i.onerror=function(e){return!s&&(window[t.callbackName]=function(){pr.log("call jsonp error")},clearTimeout(a),a=null,n.removeChild(i),t.error(e),void(s=!0))},i.src=t.url}function _e(t){var r={visibleHandler:e(t.visible)?t.visible:function(){},hiddenHandler:e(t.hidden)?t.hidden:function(){},visibilityChange:null,hidden:null,isSupport:function(){return"undefined"!=typeof document[this.hidden]},init:function(){"undefined"!=typeof document.hidden?(this.hidden="hidden",this.visibilityChange="visibilitychange"):"undefined"!=typeof document.mozHidden?(this.hidden="mozHidden",this.visibilityChange="mozvisibilitychange"):"undefined"!=typeof document.msHidden?(this.hidden="msHidden",this.visibilityChange="msvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(this.hidden="webkitHidden",this.visibilityChange="webkitvisibilitychange"),this.listen()},listen:function(){if(this.isSupport()){var e=this;w(document,this.visibilityChange,function(){document[e.hidden]?e.hiddenHandler():e.visibleHandler()},1)}else w(window,"focus",this.visibleHandler),w(window,"blur",this.hiddenHandler)}};r.init()}function fe(e){e=P({success:function(){},error:function(){},appendCall:function(e){document.getElementsByTagName("head")[0].appendChild(e)}},e);var t=null;"css"===e.type&&(t=document.createElement("link"),t.rel="stylesheet",t.href=e.url),"js"===e.type&&(t=document.createElement("script"),t.async="async",t.setAttribute("charset","UTF-8"),t.src=e.url,t.type="text/javascript"),t.onload=t.onreadystatechange=function(){this.readyState&&"loaded"!==this.readyState&&"complete"!==this.readyState||(e.success(),t.onload=t.onreadystatechange=null)},t.onerror=function(){e.error(),t.onerror=null},e.appendCall(t)}function ge(e){if("string"!=typeof e)return"";for(var t=/^\s*javascript/i;t.test(e);)e=e.replace(t,"");return e}function he(e,t){e=String(e),t="number"==typeof t?t:13;for(var r=126,i=e.split(""),n=0,a=i.length;nr?(o&&(clearTimeout(o),o=null),l=u,s=e.apply(n,a),o||(n=a=null)):o||i.trailing===!1||(o=setTimeout(c,p)),s}}function be(e){var t=[];return null==e?t:(k(e,function(e){t[t.length]=e}),t)}function ke(e){return e?e.toArray?e.toArray():v(e)||ie(e)?Array.prototype.slice.call(e):be(e):[]}function Pe(e){for(var t,r=[],i={},n=0;ncr.para.datasend_timeout&&(cr.para.datasend_timeout=cr.para.callback_timeout),cr.para.heatmap&&cr.para.heatmap.collect_tags&&r(cr.para.heatmap.collect_tags)&&k(cr.para.heatmap.collect_tags,function(e,t){"div"!==t&&e&&cr.heatmap.otherTags.push(t)}),cr.para.heatmap&&"default"===cr.para.heatmap.clickmap&&cr.heatmap.initUnlimitedTags()}function Qe(e){var t={};for(var r in e)t[r]=e[r];cr.store._state.identities=t,cr.store.save()}function et(){cr._t=cr._t||1*new Date,cr.lib_version=xr,cr.is_first_visitor=!1,cr.source_channel_standard=Tr}function tt(){if(br.isSupport())try{sessionStorage.setItem("sensorsdata_jssdk_debug","true")}catch(e){cr.log("enableLocalLog error: "+e.message)}}function rt(){br.isSupport()&&sessionStorage.removeItem("sensorsdata_jssdk_debug")}function it(){var e=Array.prototype.slice.call(arguments),t=e[0],r=e.slice(1);return"string"==typeof t&&Xr[t]?Xr[t].apply(Xr,r):void("function"==typeof t?t.apply(cr,r):cr.log("quick\u65b9\u6cd5\u4e2d\u6ca1\u6709\u8fd9\u4e2a\u529f\u80fd"+e[0]))}function nt(t,i){return p(t)?r(window.SensorsDataWebJSSDKPlugin)&&r(window.SensorsDataWebJSSDKPlugin[t])&&e(window.SensorsDataWebJSSDKPlugin[t].init)?(window.SensorsDataWebJSSDKPlugin[t].init(cr,i),window.SensorsDataWebJSSDKPlugin[t]):r(cr.modules)&&r(cr.modules[t])&&e(cr.modules[t].init)?(cr.modules[t].init(cr,i),cr.modules[t]):void cr.log(t+"\u6ca1\u6709\u83b7\u53d6\u5230,\u8bf7\u67e5\u9605\u6587\u6863\uff0c\u8c03\u6574"+t+"\u7684\u5f15\u5165\u987a\u5e8f\uff01"):(cr.log("use\u63d2\u4ef6\u540d\u79f0\u5fc5\u987b\u662f\u5b57\u7b26\u4e32\uff01"),!1)}function at(e,t,r){qr.check({event:e,properties:t})&&qr.send({type:"track",event:e,properties:t},r)}function st(e,t){return!!qr.check({bindKey:e,bindValue:t})&&(cr.store._state.identities[e]=t,cr.store.save(),void qr.send({type:"track_id_bind",event:"$BindID",properties:{}}))}function ot(e,t){if(!qr.check({unbindKey:e,bindValue:t}))return!1;if(r(cr.store._state.identities)&&cr.store._state.identities.hasOwnProperty(e)&&cr.store._state.identities[e]===t){var i=cr.store.getUnionId().login_id;i&&e+"+"+t===i&&(cr.store._state.distinct_id=cr.store._state.first_id,cr.store._state.first_id="",cr.store.set("history_login_id",{name:"",value:""})),"$identity_cookie_id"!==e&&(delete cr.store._state.identities[e],cr.store.save())}var n={};n[e]=t,qr.send({identities:n,type:"track_id_unbind",event:"$UnbindID",properties:{}})}function lt(e,t,r){function i(e,t,r){function i(e){function i(){a||(a=!0,location.href=n.href)}e.stopPropagation(),e.preventDefault();var a=!1;setTimeout(i,1e3),cr.track(t,r,i)}e=e||{};var n=null;return e.ele&&(n=e.ele),e.event&&(n=e.target?e.target:e.event.target),r=r||{},!(!n||"object"!=typeof n)&&(!n.href||/^javascript/.test(n.href)||n.target||n.download||n.onclick?(cr.track(t,r),!1):(e.event&&i(e.event),void(e.ele&&qe(e.ele,"click",function(e){i(e)}))))}"object"==typeof e&&e.tagName?i({ele:e},t,r):"object"==typeof e&&e.target&&e.event&&i(e,t,r)}function ct(e,t,r){return r=r||{}, +!(!e||"object"!=typeof e)&&(!(!e.href||/^javascript/.test(e.href)||e.target)&&void qe(e,"click",function(i){function n(){a||(a=!0,location.href=e.href)}i.preventDefault();var a=!1;setTimeout(n,1e3),cr.track(t,r,n)}))}function ut(e,t,r){qr.check({item_type:e,item_id:t,properties:r})&&qr.sendItem({type:"item_set",item_type:e,item_id:t,properties:r||{}})}function pt(e,t){qr.check({item_type:e,item_id:t})&&qr.sendItem({type:"item_delete",item_type:e,item_id:t})}function dt(e,t){qr.check({propertiesMust:e})&&qr.send({type:"profile_set",properties:e},t)}function _t(e,t){qr.check({propertiesMust:e})&&qr.send({type:"profile_set_once",properties:e},t)}function ft(e,t){qr.check({propertiesMust:e})&&(k(e,function(t,r){p(t)?e[r]=[t]:v(t)?e[r]=t:(delete e[r],cr.log("appendProfile\u5c5e\u6027\u7684\u503c\u5fc5\u987b\u662f\u5b57\u7b26\u4e32\u6216\u8005\u6570\u7ec4"))}),ae(e)||qr.send({type:"profile_append",properties:e},t))}function gt(e,t){function r(e){for(var t in e)if(Object.prototype.hasOwnProperty.call(e,t)&&!/-*\d+/.test(String(e[t])))return!1;return!0}var i=e;p(e)&&(e={},e[i]=1),qr.check({propertiesMust:e})&&(r(e)?qr.send({type:"profile_increment",properties:e},t):cr.log("profile_increment\u7684\u503c\u53ea\u80fd\u662f\u6570\u5b57"))}function ht(e){qr.send({type:"profile_delete"},e),Rr.set("distinct_id",fr()),Rr.set("first_id","")}function mt(e,t){var r=e,i={};p(e)&&(e=[],e.push(r)),v(e)?(k(e,function(e){p(e)?i[e]=!0:cr.log("profile_unset\u7ed9\u7684\u6570\u7ec4\u91cc\u9762\u7684\u503c\u5fc5\u987b\u65f6string,\u5df2\u7ecf\u8fc7\u6ee4\u6389",e)}),qr.send({type:"profile_unset",properties:i},t)):cr.log("profile_unset\u7684\u53c2\u6570\u662f\u6570\u7ec4")}function vt(e,t){function r(e){cr.store._state.identities.$identity_anonymous_id=e,cr.store.save()}"number"==typeof e&&(e=String(e));var i=Rr.getFirstId();if("undefined"==typeof e){var n=fr();i?Rr.set("first_id",n):Rr.set("distinct_id",n),r(n)}else qr.check({distinct_id:e})&&(t===!0?i?Rr.set("first_id",e):Rr.set("distinct_id",e):i?Rr.change("first_id",e):Rr.change("distinct_id",e),r(e))}function yt(e,t,r,i){var n=Rr.getFirstId()||Rr.getDistinctId();Rr.set("distinct_id",e),qr.send({original_id:n,distinct_id:cr.store.getDistinctId(),type:"track_signup",event:t,properties:r},i)}function wt(e,t,r,i){"number"==typeof e&&(e=String(e)),qr.check({distinct_id:e,event:t,properties:r})&&yt(e,t,r,i)}function St(e){qr.check({properties:e})?P(Jr.currentProps,e):cr.log("register\u8f93\u5165\u7684\u53c2\u6570\u6709\u8bef")}function bt(e){Rr.clearAllProps(e)}function kt(e){var t;if(v(e)&&e.length>0)for(t=0;t-1?e.config.send_type:cr.para.send_type,"beacon"===r&&ue()===!1&&(r="image"),"ajax"===r&&pe()===!1&&(r="image"),r}function Jt(e){var t=Et(e);switch(t){case"image":return new ti(e);case"ajax":return new ri(e);case"beacon":return new ii(e);default:return new ti(e)}}function Ht(e){var t=Jt(e),r=t.start;return t.start=function(){var e=this;r.apply(this,arguments),setTimeout(function(){e.isEnd(!0)},cr.para.callback_timeout)},t.end=function(){this.callback&&this.callback();var e=this;setTimeout(function(){e.lastClear&&e.lastClear()},cr.para.datasend_timeout-cr.para.callback_timeout)},t.isEnd=function(){this.received||(this.received=!0,this.end())},t}function Ut(){this.sendTimeStamp=0,this.timer=null,this.serverUrl="",this.hasTabStorage=!1}function Bt(t){var r=location.href,i=window.history.pushState,n=window.history.replaceState;e(window.history.pushState)&&(window.history.pushState=function(){i.apply(window.history,arguments),t(r),r=location.href}),e(window.history.replaceState)&&(window.history.replaceState=function(){n.apply(window.history,arguments),t(r),r=location.href});var a;a=window.document.documentMode?"hashchange":i?"popstate":"hashchange",w(window,a,function(){t(r),r=location.href})}function Rt(e){var t=null,r=new RegExp(e+"=([^&#]+)");try{var i=JSON.parse(window.name);k(i,function(r,i){e===i&&(t=decodeURIComponent(r))})}catch(n){t=null}if(null===t){var a=location.href.match(r);a&&a[0]&&a[1]&&(t=c(a[1]))}return t}function Kt(e){function t(){var e=[];i.touch_app_bridge||e.push(cr.debug.defineMode("1")),r(cr.para.app_js_bridge)||(e.push(cr.debug.defineMode("2")),i.verify_success=!1),r(cr.para.heatmap)&&"default"==cr.para.heatmap.clickmap||e.push(cr.debug.defineMode("3")),"fail"===i.verify_success&&e.push(cr.debug.defineMode("4"));var t={callType:"app_alert",data:e};SensorsData_App_Visual_Bridge&&SensorsData_App_Visual_Bridge.sensorsdata_visualized_alert_info?SensorsData_App_Visual_Bridge.sensorsdata_visualized_alert_info(JSON.stringify(t)):window.webkit&&window.webkit.messageHandlers&&window.webkit.messageHandlers.sensorsdataNativeTracker&&window.webkit.messageHandlers.sensorsdataNativeTracker.postMessage&&window.webkit.messageHandlers.sensorsdataNativeTracker.postMessage(JSON.stringify(t))}var i=cr.bridge.bridge_info;if(r(window.SensorsData_App_Visual_Bridge)&&window.SensorsData_App_Visual_Bridge.sensorsdata_visualized_mode&&(window.SensorsData_App_Visual_Bridge.sensorsdata_visualized_mode===!0||window.SensorsData_App_Visual_Bridge.sensorsdata_visualized_mode()))if(r(cr.para.heatmap)&&"default"==cr.para.heatmap.clickmap)if(r(cr.para.app_js_bridge)&&"success"===i.verify_success)if(e)sa_jssdk_app_define_mode(cr,e);else{var n=location.protocol,a=["http:","https:"];n=te(a,n)>-1?n:"https:",fe({success:function(){setTimeout(function(){"undefined"!=typeof sa_jssdk_app_define_mode&&sa_jssdk_app_define_mode(cr,e)},0)},error:function(){},type:"js",url:n+"//static.sensorsdata.cn/sdk/"+cr.lib_version+"/vapph5define.min.js"})}else t();else t()}function Mt(){cr.para.is_track_single_page&&hi.on("switch",function(e){var t=function(t){t=t||{},e!==location.href&&(Jr.pageProp.referrer=X(e),cr.quick("autoTrack",P({$url:X(),$referrer:X(e)},t)))};if("boolean"==typeof cr.para.is_track_single_page)t();else if("function"==typeof cr.para.is_track_single_page){var i=cr.para.is_track_single_page();r(i)?t(i):i===!0&&t()}})}function Wt(){cr._q&&v(cr._q)&&cr._q.length>0&&k(cr._q,function(e){cr[e[0]].apply(cr,Array.prototype.slice.call(e[1]))}),r(cr.para.heatmap)&&(zr.initHeatmap(),zr.initScrollmap())}function Vt(){cr.readyState.setState(3),new cr.JSBridge({type:"visualized",app_call_js:function(){Kt("undefined"!=typeof sa_jssdk_app_define_mode?!0:!1)}}),Kt(!1),cr.bridge.app_js_bridge_v1(),Jr.initPage(),Mt(),!cr.para.app_js_bridge&&cr.para.batch_send&&dr.isSupport()&&cr.batchSend.batchInterval(),cr.store.init(),cr.vtrackBase.init(),cr.readyState.setState(4),Wt()}function qt(){vi.isSeachHasKeyword()?vi.hasKeywordHandle():window.parent!==self&&yi.isSearchHasKeyword()?yi.verifyVtrackMode():vi.isStorageHasKeyword()?vi.storageHasKeywordHandle():window.parent!==self&&yi.isStorageHasKeyword()?yi.verifyVtrackMode():(Vt(),yi.notifyUser())}function Ft(){k(wi,function(e){var t=cr[e];cr[e]=function(){if(cr.readyState.state<3)return v(cr._q)||(cr._q=[]),cr._q.push([e,arguments]),!1;{if(cr.readyState.getState())return t.apply(cr,arguments);try{console.error("\u8bf7\u5148\u521d\u59cb\u5316\u795e\u7b56JS SDK")}catch(r){cr.log(r)}}}})}function zt(e){this.cancel=function(){e=!0},this.getCanceled=function(){return e||!1}}function Xt(e,t,r){var i=null;try{i=JSON.parse(JSON.stringify(e))}catch(n){De(n)}this.getOriginalData=function(){return i},this.getPosition=function(){return t},this.cancelationToken=new zt,this.sensors=r}function Zt(e){if(!r(e))throw"error: Stage constructor requires arguments.";this.processDef=e,this.registeredInterceptors={}}function Yt(e){e&&e.dataStage&&ki.registerStageImplementation(e.dataStage)}function Gt(e){e.kit=ei,e.saEvent=qr,this.dataStage=Vr}function Qt(t){return r(t)?(k(t,function(r,i){if(v(r)){var n=[];k(r,function(e){p(e)?n.push(e):De("\u60a8\u7684\u6570\u636e-",i,r,"\u7684\u6570\u7ec4\u91cc\u7684\u503c\u5fc5\u987b\u662f\u5b57\u7b26\u4e32,\u5df2\u7ecf\u5c06\u5176\u5220\u9664")}),t[i]=n}p(r)||ce(r)||x(r)||ne(r)||v(r)||e(r)||"$option"===i||(De("\u60a8\u7684\u6570\u636e-",i,r,"-\u683c\u5f0f\u4e0d\u6ee1\u8db3\u8981\u6c42\uff0c\u6211\u4eec\u5df2\u7ecf\u5c06\u5176\u5220\u9664"),delete t[i])}),t):t}function er(e,t){return ce(t)&&e.length>t?(De("\u5b57\u7b26\u4e32\u957f\u5ea6\u8d85\u8fc7\u9650\u5236\uff0c\u5df2\u7ecf\u505a\u622a\u53d6--"+e),e.slice(0,t)):e}function tr(e){var t=["distinct_id","user_id","id","date","datetime","event","events","first_id","original_id","device_id","properties","second_id","time","users"];r(e)&&k(t,function(t,r){t in e&&(r<3?(delete e[t],De("\u60a8\u7684\u5c5e\u6027- "+t+"\u662f\u4fdd\u7559\u5b57\u6bb5\uff0c\u6211\u4eec\u5df2\u7ecf\u5c06\u5176\u5220\u9664")):De("\u60a8\u7684\u5c5e\u6027- "+t+"\u662f\u4fdd\u7559\u5b57\u6bb5\uff0c\u8bf7\u907f\u514d\u5176\u4f5c\u4e3a\u5c5e\u6027\u540d"))})}function rr(e){var t=["$element_selector","$element_path"],i=["sensorsdata_app_visual_properties"];r(e)&&k(e,function(n,a){if(r(n))rr(e[a]);else if(p(n)){if(te(i,a)>-1)return;e[a]=er(n,te(t,a)>-1?1024:Nr.max_string_length)}})}function ir(e){"undefined"!=typeof e.properties.$project&&(e.project=e.properties.$project,delete e.properties.$project),"undefined"!=typeof e.properties.$token&&(e.token=e.properties.$token,delete e.properties.$token)}function nr(e){if("item_type"in e){var t=e.item_type,r=function(t){return t||delete e.item_type,!0};Xe({item_type:t},r)}if("item_id"in e){var i=e.item_id,n=function(t,r,i){return t||"string"!==i||delete e.item_id,!0};Xe({item_id:i},n)}}function ar(e){k(e,function(t,r){var i=function(t,i,n){return t||"keyLength"===n||delete e[r],!0};Xe({propertyKey:r},i)})}function sr(e){var t=e.properties;r(t)?(Qt(t),tr(t),ir(e),ar(t),rr(t)):"properties"in e&&(e.properties={}),ve(e),nr(e)}function or(){this.dataStage=Pi}function lr(e){e&&(pr.setup(De),cr._=P(jr,Qr),cr.ee=mi,cr.sendState=ni,cr.events=new cr._.EventEmitterSa,cr.batchSend=oi,cr.bridge=li,cr.JSBridge=ci,cr.store=Rr,cr.vtrackBase=ui,cr.unlimitedDiv=pi,cr.customProp=di,cr.vtrackcollect=_i,cr.vapph5collect=gi,cr.heatmap=zr,cr.detectMode=qt,cr.registerFeature=Yt,Yt(new Gt(cr)),Yt(new or(cr)));var t=e?Yr:Si;for(var r in t)cr[r]=t[r]}var cr={};(function(){function e(i,n){function a(e,t){try{e()}catch(r){t&&t()}}function s(e){if(null!=s[e])return s[e];var t;if("bug-string-char-index"==e)t="a"!="a"[0];else if("json"==e)t=s("json-stringify")&&s("date-serialization")&&s("json-parse");else if("date-serialization"==e){if(t=s("json-stringify")&&w){var r=n.stringify;a(function(){t='"-271821-04-20T00:00:00.000Z"'==r(new p((-864e13)))&&'"+275760-09-13T00:00:00.000Z"'==r(new p(864e13))&&'"-000001-01-01T00:00:00.000Z"'==r(new p((-621987552e5)))&&'"1969-12-31T23:59:59.999Z"'==r(new p((-1)))})}}else{var i,o='{"a":[1,true,false,null,"\\u0000\\b\\n\\f\\r\\t"]}';if("json-stringify"==e){var r=n.stringify,u="function"==typeof r;u&&((i=function(){return 1}).toJSON=i,a(function(){u="0"===r(0)&&"0"===r(new l)&&'""'==r(new c)&&r(v)===h&&r(h)===h&&r()===h&&"1"===r(i)&&"[1]"==r([i])&&"[null]"==r([h])&&"null"==r(null)&&"[null,null,null]"==r([h,v,null])&&r({a:[i,!0,!1,null,"\0\b\n\f\r\t"]})==o&&"1"===r(null,i)&&"[\n 1,\n 2\n]"==r([1,2],null,1)},function(){u=!1})),t=u}if("json-parse"==e){var d,_=n.parse;"function"==typeof _&&a(function(){0!==_("0")||_(!1)||(i=_(o),d=5==i.a.length&&1===i.a[0],d&&(a(function(){d=!_('"\t"')}),d&&a(function(){d=1!==_("01")}),d&&a(function(){d=1!==_("1.")})))},function(){d=!1}),t=d}}return s[e]=!!t}function o(e){return T(this)}i||(i=r.Object()),n||(n=r.Object());var l=i.Number||r.Number,c=i.String||r.String,u=i.Object||r.Object,p=i.Date||r.Date,d=i.SyntaxError||r.SyntaxError,_=i.TypeError||r.TypeError,f=i.Math||r.Math,g=i.JSON||r.JSON;if("object"==typeof g&&g)return n.stringify=g.stringify,n.parse=g.parse,n.runInContext=e,n;var h,m=u.prototype,v=m.toString,y=m.hasOwnProperty,w=new p((-0xc782b5b800cec));if(a(function(){w=w.getUTCFullYear()==-109252&&0===w.getUTCMonth()&&1===w.getUTCDate()&&10==w.getUTCHours()&&37==w.getUTCMinutes()&&6==w.getUTCSeconds()&&708==w.getUTCMilliseconds()}),s["bug-string-char-index"]=s["date-serialization"]=s.json=s["json-stringify"]=s["json-parse"]=null,!s("json")){var S="[object Function]",b="[object Date]",k="[object Number]",P="[object String]",D="[object Array]",j="[object Boolean]",N=s("bug-string-char-index"),O=function(e,r){var i,n,a,s=0;(i=function(){this.valueOf=0}).prototype.valueOf=0,n=new i;for(a in n)y.call(n,a)&&s++;return i=n=null,s?O=function(e,t){var r,i,n=v.call(e)==S;for(r in e)n&&"prototype"==r||!y.call(e,r)||(i="constructor"===r)||t(r);(i||y.call(e,r="constructor"))&&t(r)}:(n=["valueOf","toString","toLocaleString","propertyIsEnumerable","isPrototypeOf","hasOwnProperty","constructor"],O=function(e,r){var i,a,s=v.call(e)==S,o=!s&&"function"!=typeof e.constructor&&t[typeof e.hasOwnProperty]&&e.hasOwnProperty||y;for(i in e)s&&"prototype"==i||!o.call(e,i)||r(i);for(a=n.length;i=n[--a];)o.call(e,i)&&r(i)}),O(e,r)};if(!s("json-stringify")&&!s("date-serialization")){var C={92:"\\\\",34:'\\"',8:"\\b",12:"\\f",10:"\\n",13:"\\r",9:"\\t"},$="000000",A=function(e,t){return($+(t||0)).slice(-e)},T=function(e){var t,r,i,n,a,s,o,l,c;if(w)t=function(e){r=e.getUTCFullYear(),i=e.getUTCMonth(),n=e.getUTCDate(),s=e.getUTCHours(),o=e.getUTCMinutes(),l=e.getUTCSeconds(),c=e.getUTCMilliseconds()};else{var u=f.floor,p=[0,31,59,90,120,151,181,212,243,273,304,334],d=function(e,t){return p[t]+365*(e-1970)+u((e-1969+(t=+(t>1)))/4)-u((e-1901+t)/100)+u((e-1601+t)/400)};t=function(e){for(n=u(e/864e5),r=u(n/365.2425)+1970-1;d(r+1,0)<=n;r++);for(i=u((n-d(r,0))/30.42);d(r,i+1)<=n;i++);n=1+n-d(r,i),a=(e%864e5+864e5)%864e5,s=u(a/36e5)%24,o=u(a/6e4)%60,l=u(a/1e3)%60,c=a%1e3}}return(T=function(e){return e>-1/0&&e<1/0?(t(e),e=(r<=0||r>=1e4?(r<0?"-":"+")+A(6,r<0?-r:r):A(4,r))+"-"+A(2,i+1)+"-"+A(2,n)+"T"+A(2,s)+":"+A(2,o)+":"+A(2,l)+"."+A(3,c)+"Z",r=i=n=s=o=l=c=null):e=null,e})(e)};if(s("json-stringify")&&!s("date-serialization")){var x=n.stringify;n.stringify=function(e,t,r){var i=p.prototype.toJSON;p.prototype.toJSON=o;var n=x(e,t,r);return p.prototype.toJSON=i,n}}else{var L="\\u00",I=function(e){var t=e.charCodeAt(0),r=C[t];return r?r:L+A(2,t.toString(16))},E=/[\x00-\x1f\x22\x5c]/g,J=function(e){return E.lastIndex=0,'"'+(E.test(e)?e.replace(E,I):e)+'"'},H=function(e,t,r,i,n,s,o){var l,c,u,d,f,g,m,y,w;if(a(function(){l=t[e]}),"object"==typeof l&&l&&(l.getUTCFullYear&&v.call(l)==b&&l.toJSON===p.prototype.toJSON?l=T(l):"function"==typeof l.toJSON&&(l=l.toJSON(e))),r&&(l=r.call(t,e,l)),l==h)return l===h?l:"null";switch(c=typeof l,"object"==c&&(u=v.call(l)),u||c){case"boolean":case j:return""+l;case"number":case k:return l>-1/0&&l<1/0?""+l:"null";case"string":case P:return J(""+l)}if("object"==typeof l){for(m=o.length;m--;)if(o[m]===l)throw _();if(o.push(l),d=[],y=s,s+=n,u==D){for(g=0,m=l.length;g0)for(i>10&&(i=10),n="";n.length=48&&n<=57||n>=97&&n<=102||n>=65&&n<=70||M();e+=R("0x"+a.slice(t,U));break;default:M()}else{if(34==n)break;for(n=a.charCodeAt(U),t=U;n>=32&&92!=n&&34!=n;)n=a.charCodeAt(++U);e+=a.slice(t,U)}if(34==a.charCodeAt(U))return U++,e;M();default:if(t=U,45==n&&(i=!0,n=a.charCodeAt(++U)),n>=48&&n<=57){for(48==n&&(n=a.charCodeAt(U+1),n>=48&&n<=57)&&M(),i=!1;U=48&&n<=57);U++);if(46==a.charCodeAt(U)){for(r=++U;r57));r++);r==U&&M(),U=r}if(n=a.charCodeAt(U),101==n||69==n){for(n=a.charCodeAt(++U),43!=n&&45!=n||U++,r=U;r57));r++);r==U&&M(),U=r}return+a.slice(t,U)}i&&M();var o=a.slice(U,U+4);if("true"==o)return U+=4,!0;if("fals"==o&&101==a.charCodeAt(U+4))return U+=5,!1;if("null"==o)return U+=4,null;M()}return"$"},V=function(e){var t,r;if("$"==e&&M(),"string"==typeof e){if("@"==(N?e.charAt(0):e[0]))return e.slice(1);if("["==e){for(t=[];e=W(),"]"!=e;)r?","==e?(e=W(),"]"==e&&M()):M():r=!0,","==e&&M(),t.push(V(e));return t}if("{"==e){for(t={};e=W(),"}"!=e;)r?","==e?(e=W(),"}"==e&&M()):M():r=!0,","!=e&&"string"==typeof e&&"@"==(N?e.charAt(0):e[0])&&":"==W()||M(),t[e.slice(1)]=V(W());return t}M()}return e},q=function(e,t,r){var i=F(e,t,r);i===h?delete e[t]:e[t]=i},F=function(e,t,r){var i,n=e[t];if("object"==typeof n&&n)if(v.call(n)==D)for(i=n.length;i--;)q(v,O,n,i,r);else O(n,function(e){q(n,e,r)});return r.call(e,t,n)};n.parse=function(e,t){var r,i;return U=0,B=""+e,r=V(W()),"$"!=W()&&M(),U=B=null,t&&v.call(t)==S?F((i={},i[""]=r,i),"",t):r}}}return n.runInContext=e,n}var t={"function":!0,object:!0},r=t[typeof window]&&window||this,i=r.JSON,n=r.JSON3,a=!1,s=e(r,r.JSON3={noConflict:function(){return a||(a=!0,r.JSON=i,r.JSON3=n,i=n=null),s}});r.JSON={parse:s.parse,stringify:s.stringify}}).call(window),function(e,t){t(e)}(window,function(e){if(e.atob)try{e.atob(" ")}catch(t){e.atob=function(e){var t=function(t){return e(String(t).replace(/[\t\n\f\r ]+/g,""))};return t.original=e,t}(e.atob)}else{var r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",i=/^(?:[A-Za-z\d+\/]{4})*?(?:[A-Za-z\d+\/]{2}(?:==)?|[A-Za-z\d+\/]{3}=?)?$/;e.btoa=function(e){e=String(e);for(var t,i,n,a,s="",o=0,l=e.length%3;o255||(n=e.charCodeAt(o++))>255||(a=e.charCodeAt(o++))>255)return"";t=i<<16|n<<8|a,s+=r.charAt(t>>18&63)+r.charAt(t>>12&63)+r.charAt(t>>6&63)+r.charAt(63&t)}return l?s.slice(0,l-3)+"===".substring(l):s},e.atob=function(e){if(e=String(e).replace(/[\t\n\f\r ]+/g,""),!i.test(e))return"";e+="==".slice(2-(3&e.length));for(var t,n,a,s="",o=0;o>16&255):64===a?String.fromCharCode(t>>16&255,t>>8&255):String.fromCharCode(t>>16&255,t>>8&255,255&t);return s}}}),function(){String.prototype.replaceAll||(String.prototype.replaceAll=function(e,t){return"[object regexp]"===Object.prototype.toString.call(e).toLowerCase()?this.replace(e,t):this.replace(new RegExp(e,"g"),t)})}();var ur,pr={setup:function(e){ur=e},log:function(){(ur||console&&console.log||function(){}).apply(null,arguments)}},dr={get:function(e){return window.localStorage.getItem(e)},parse:function(e){var t;try{t=JSON.parse(dr.get(e))||null}catch(r){pr.log(r)}return t},set:function(e,t){try{window.localStorage.setItem(e,t)}catch(r){pr.log(r)}},remove:function(e){window.localStorage.removeItem(e)},isSupport:function(){var e=!0;try{var t="__local_store_support__",r="testIsSupportStorage";dr.set(t,r),dr.get(t)!==r&&(e=!1),dr.remove(t)}catch(i){e=!1}return e}},_r=function(){function e(){return r=(9301*r+49297)%233280,r/233280}var t=new Date,r=t.getTime();return function(t){return Math.ceil(e()*t)}}();a.prototype.get=function(e,r,a,s){if(!e)throw new Error("key is must");r=r||1e4,a=a||1e3,s=s||function(){};var o=this.lockGetPrefix+e,l=dr.get(o),c=String(i());return l&&(l=n(l)||{randomNum:0,expireTime:0},l.expireTime>t())?s(null):(dr.set(o,JSON.stringify({randomNum:c,expireTime:t()+r})),void setTimeout(function(){l=n(dr.get(o))||{randomNum:0,expireTime:0},l&&l.randomNum===c?(s(dr.get(e)),dr.remove(e),dr.remove(o)):s(null)},a))},a.prototype.set=function(e,r,a,s,o){if(!e||!r)throw new Error("key and val is must");a=a||1e4,s=s||1e3,o=o||function(){};var l=this.lockSetPrefix+e,c=dr.get(l),u=String(i());return c&&(c=n(c)||{randomNum:0,expireTime:0},c.expireTime>t())?o({status:"fail",reason:"This key is locked"}):(dr.set(l,JSON.stringify({randomNum:u,expireTime:t()+a})),void setTimeout(function(){c=n(dr.get(l))||{randomNum:0,expireTime:0},c.randomNum===u?dr.set(e,r)&&o({status:"success"}):o({status:"fail",reason:"This key is locked"})},s))},l.prototype.on=function(e,t){if(!e||!t)return!1;if(!s(t))throw new Error("listener must be a function");this._events[e]=this._events[e]||[];var r="object"==typeof t;return this._events[e].push(r?t:{listener:t,once:!1}),this},l.prototype.prepend=function(e,t){if(!e||!t)return!1;if(!s(t))throw new Error("listener must be a function");this._events[e]=this._events[e]||[];var r="object"==typeof t;return this._events[e].unshift(r?t:{listener:t,once:!1}),this},l.prototype.prependOnce=function(e,t){return this.prepend(e,{listener:t,once:!0})},l.prototype.once=function(e,t){return this.on(e,{listener:t,once:!0})},l.prototype.off=function(e,t){var r=this._events[e];if(!r)return!1;if("number"==typeof t)r.splice(t,1);else if("function"==typeof t)for(var i=0,n=r.length;i=4&&(a=e(a,n),n=[]);return n.length>0&&(a=e(a,n)),a.toString(16)};return function(){var n=String(screen.height*screen.width);n=n&&/\d{5,}/.test(n)?n.toString(16):String(31242*i()).replace(".","").slice(0,8);var a=e()+"-"+t()+"-"+r()+"-"+n+"-"+e();return a?a:(String(i())+String(i())+String(i())).slice(2,15)}}(),gr=function(e){this.ele=e},hr=function(e,t){for(var r=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&r.push(e);return r};gr.prototype={addClass:function(e){var t=" "+this.ele.className+" ";return t.indexOf(" "+e+" ")===-1&&(this.ele.className=this.ele.className+(""===this.ele.className?"":" ")+e),this},removeClass:function(e){var t=" "+this.ele.className+" ";return t.indexOf(" "+e+" ")!==-1&&(this.ele.className=t.replace(" "+e+" "," ").slice(1,-1)),this},hasClass:function(e){var t=" "+this.ele.className+" ";return t.indexOf(" "+e+" ")!==-1},attr:function(e,t){return"string"==typeof e&&h(t)?this.ele.getAttribute(e):("string"==typeof e&&(t=String(t),this.ele.setAttribute(e,t)),this)},offset:function(){var e=this.ele.getBoundingClientRect();if(e.width||e.height){var t=this.ele.ownerDocument,r=t.documentElement;return{top:e.top+window.pageYOffset-r.clientTop,left:e.left+window.pageXOffset-r.clientLeft}}return{top:0,left:0}},getSize:function(){if(!window.getComputedStyle)return{width:this.ele.offsetWidth,height:this.ele.offsetHeight};try{var e=this.ele.getBoundingClientRect();return{width:e.width,height:e.height}}catch(t){return{width:0,height:0}}},getStyle:function(e){return this.ele.currentStyle?this.ele.currentStyle[e]:this.ele.ownerDocument.defaultView.getComputedStyle(this.ele,null).getPropertyValue(e)},wrap:function(e){var t=document.createElement(e);return this.ele.parentNode.insertBefore(t,this.ele),t.appendChild(this.ele),y(t)},getCssStyle:function(e){var t=this.ele.style.getPropertyValue(e);if(t)return t;var r=null;if("function"==typeof window.getMatchedCSSRules&&(r=window.getMatchedCSSRules(this.ele)),!r||!v(r))return null;for(var i=r.length-1;i>=0;i--){var n=r[i];if(t=n.style.getPropertyValue(e))return t}},sibling:function(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e},next:function(){return this.sibling(this.ele,"nextSibling")},prev:function(){return this.sibling(this.ele,"previousSibling")},siblings:function(){return hr((this.ele.parentNode||{}).firstChild,this.ele)},children:function(){return hr(this.ele.firstChild)},parent:function(){var e=this.ele.parentNode;return e=e&&11!==e.nodeType?e:null,y(e)},previousElementSibling:function(){var e=this.ele;if("previousElementSibling"in document.documentElement)return y(e.previousElementSibling);for(;e=e.previousSibling;)if(1===e.nodeType)return y(e);return y(null)},getSameTypeSiblings:function(){for(var e=this.ele,t=e.parentNode,r=e.tagName.toLowerCase(),i=[],n=0;n0&&(e=e.concat(Nr.source_channel),e=Pe(e)),k(e,function(e){t=W(location.href,e),t.length&&(r[e]=t)}),r},campaignParamsStandard:function(e,t){e=e||"",t=t||"";var r=Jr.campaignParams(),i={},n={};return k(r,function(r,a,s){(" "+Tr+" ").indexOf(" "+a+" ")!==-1?i[e+a]=s[a]:n[t+a]=s[a]}),{$utms:i,otherUtms:n}},properties:function(){var e=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0,t=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth||0,r={$timezone_offset:(new Date).getTimezoneOffset(),$screen_height:Number(screen.height)||0,$screen_width:Number(screen.width)||0,$viewport_height:e,$viewport_width:t,$lib:"js",$lib_version:xr};return r},currentProps:{},register:function(e){P(Jr.currentProps,e)}},Hr={get:function(e){return wr.get(e)},set:function(e,t,r,i){var n="";if(i="undefined"==typeof i?Nr.cross_subdomain:i){var a=Te(location.href);"url\u89e3\u6790\u5931\u8d25"===a&&(a=""),n=a?"; domain="+a:""}return wr.set(e,t,r,i,Nr.set_cookie_samesite,Nr.is_secure_cookie,n)},remove:function(e,t){return t="undefined"==typeof t?Nr.cross_subdomain:t,wr.remove(e,t)},isSupport:function(e,t){return e=e||"sajssdk_2015_cookie_access_test",t=t||"1",wr.isSupport(e,t)}};Hr.getNewUser=ze;var Ur={data:{},get:function(e){var t=this.data[e];return void 0===t?null:void 0!==t._expirationTimestamp_?(new Date).getTime()>t._expirationTimestamp_?null:t.value:t},set:function(e,t,r){if(r){var i,n=new Date;i="s"===String(r).slice(-1)?n.getTime()+1e3*Number(String(r).slice(0,-1)):n.getTime()+24*r*60*60*1e3,t={value:t,_expirationTimestamp_:i}}this.data[e]=t},getNewUserFlagMemoryKey:function(e){return"sajssdk_2015_"+Nr.sdk_id+e}},Br={checkIsAddSign:function(e){"track"===e.type&&(ze()?e.properties.$is_first_day=!0:e.properties.$is_first_day=!1)},is_first_visit_time:!1,is_page_first_visited:!1,checkIsFirstTime:function(e){"track"===e.type&&"$pageview"===e.event&&(this.is_first_visit_time?(e.properties.$is_first_time=!0,this.is_first_visit_time=!1):e.properties.$is_first_time=!1)},setDeviceId:function(e){var t=null,r=Hr.get("sensorsdata2015jssdkcross"+cr.para.sdk_id);r=Ne(r);var i={};null!=r&&le(r)&&(i=JSON.parse(r),i.$device_id&&(t=i.$device_id)),t=t||e,cr.para.cross_subdomain===!0?cr.store.set("$device_id",t):(i.$device_id=t,i=JSON.stringify(i),cr.para.encrypt_cookie&&(i=Oe(i)),Hr.set("sensorsdata2015jssdkcross"+cr.para.sdk_id,i,null,!0)),cr.para.is_track_device_id&&(Jr.currentProps.$device_id=t)},storeInitCheck:function(){if(cr.is_first_visitor){var e=new Date,t={h:23-e.getHours(),m:59-e.getMinutes(),s:59-e.getSeconds()};Hr.isSupport()?Hr.set(Fe("new_user"),"1",3600*t.h+60*t.m+t.s+"s"):Ur.set(Ur.getNewUserFlagMemoryKey("new_user"),"1",3600*t.h+60*t.m+t.s+"s"),this.is_first_visit_time=!0,this.is_page_first_visited=!0}else ze()||(this.checkIsAddSign=function(e){"track"===e.type&&(e.properties.$is_first_day=!1)}),this.checkIsFirstTime=function(e){"track"===e.type&&"$pageview"===e.event&&(e.properties.$is_first_time=!1)}},checkIsFirstLatest:function(){var e=Jr.pageProp.url_domain,t={};""===e&&(e="url\u89e3\u6790\u5931\u8d25");var i=Be(document.referrer,!0);if(cr.para.preset_properties.search_keyword_baidu?Je(document.referrer)&&(!Le()||r(i)&&i.active?cr.store._state&&cr.store._state.props&&(cr.store._state.props.$search_keyword_id&&delete cr.store._state.props.$search_keyword_id,cr.store._state.props.$search_keyword_id_type&&delete cr.store._state.props.$search_keyword_id_type,cr.store._state.props.$search_keyword_id_hash&&delete cr.store._state.props.$search_keyword_id_hash):(t.$search_keyword_id=Er.id(),t.$search_keyword_id_type=Er.type(),t.$search_keyword_id_hash=ee(t.$search_keyword_id))):cr.store._state&&cr.store._state.props&&(cr.store._state.props.$search_keyword_id&&delete cr.store._state.props.$search_keyword_id,cr.store._state.props.$search_keyword_id_type&&delete cr.store._state.props.$search_keyword_id_type,cr.store._state.props.$search_keyword_id_hash&&delete cr.store._state.props.$search_keyword_id_hash),cr.store.save(),k(cr.para.preset_properties,function(i,n){if(n.indexOf("latest_")===-1)return!1;if(n=n.slice(7),i){if("wx_ad_click_id"===n&&"not_collect"===i)return!1;if("utm"!==n&&"url\u89e3\u6790\u5931\u8d25"===e)"wx_ad_click_id"===n?(t._latest_wx_ad_click_id="url\u7684domain\u89e3\u6790\u5931\u8d25",t._latest_wx_ad_hash_key="url\u7684domain\u89e3\u6790\u5931\u8d25",t._latest_wx_ad_callbacks="url\u7684domain\u89e3\u6790\u5931\u8d25"):t["$latest_"+n]="url\u7684domain\u89e3\u6790\u5931\u8d25";else if(Je(document.referrer))switch(n){case"traffic_source_type":t.$latest_traffic_source_type=Ke();break;case"referrer":t.$latest_referrer=Jr.pageProp.referrer;break;case"search_keyword":Be()?t.$latest_search_keyword=Be():r(cr.store._state)&&r(cr.store._state.props)&&cr.store._state.props.$latest_search_keyword&&delete cr.store._state.props.$latest_search_keyword;break;case"landing_page":t.$latest_landing_page=X();break;case"wx_ad_click_id":var a=Re(location.href);t._latest_wx_ad_click_id=a.click_id,t._latest_wx_ad_hash_key=a.hash_key,t._latest_wx_ad_callbacks=a.callbacks}}else if("utm"===n&&cr.store._state&&cr.store._state.props)for(var s in cr.store._state.props)(0===s.indexOf("$latest_utm")||0===s.indexOf("_latest_")&&s.indexOf("_latest_wx_ad_")<0)&&delete cr.store._state.props[s];else if(cr.store._state&&cr.store._state.props&&"$latest_"+n in cr.store._state.props)delete cr.store._state.props["$latest_"+n];else if("wx_ad_click_id"==n&&cr.store._state&&cr.store._state.props&&i===!1){var o=["_latest_wx_ad_click_id","_latest_wx_ad_hash_key","_latest_wx_ad_callbacks"];k(o,function(e){e in cr.store._state.props&&delete cr.store._state.props[e]})}}),cr.register(t),cr.para.preset_properties.latest_utm){var n=Jr.campaignParamsStandard("$latest_","_latest_"),a=n.$utms,s=n.otherUtms;ae(a)||cr.register(a),ae(s)||cr.register(s)}}},Rr={requests:[],_sessionState:{},_state:{distinct_id:"",first_id:"",props:{},identities:{}},getProps:function(){return this._state.props||{}},getSessionProps:function(){return this._sessionState},getOriginDistinctId:function(){return this._state._distinct_id||this._state.distinct_id},getOriginUnionId:function(e){var t={};e=e||this._state;var r=e._first_id||e.first_id,i=e._distinct_id||e.distinct_id;return r&&i?(t.login_id=i,t.anonymous_id=r):t.anonymous_id=i,t},getDistinctId:function(){var e=this.getUnionId();return e.login_id||e.anonymous_id},getUnionId:function(e){var t=this.getOriginUnionId(e);return t.login_id&&this._state.history_login_id&&this._state.history_login_id.name&&this._state.history_login_id.name!==cr.IDENTITY_KEY.LOGIN&&(t.login_id=this._state.history_login_id.name+"+"+t.login_id),t},getFirstId:function(){return this._state._first_id||this._state.first_id},initSessionState:function(){var e=Hr.get("sensorsdata2015session");e=Ne(e);var t=null;null!==e&&"object"==typeof(t=n(e))&&(this._sessionState=t||{})},setOnce:function(e,t){e in this._state||this.set(e,t)},set:function(e,t){this._state=this._state||{};var r=this._state.distinct_id;this._state[e]=t,"first_id"===e?delete this._state._first_id:"distinct_id"===e&&delete this._state._distinct_id,this.save(),"distinct_id"===e&&r&&cr.events.tempAdd("changeDistinctId",t)},change:function(e,t){this._state["_"+e]=t},setSessionProps:function(e){var t=this._sessionState;P(t,e),this.sessionSave(t)},setSessionPropsOnce:function(e){var t=this._sessionState;$(t,e),this.sessionSave(t)},setProps:function(e,t){var r={};r=t?e:P(this._state.props||{},e);for(var i in r)"string"==typeof r[i]&&(r[i]=r[i].slice(0,cr.para.max_referrer_string_length));this.set("props",r)},setPropsOnce:function(e){var t=this._state.props||{};$(t,e),this.set("props",t)},clearAllProps:function(e){this._sessionState={};var t;if(v(e)&&e.length>0)for(t=0;tNr.max_id_length)},keyLength:function(e){return!(!p(e)||e.length>Nr.max_key_length)},stringLength:function(e){return!(!p(e)||e.length>Nr.max_string_length)},voidZero:function(e){return void 0!==e},reservedLoginId:function(e){return!(te(this.loginIDReservedNames,e)>-1)},reservedUnbind:function(e){return!(te(this.unbindReservedNames,e)>-1)},reservedBind:function(e){var t=Rr._state.history_login_id;return(!t||!t.name||t.name!==e)&&!(te(this.bindReservedNames,e)>-1)}},Wr={distinct_id:{rules:["string","emptyString","idLength"],onComplete:function(t,r,i){return!t&&("emptyString"===i&&(r="Id"),e(Kr[i])&&Kr[i](r),"idLength"===i)||t}},event:{rules:["string","emptyString","keyLength","regexTest"],onComplete:function(t,r,i){return t||("emptyString"===i&&(r="eventName"),e(Kr[i])&&Kr[i](r)),!0}},propertyKey:{rules:["string","emptyString","keyLength","regexTest"],onComplete:function(t,r,i){return t||("emptyString"===i&&(r="Property key"),e(Kr[i])&&Kr[i](r)),!0}},propertyValue:{rules:["voidZero"],onComplete:function(t,r,i){return t||(r="Property Value",e(Kr[i])&&Kr[i](r)),!0}},properties:function(t){return r(t)?k(t,function(t,r){Xe({propertyKey:r});var i=function(t,i,n){return t||(i=r+"'s Value",e(Kr[n])&&Kr[n](i)),!0};Xe({propertyValue:t},i)}):Mr.voidZero(t)&&De("properties\u53ef\u4ee5\u6ca1\u6709\uff0c\u4f46\u6709\u7684\u8bdd\u5fc5\u987b\u662f\u5bf9\u8c61"),!0},propertiesMust:function(e){return void 0!==e&&r(e)&&!ae(e)?this.properties.call(this,e):De("properties\u5fc5\u987b\u662f\u5bf9\u8c61"),!0},item_type:{rules:["string","emptyString","keyLength","regexTest"],onComplete:function(t,r,i){return t||("emptyString"===i&&(r="item_type"),e(Kr[i])&&Kr[i](r)),!0}},item_id:{rules:["string","emptyString","stringLength"],onComplete:function(t,r,i){return t||("emptyString"===i&&(r="item_id"),e(Kr[i])&&Kr[i](r)),!0}},loginIdKey:{rules:["string","emptyString","keyLength","regexTest","reservedLoginId"],onComplete:function(t,r,i){return!t&&("emptyString"===i&&(r="login_id_key"),e(Kr[i])&&Kr[i](r),"keyLength"===i)||t}},bindKey:{rules:["string","emptyString","keyLength","regexTest","reservedBind"],onComplete:function(t,r,i){return!t&&("emptyString"===i&&(r="Key"),e(Kr[i])&&Kr[i](r),"keyLength"===i)||t}},unbindKey:{rules:["string","emptyString","keyLength","regexTest","reservedUnbind"],onComplete:function(t,r,i){return!t&&("emptyString"===i&&(r="Key"),e(Kr[i])&&Kr[i](r),"keyLength"===i)||t}},bindValue:{rules:["string","emptyString","idLength"],onComplete:function(t,r,i){return!t&&("emptyString"===i&&(r="Value"),e(Kr[i])&&Kr[i](r),"idLength"===i)||t}},check:function(t,r,i){var n=this[t];if(e(n))return n.call(this,r);if(!n)return!1;for(var a=0;a-1)return i;if("area"===n&&"map"===a.tagName.toLowerCase()&&y(a).prev().tagName&&"img"===y(a).prev().tagName.toLowerCase())return y(a).prev();if("div"===n&&cr.para.heatmap.collect_tags.div&&r.isDivLevelValid(i)){var o=cr.para.heatmap&&cr.para.heatmap.collect_tags&&cr.para.heatmap.collect_tags.div&&cr.para.heatmap.collect_tags.div.max_level||1;if(o>1||r.isCollectableDiv(i))return i}if(r.isStyleTag(n)&&cr.para.heatmap.collect_tags.div){var l=r.getCollectableParent(i);if(l&&r.isDivLevelValid(l))return l}var c=r.hasElement({event:t&&t.originalEvent||t,element:e},function(e){return r.isUnlimitedTag(e)});return c||null},getDivLevels:function(e,t){var r=zr.getElementPath(e,!0,t),i=r.split(" > "),n=0;return k(i,function(e){"div"===e&&n++}),n},isDivLevelValid:function(e){for(var t=cr.para.heatmap&&cr.para.heatmap.collect_tags&&cr.para.heatmap.collect_tags.div&&cr.para.heatmap.collect_tags.div.max_level||1,r=e.getElementsByTagName("div"),i=r.length-1;i>=0;i--)if(zr.getDivLevels(r[i],e)>t)return!1;return!0},getElementPath:function(e,t,r){for(var i=[];e.parentNode;){if(e.id&&!t&&/^[A-Za-z][-A-Za-z0-9_:.]*$/.test(e.id)){i.unshift(e.tagName.toLowerCase()+"#"+e.id);break}if(r&&e===r){i.unshift(e.tagName.toLowerCase());break}if(e===document.body){i.unshift("body");break}i.unshift(e.tagName.toLowerCase()),e=e.parentNode}return i.join(" > ")},getClosestLi:function(e){var t=function(e,t){for(;e&&e!==document&&1===e.nodeType;e=e.parentNode)if(e.tagName.toLowerCase()===t)return e;return null};return t(e,"li")},getElementPosition:function(e,t,r){function i(e){var t=e.parentNode;if(!t)return"";var r=y(e).getSameTypeSiblings(),i=r.length;if(1===i)return 0;for(var n=0,a=e;y(a).previousElementSibling().ele;a=y(a).previousElementSibling().ele,n++);return n}var n=cr.heatmap.getClosestLi(e);if(!n)return null;var a=e.tagName.toLowerCase(),s=n.getElementsByTagName(a),o=s.length,l=[];if(o>1){for(var c=0;c1)return te(l,e)}return i(n)},setNotice:function(e){cr.is_heatmap_render_mode=!0,cr.para.heatmap||(cr.errorMsg="\u60a8SDK\u6ca1\u6709\u914d\u7f6e\u5f00\u542f\u70b9\u51fb\u56fe\uff0c\u53ef\u80fd\u6ca1\u6709\u6570\u636e\uff01"),e&&"http:"===e.slice(0,5)&&"https:"===location.protocol&&(cr.errorMsg="\u60a8\u7684\u5f53\u524d\u9875\u9762\u662fhttps\u7684\u5730\u5740\uff0c\u795e\u7b56\u5206\u6790\u73af\u5883\u4e5f\u5fc5\u987b\u662fhttps\uff01"),cr.para.heatmap_url||(cr.para.heatmap_url=location.protocol+"//static.sensorsdata.cn/sdk/"+cr.lib_version+"/heatmap.min.js")},getDomIndex:function(e){if(!e.parentNode)return-1;for(var t=0,r=e.tagName,i=e.parentNode.children,n=0;n "):this.getDomSelector(e.parentNode,t,r)):(t.unshift("body"),t.join(" > "))},na:function(){var e=document.documentElement.scrollLeft||window.pageXOffset;return parseInt(isNaN(e)?0:e,10)},i:function(){var e=0;try{e=o.documentElement&&o.documentElement.scrollTop||m.pageYOffset,e=isNaN(e)?0:e}catch(t){e=0}return parseInt(e,10)},getBrowserWidth:function(){var e=window.innerWidth||document.body.clientWidth;return isNaN(e)?0:parseInt(e,10)},getBrowserHeight:function(){var e=window.innerHeight||document.body.clientHeight;return isNaN(e)?0:parseInt(e,10)},getScrollWidth:function(){var e=parseInt(document.body.scrollWidth,10);return isNaN(e)?0:e},getEleDetail:function(e){var t=this.getDomSelector(e),r=xe({target:e});r.$element_selector=t?t:"",r.$element_path=cr.heatmap.getElementPath(e,cr.para.heatmap&&"not_use_id"===cr.para.heatmap.element_selector);var i=cr.heatmap.getElementPosition(e,r.$element_path,cr.para.heatmap&&"not_use_id"===cr.para.heatmap.element_selector);return ce(i)&&(r.$element_position=i),r},getPointerEventProp:function(e,t){function r(){var e=document.body.scrollLeft||document.documentElement.scrollLeft||0,t=document.body.scrollTop||document.documentElement.scrollTop||0;return{scrollLeft:e,scrollTop:t}}function i(e){if(document.documentElement.getBoundingClientRect){var t=e.getBoundingClientRect();return{targetEleX:t.left+r().scrollLeft||0,targetEleY:t.top+r().scrollTop||0}}}function n(e){return Number(Number(e).toFixed(3))}function a(e){var a=e.pageX||e.clientX+r().scrollLeft||e.offsetX+i(t).targetEleX||0,s=e.pageY||e.clientY+r().scrollTop||e.offsetY+i(t).targetEleY||0;return{$page_x:n(a),$page_y:n(s)}}return e?a(e):{}},start:function(t,i,n,a,s){var o=r(a)?a:{},l=e(s)?s:e(a)?a:void 0;if(cr.para.heatmap&&cr.para.heatmap.collect_element&&!cr.para.heatmap.collect_element(i))return!1;var c=this.getEleDetail(i);if(cr.para.heatmap&&cr.para.heatmap.custom_property){var u=cr.para.heatmap.custom_property(i);r(u)&&(c=P(c,u))}c=P(c,this.getPointerEventProp(t,i),o),"a"===n&&cr.para.heatmap&&cr.para.heatmap.isTrackLink===!0?cr.trackLink({event:t,target:i},"$WebClick",c):cr.track("$WebClick",c,l)},hasElement:function(e,t){var r;if(e.event){var i=e.event;r=i.path||i._getPath&&i._getPath()}else e.element&&(r=y(e.element).getParents());if(r&&v(r)&&r.length>0)for(var n=0;n-1)&&(!t||cr.para.heatmap&&cr.para.heatmap.collect_tags&&cr.para.heatmap.collect_tags.div?!!(r(cr.para.heatmap)&&r(cr.para.heatmap.collect_tags)&&r(cr.para.heatmap.collect_tags.div)&&v(cr.para.heatmap.collect_tags.div.ignore_tags)&&te(cr.para.heatmap.collect_tags.div.ignore_tags,e)>-1):te(n,e)>-1)},isCollectableDiv:function(e,t){try{if(0===e.children.length)return!0;for(var r=0;r1||this.isStyleTag(i,t)))return!1;if(!this.isCollectableDiv(e.children[r],t))return!1}return!0}catch(a){cr.log(a)}return!1},getCollectableParent:function(e,t){try{var r=e.parentNode,i=r?r.tagName.toLowerCase():"";if("body"===i)return!1;var n=cr.para&&cr.para.heatmap&&cr.para.heatmap.collect_tags&&cr.para.heatmap.collect_tags.div&&cr.para.heatmap.collect_tags.div.max_level;if(i&&"div"===i&&(n>1||this.isCollectableDiv(r,t)))return r;if(r&&this.isStyleTag(i,t))return this.getCollectableParent(r,t)}catch(a){cr.log(a)}return!1},listenUrlChange:function(e){e(),cr.ee.spa.on("switch",function(){e()})},initScrollmap:function(){if(!r(cr.para.heatmap)||"default"!==cr.para.heatmap.scroll_notice_map)return!1;var t=!0;cr.para.scrollmap&&e(cr.para.scrollmap.collect_url)&&this.listenUrlChange(function(){t=!!cr.para.scrollmap.collect_url()});var i=function(e){var t={};return t.timeout=e.timeout||1e3,t.func=e.func,t.hasInit=!1,t.inter=null,t.main=function(e,t){this.func(e,t),this.inter=null},t.go=function(e){var r={};this.inter||(r.$viewport_position=document.documentElement&&document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop||0,r.$viewport_position=Math.round(r.$viewport_position)||0,e?t.main(r,!0):this.inter=setTimeout(function(){t.main(r)},this.timeout))},t},n=i({timeout:1e3,func:function(e,t){var r=document.documentElement&&document.documentElement.scrollTop||window.pageYOffset||document.body.scrollTop||0,i=new Date,n=i-this.current_time;(n>cr.para.heatmap.scroll_delay_time&&r-e.$viewport_position!==0||t)&&(e.$url=X(),e.$title=document.title,e.$url_path=Z(),e.event_duration=Math.min(cr.para.heatmap.scroll_event_duration,parseInt(n)/1e3),e.event_duration=e.event_duration<0?0:e.event_duration,cr.track("$WebStay",e)),this.current_time=i}});n.current_time=new Date,qe(window,"scroll",function(){return!!t&&void n.go()}),qe(window,"unload",function(){return!!t&&void n.go("notime")})},initHeatmap:function(){var t=this,i=!0;return!(!r(cr.para.heatmap)||"default"!==cr.para.heatmap.clickmap)&&(e(cr.para.heatmap.collect_url)&&this.listenUrlChange(function(){i=!!cr.para.heatmap.collect_url()}),"all"===cr.para.heatmap.collect_elements?cr.para.heatmap.collect_elements="all":cr.para.heatmap.collect_elements="interact",void("all"===cr.para.heatmap.collect_elements?qe(document,"click",function(e){if(!i)return!1;var r=e||window.event;if(!r)return!1;var n=r.target||r.srcElement;if("object"!=typeof n)return!1;if("string"!=typeof n.tagName)return!1;var a=n.tagName.toLowerCase();if("body"===a||"html"===a)return!1;if(!n||!n.parentNode||!n.parentNode.children)return!1;var s=n.parentNode.tagName.toLowerCase();"a"===s||"button"===s?t.start(r,n.parentNode,s):t.start(r,n,a)}):qe(document,"click",function(e){if(!i)return!1;var n=e||window.event;if(!n)return!1;var a=n.target||n.srcElement,s=cr.heatmap.getTargetElement(a,e);s?t.start(n,s,s.tagName.toLowerCase()):g(a)&&"div"===a.tagName.toLowerCase()&&r(cr.para.heatmap)&&cr.para.heatmap.get_vtrack_config&&cr.unlimitedDiv.events.length>0&&cr.unlimitedDiv.isTargetEle(a)&&t.start(n,a,a.tagName.toLowerCase(),{$lib_method:"vtrack"})})))}},Xr={setOnlineState:function(e){if(e===!0&&r(cr.para.jsapp)&&"function"==typeof cr.para.jsapp.getData){cr.para.jsapp.isOnline=!0;var t=cr.para.jsapp.getData();v(t)&&t.length>0&&k(t,function(e){le(e)&&cr.sendState.realtimeSend(JSON.parse(e))})}else cr.para.jsapp.isOnline=!1},autoTrackIsUsed:!1,isReady:function(e){e()},getUtm:function(){return Jr.campaignParams()},getStayTime:function(){return(new Date-cr._t)/1e3},setProfileLocal:function(e){if(!dr.isSupport())return cr.setProfile(e),!1;if(!r(e)||ae(e))return!1;var t=cr.store.readObjectVal("sensorsdata_2015_jssdk_profile"),i=!1;if(r(t)&&!ae(t)){for(var n in e)!(n in t&&t[n]!==e[n])&&n in t||(t[n]=e[n],i=!0);i&&(cr.store.saveObjectVal("sensorsdata_2015_jssdk_profile",t),cr.setProfile(e))}else cr.store.saveObjectVal("sensorsdata_2015_jssdk_profile",e),cr.setProfile(e)},setInitReferrer:function(){var e=He();cr.setOnceProfile({_init_referrer:e,_init_referrer_host:Jr.pageProp.referrer_host})},setSessionReferrer:function(){var e=He();cr.store.setSessionPropsOnce({_session_referrer:e,_session_referrer_host:Jr.pageProp.referrer_host})},setDefaultAttr:function(){Jr.register({_current_url:location.href,_referrer:He(),_referring_host:Jr.pageProp.referrer_host})},trackHeatMap:function(e,t,r){if("object"==typeof e&&e.tagName){var i=e.tagName.toLowerCase(),n=e.parentNode.tagName.toLowerCase(),a=cr.para.heatmap&&cr.para.heatmap.track_attr?cr.para.heatmap.track_attr:["data-sensors-click"];"button"===i||"a"===i||"a"===n||"button"===n||"input"===i||"textarea"===i||G(e,a)||zr.start(null,e,i,t,r)}},trackAllHeatMap:function(e,t,r){if("object"==typeof e&&e.tagName){var i=e.tagName.toLowerCase();zr.start(null,e,i,t,r)}},autoTrackSinglePage:function(e,t){function i(){var e=Jr.campaignParams(),t={};return k(e,function(e,r,i){(" "+cr.source_channel_standard+" ").indexOf(" "+r+" ")!==-1?t["$"+r]=i[r]:t[r]=i[r]}),t}function n(e,t){cr.track("$pageview",P({$referrer:a,$url:X(),$url_path:Z(),$title:document.title},e,i()),t),a=X()}var a;a=this.autoTrackIsUsed?Jr.pageProp.url:Jr.pageProp.referrer,e=r(e)?e:{};var s=!e.not_set_profile;if(e.not_set_profile&&delete e.not_set_profile,n(e,t),this.autoTrackSinglePage=n,cr.is_first_visitor&&s){var o={};cr.para.preset_properties.search_keyword_baidu&&Je(document.referrer)&&Le()&&(o.$search_keyword_id=Er.id(),o.$search_keyword_id_type=Er.type(),o.$search_keyword_id_hash=ee(o.$search_keyword_id)),cr.setOnceProfile(P({$first_visit_time:new Date,$first_referrer:He(),$first_browser_language:p(navigator.language)?navigator.language.toLowerCase():"\u53d6\u503c\u5f02\u5e38",$first_browser_charset:"string"==typeof document.charset?document.charset.toUpperCase():"\u53d6\u503c\u5f02\u5e38",$first_traffic_source_type:Ke(),$first_search_keyword:Be()},i(),o)),cr.is_first_visitor=!1}},autoTrackWithoutProfile:function(e,t){e=r(e)?e:{},this.autoTrack(P(e,{not_set_profile:!0}),t)},autoTrack:function(e,t){e=r(e)?e:{};var i=Jr.campaignParams(),n={};k(i,function(e,t,r){(" "+cr.source_channel_standard+" ").indexOf(" "+t+" ")!==-1?n["$"+t]=r[t]:n[t]=r[t]});var a=!e.not_set_profile;e.not_set_profile&&delete e.not_set_profile;var s=location.href;if(cr.para.is_single_page&&S(function(){var r=He(s,!0);cr.track("$pageview",P({$referrer:r,$url:X(),$url_path:Z(),$title:document.title},n,e),t),s=X()}),cr.track("$pageview",P({$referrer:He(null,!0),$url:X(),$url_path:Z(),$title:document.title},n,e),t),cr.is_first_visitor&&a){var o={};cr.para.preset_properties.search_keyword_baidu&&Je(document.referrer)&&Le()&&(o.$search_keyword_id=Er.id(),o.$search_keyword_id_type=Er.type(),o.$search_keyword_id_hash=ee(o.$search_keyword_id)),cr.setOnceProfile(P({$first_visit_time:new Date,$first_referrer:He(null,!0),$first_browser_language:p(navigator.language)?navigator.language.toLowerCase():"\u53d6\u503c\u5f02\u5e38",$first_browser_charset:"string"==typeof document.charset?document.charset.toUpperCase():"\u53d6\u503c\u5f02\u5e38",$first_traffic_source_type:Ke(),$first_search_keyword:Be()},n,o)),cr.is_first_visitor=!1}this.autoTrackIsUsed=!0},getAnonymousID:function(){return ae(cr.store._state)?"\u8bf7\u5148\u521d\u59cb\u5316SDK":cr.store._state._first_id||cr.store._state.first_id||cr.store._state._distinct_id||cr.store._state.distinct_id},setPlugin:function(t){return!!r(t)&&void k(t,function(t,i){e(t)&&(r(window.SensorsDataWebJSSDKPlugin)&&window.SensorsDataWebJSSDKPlugin[i]?t(window.SensorsDataWebJSSDKPlugin[i]):cr.log(i+"\u6ca1\u6709\u83b7\u53d6\u5230,\u8bf7\u67e5\u9605\u6587\u6863\uff0c\u8c03\u6574"+i+"\u7684\u5f15\u5165\u987a\u5e8f\uff01"))})},useModulePlugin:function(){cr.use.apply(cr,arguments)},useAppPlugin:function(){this.setPlugin.apply(this,arguments)}},Zr={state:0,historyState:[],stateType:{1:"1-init\u672a\u5f00\u59cb",2:"2-init\u5f00\u59cb",3:"3-store\u5b8c\u6210"},getState:function(){return this.historyState.join("\n")},setState:function(e){String(e)in this.stateType&&(this.state=e),this.historyState.push(this.stateType[e])}},Yr={__proto__:null,addReferrerHost:Ze,addPropsHook:Ye,initPara:Ge,setInitVar:et,enableLocalLog:tt,disableLocalLog:rt,quick:it,use:nt, +track:at,bind:st,unbind:ot,trackLink:lt,trackLinks:ct,setItem:ut,deleteItem:pt,setProfile:dt,setOnceProfile:_t,appendProfile:ft,incrementProfile:gt,deleteProfile:ht,unsetProfile:mt,identify:vt,trackSignup:wt,registerPage:St,clearAllRegister:bt,clearPageRegister:kt,register:Pt,registerOnce:Dt,registerSession:jt,registerSessionOnce:Nt,login:Ct,loginWithKey:$t,logout:At,getPresetProperties:Tt,iOSWebClickPolyfill:xt,readyState:Zr,para_default:Or,log:De,debug:Ar,IDENTITY_KEY:Ir},Gr=function(){this._events=[],this.pendingEvents=[]};Gr.prototype={emit:function(e){var t=[].slice.call(arguments,1);k(this._events,function(r){r.type===e&&r.callback.apply(r.context,t)}),this.pendingEvents.push({type:e,data:t}),this.pendingEvents.length>20?this.pendingEvents.shift():null},on:function(e,t,r,i){"function"==typeof t&&(this._events.push({type:e,callback:t,context:r||this}),i=i!==!1,this.pendingEvents.length>0&&i&&k(this.pendingEvents,function(i){i.type===e&&t.apply(r,i.data)}))},tempAdd:function(e,t){if(t&&e)return this.emit(e,t)},isReady:function(){}};var Qr={__proto__:null,parseSuperProperties:Ce,searchConfigData:$e,strip_empty_properties:Ae,getCurrentDomain:Te,getEleInfo:xe,isBaiduTraffic:Le,getReferrerEqid:Ie,getReferrerEqidType:Ee,getBaiduKeyword:Er,isReferralTraffic:Je,getReferrer:He,getKeywordFromReferrer:Be,getWxAdIdFromUrl:Re,getReferSearchEngine:Ue,getSourceFromReferrer:Ke,info:Jr,ajax:Ve,getElementContent:We,cookie:Hr,addEvent:qe,EventEmitterSa:Gr,encrypt:Oe,decryptIfNeeded:Ne},ei={};ei.buildData=function(e){var t={identities:{},distinct_id:cr.store.getDistinctId(),lib:{$lib:"js",$lib_method:"code",$lib_version:String(cr.lib_version)},properties:{}};return r(e)&&r(e.identities)&&!ae(e.identities)?P(t.identities,e.identities):P(t.identities,Rr._state.identities),r(e)&&r(e.properties)&&!ae(e.properties)&&(e.properties.$lib_detail&&(t.lib.$lib_detail=e.properties.$lib_detail,delete e.properties.$lib_detail),e.properties.$lib_method&&(t.lib.$lib_method=e.properties.$lib_method,delete e.properties.$lib_method)),P(t,cr.store.getUnionId(),e),Vr.stage.process("addCustomProps",t),r(e.properties)&&!ae(e.properties)&&P(t.properties,e.properties),e.type&&"profile"===e.type.slice(0,7)||(t.properties=P({},Jr.properties(),Rr.getProps(),Rr.getSessionProps(),Jr.currentProps,t.properties),cr.para.preset_properties.latest_referrer&&!p(t.properties.$latest_referrer)&&(t.properties.$latest_referrer="\u53d6\u503c\u5f02\u5e38"),cr.para.preset_properties.latest_search_keyword&&!p(t.properties.$latest_search_keyword)&&(cr.para.preset_properties.search_keyword_baidu&&p(t.properties.$search_keyword_id)&&ce(t.properties.$search_keyword_id_hash)&&p(t.properties.$search_keyword_id_type)||(t.properties.$latest_search_keyword="\u53d6\u503c\u5f02\u5e38")),cr.para.preset_properties.latest_traffic_source_type&&!p(t.properties.$latest_traffic_source_type)&&(t.properties.$latest_traffic_source_type="\u53d6\u503c\u5f02\u5e38"),cr.para.preset_properties.latest_landing_page&&!p(t.properties.$latest_landing_page)&&(t.properties.$latest_landing_page="\u53d6\u503c\u5f02\u5e38"),"not_collect"===cr.para.preset_properties.latest_wx_ad_click_id?(delete t.properties._latest_wx_ad_click_id,delete t.properties._latest_wx_ad_hash_key,delete t.properties._latest_wx_ad_callbacks):cr.para.preset_properties.latest_wx_ad_click_id&&!p(t.properties._latest_wx_ad_click_id)&&(t.properties._latest_wx_ad_click_id="\u53d6\u503c\u5f02\u5e38",t.properties._latest_wx_ad_hash_key="\u53d6\u503c\u5f02\u5e38",t.properties._latest_wx_ad_callbacks="\u53d6\u503c\u5f02\u5e38"),p(t.properties._latest_wx_ad_click_id)&&(t.properties.$url=X())),t.properties.$time&&x(t.properties.$time)?(t.time=1*t.properties.$time,delete t.properties.$time):t.time=1*new Date,cr.vtrackBase.addCustomProps(t),Ce(t),Br.checkIsAddSign(t),Br.checkIsFirstTime(t),cr.addReferrerHost(t),cr.addPropsHook(t),Vr.stage.process("formatData",t),t},ei.sendData=function(e,t){var r=$e(e.properties);cr.para.debug_mode===!0?(cr.log(e),cr.saEvent.debugPath(JSON.stringify(e),t)):cr.sendState.getSendCall(e,r,t)},ei.encodeTrackData=function(e){var t=O(e),r="crc="+Q(t);return"data="+encodeURIComponent(t)+"&ext="+encodeURIComponent(r)};var ti=function(e){this.callback=e.callback,this.img=document.createElement("img"),this.img.width=1,this.img.height=1,cr.para.img_use_crossorigin&&(this.img.crossOrigin="anonymous"),this.data=e.data,this.server_url=Lt(e.server_url,e.data)};ti.prototype.start=function(){var e=this;cr.para.ignore_oom&&(this.img.onload=function(){this.onload=null,this.onerror=null,this.onabort=null,e.isEnd()},this.img.onerror=function(){this.onload=null,this.onerror=null,this.onabort=null,e.isEnd()},this.img.onabort=function(){this.onload=null,this.onerror=null,this.onabort=null,e.isEnd()}),this.img.src=this.server_url},ti.prototype.lastClear=function(){var e=z();void 0!==e.ie?this.img.src="about:blank":this.img.src=""};var ri=function(e){this.callback=e.callback,this.server_url=e.server_url,this.data=It(e.data)};ri.prototype.start=function(){var e=this;Ve({url:this.server_url,type:"POST",data:this.data,credentials:!1,timeout:cr.para.datasend_timeout,cors:!0,success:function(){e.isEnd()},error:function(){e.isEnd()}})};var ii=function(e){this.callback=e.callback,this.server_url=e.server_url,this.data=It(e.data)};ii.prototype.start=function(){var e=this;"object"==typeof navigator&&"function"==typeof navigator.sendBeacon&&navigator.sendBeacon(this.server_url,this.data),setTimeout(function(){e.isEnd()},40)};var ni={};ni.getSendCall=function(e,t,r){if(cr.is_heatmap_render_mode)return!1;if(cr.readyState.state<3)return cr.log("\u521d\u59cb\u5316\u6ca1\u6709\u5b8c\u6210"),!1;e._track_id=Number(String(i()).slice(2,5)+String(i()).slice(2,4)+String((new Date).getTime()).slice(-4)),e._flush_time=(new Date).getTime();var n=e;e=JSON.stringify(e);var a={data:n,config:t,callback:r};return cr.events.tempAdd("send",n),!cr.para.app_js_bridge&&cr.para.batch_send&&dr.isSupport()&&localStorage.length<100?(cr.log(n),cr.batchSend.add(a.data),!1):("item_set"===n.type||"item_delete"===n.type?this.prepareServerUrl(a):cr.bridge.dataSend(a,this,r),void cr.log(n))},ni.prepareServerUrl=function(e){if("object"==typeof e.config&&e.config.server_url)this.sendCall(e,e.config.server_url,e.callback);else if(v(cr.para.server_url)&&cr.para.server_url.length)for(var t=0;t-1&&r.splice(a,1),dr.remove(e[i])}dr.set(this.tabKey,JSON.stringify(this.generateTabStorageVal(r)))}},add:function(e){var r=ai+String(i()),a=dr.get(this.tabKey);null===a?(this.tabKey=si+String(i()),a=this.generateTabStorageVal()):a=n(a)||this.generateTabStorageVal(),a.data.push(r),a.expireTime=t()+2*cr.para.batch_send.send_interval,dr.set(this.tabKey,JSON.stringify(a)),cr.store.saveObjectVal(r,e),"track_signup"!==e.type&&"$pageview"!==e.event||this.sendImmediately()},generateTabStorage:function(){this.tabKey=si+String(i()),dr.set(this.tabKey,JSON.stringify(this.generateTabStorageVal()))},generateTabStorageVal:function(e){return e=e||[],{data:e,expireTime:t()+2*cr.para.batch_send.send_interval,serverUrl:this.serverUrl}},sendImmediately:function(){this.send()},recycle:function(){for(var e={},r=1e4,i="sajssdk-lock-get-",s=0;sc.expireTime&&this.serverUrl===c.serverUrl){var p=new a(i);p.get(o,r,1e3,function(e){if(e){null===dr.get(l.tabKey)&&l.generateTabStorage();var t=n(e)||l.generateTabStorageVal();dr.set(l.tabKey,JSON.stringify(l.generateTabStorageVal((n(dr.get(l.tabKey))||this.generateTabStorageVal()).data.concat(t.data))))}})}}else if(0===o.indexOf(i)){var d=n(dr.get(o))||{expireTime:0};t()-d.expireTime>r&&dr.remove(o)}}for(var _=0;_0)for(var n=0;n"),r=d(t.pop());if("div"!==r.slice(0,3))return!1}return!0},ui.configIsMatchNew=function(e,t){if(p(e.$element_selector)&&p(t.element_selector)){if("element_selector"===t.element_field&&"equal"===t["function"])return e.$element_selector===t.element_selector;if("element_selector"===t.element_field&&"contain"===t["function"])return e.$element_selector.indexOf(t.element_selector)>-1}if(p(e.$element_path)&&p(t.element_path)){if("element_path"===t.element_field&&"equal"===t["function"])return e.$element_path===t.element_path;if("element_path"===t.element_field&&"contain"===t["function"])return e.$element_path.indexOf(t.element_path)>-1}return!1},ui.configIsMatch=function(e,t){return(!t.limit_element_content||t.element_content===e.$element_content)&&((!t.limit_element_position||t.element_position===String(e.$element_position))&&(t.element_field&&t["function"]?ui.configIsMatchNew(e,t):ui.configIsMatchOldVersion(e,t)))},ui.configIsMatchOldVersion=function(e,t){if(!t.element_path)return!1;if(void 0!==e.$element_position){if(t.element_path!==e.$element_path)return!1}else if(cr.vtrackBase.isDiv({element_path:t.element_path})){if(e.$element_path.indexOf(t.element_path)<0)return!1}else if(t.element_path!==e.$element_path)return!1;return!0},ui.filterConfig=function(e,t,i){var n=[];if(!i){var a=ui.initUrl();if(!a)return[];i=a.page_url}return"$WebClick"===e.event&&k(t,function(t){r(t)&&("webclick"===t.event_type||"appclick"===t.event_type)&&r(t.event)&&t.event.url_host===i.host&&t.event.url_path===i.pathname&&ui.configIsMatch(e.properties,t.event)&&n.push(t)}),n},ui.getPropElInLi=function(e,t){if(!(e&&g(e)&&p(t)))return null;if("li"!==e.tagName.toLowerCase())return null;var r,i=cr.heatmap.getDomSelector(e);if(i){r=i+t;var n=B(r);return n?n:null}return cr.log("----custom---\u83b7\u53d6\u540c\u7ea7\u5c5e\u6027\u5143\u7d20\u5931\u8d25\uff0cselector\u4fe1\u606f\u5f02\u5e38",i,t),null},ui.getProp=function(e,t){if(!r(e))return!1;if(!(p(e.name)&&e.name.length>0))return cr.log("----vcustom----\u5c5e\u6027\u540d\u4e0d\u5408\u6cd5,\u5c5e\u6027\u629b\u5f03",e.name),!1;var i,n,a={};if("content"===e.method){var s;if(p(e.element_selector)&&e.element_selector.length>0)s=B(e.element_selector);else{if(!t||!p(e.list_selector))return cr.log("----vcustom----\u5c5e\u6027\u914d\u7f6e\u5f02\u5e38\uff0c\u5c5e\u6027\u629b\u5f03",e.name),!1;var o=B(t.properties.$element_selector);if(!o)return cr.log("----vcustom----\u70b9\u51fb\u5143\u7d20\u83b7\u53d6\u5f02\u5e38\uff0c\u5c5e\u6027\u629b\u5f03",e.name),!1;var l=cr.heatmap.getClosestLi(o);s=ui.getPropElInLi(l,e.list_selector)}if(!s||!g(s))return cr.log("----vcustom----\u5c5e\u6027\u5143\u7d20\u83b7\u53d6\u5931\u8d25\uff0c\u5c5e\u6027\u629b\u5f03",e.name),!1;if("input"===s.tagName.toLowerCase())i=s.value||"";else if("select"===s.tagName.toLowerCase()){var c=s.selectedIndex;ce(c)&&g(s[c])&&(i=We(s[c],"select"))}else i=We(s,s.tagName.toLowerCase());if(e.regular){try{n=new RegExp(e.regular).exec(i)}catch(u){return cr.log("----vcustom----\u6b63\u5219\u5904\u7406\u5931\u8d25\uff0c\u5c5e\u6027\u629b\u5f03",e.name),!1}if(null===n)return cr.log("----vcustom----\u5c5e\u6027\u89c4\u5219\u5904\u7406\uff0c\u672a\u5339\u914d\u5230\u7ed3\u679c,\u5c5e\u6027\u629b\u5f03",e.name),!1;if(!v(n)||!p(n[0]))return cr.log("----vcustom----\u6b63\u5219\u5904\u7406\u5f02\u5e38\uff0c\u5c5e\u6027\u629b\u5f03",e.name,n),!1;i=n[0]}if("STRING"===e.type)a[e.name]=i;else if("NUMBER"===e.type){if(i.length<1)return cr.log("----vcustom----\u672a\u83b7\u53d6\u5230\u6570\u5b57\u5185\u5bb9\uff0c\u5c5e\u6027\u629b\u5f03",e.name,i),!1;if(isNaN(Number(i)))return cr.log("----vcustom----\u6570\u5b57\u7c7b\u578b\u5c5e\u6027\u8f6c\u6362\u5931\u8d25\uff0c\u5c5e\u6027\u629b\u5f03",e.name,i),!1;a[e.name]=Number(i)}return a}return cr.log("----vcustom----\u5c5e\u6027\u4e0d\u652f\u6301\u6b64\u83b7\u53d6\u65b9\u5f0f",e.name,e.method),!1},ui.getAssignConfigs=function(e,t){var i=ui.initUrl();if(!i||!i.page_url)return[];if(!r(t))return[];var n=[];return t.events=t.events||t.eventList,v(t.events)&&t.events.length>0?(k(t.events,function(t){r(t)&&r(t.event)&&t.event.url_host===i.page_url.host&&t.event.url_path===i.page_url.pathname&&e(t)&&n.push(t)}),n):[]},ui.addCustomProps=function(e){if("success"===cr.bridge.bridge_info.verify_success){var t=cr.vapph5collect.customProp.geth5Props(JSON.parse(JSON.stringify(e)));r(t)&&!ae(t)&&(e.properties=P(e.properties,t))}var i=cr.vtrackcollect.customProp.getVtrackProps(JSON.parse(JSON.stringify(e)));return r(i)&&!ae(i)&&(e.properties=P(e.properties,i)),e},ui.init=function(){cr.vtrackcollect.init(),"success"===cr.bridge.bridge_info.verify_success&&cr.vapph5collect.init()};var pi={events:[],init:function(e){this.filterWebClickEvents(e)},filterWebClickEvents:function(e){this.events=cr.vtrackcollect.getAssignConfigs(function(e){return!(!r(e)||e.event.unlimited_div!==!0||"webclick"!==e.event_type)},e)},isTargetEle:function(e){var t=cr.heatmap.getEleDetail(e);if(!r(t)||!p(t.$element_path))return!1;for(var i=0;i0)},e),this.events.length?this.configSwitch=!0:this.configSwitch=!1},getVtrackProps:function(e){var t={};return this.collectAble()?("$WebClick"===e.event&&(t=this.clickCustomPropMaker(e,this.events)),t):{}},clickCustomPropMaker:function(e,t,i){var n=this;i=i||this.filterConfig(e,t,cr.vtrackcollect.url_info.page_url);var a={};return i.length?(k(i,function(t){v(t.properties)&&t.properties.length>0&&k(t.properties,function(t){var i=n.getProp(t,e);r(i)&&P(a,i)})}),a):{}},getProp:ui.getProp,getPropElInLi:ui.getPropElInLi,filterConfig:ui.filterConfig},_i={unlimitedDiv:pi,config:{},storageEnable:!0,storage_name:"webjssdkvtrackcollect",para:{session_time:18e5,timeout:5e3,update_interval:18e5},url_info:{},timer:null,update_time:null,customProp:di,initUrl:function(){var e=ui.initUrl();if(e){var t;try{t=new _(cr.para.server_url),t._values.Path="/config/visualized/Web.conf",e.api_url=t.getUrl()}catch(r){return cr.log("----vtrackcollect---API\u5730\u5740\u89e3\u6790\u5f02\u5e38",r),!1}this.url_info=e}return e},init:function(){if(!r(cr.para.heatmap)||!cr.para.heatmap.get_vtrack_config)return!1;if(dr.isSupport()||(this.storageEnable=!1),!this.initUrl())return cr.log("----vtrackcustom----\u521d\u59cb\u5316\u5931\u8d25\uff0curl\u4fe1\u606f\u89e3\u6790\u5931\u8d25"),!1;if(this.storageEnable){var e=cr.store.readObjectVal(this.storage_name);if(r(e)&&r(e.data))if(this.serverUrlIsSame(e.serverUrl)){this.config=e.data,this.update_time=e.updateTime,this.updateConfig(e.data);var t=(new Date).getTime(),i=t-this.update_time;if(ce(i)&&i>0&&i0&&r0&&k(a.properties,function(i){if(r(i))if(i.h5===!1)v(t.sensorsdata_app_visual_properties)||(t.sensorsdata_app_visual_properties=[]),t.sensorsdata_app_visual_properties.push(i);else{var a=n.getProp(i,e);r(a)&&(t=P(t,a))}}),p(a.event_name)&&i.push(a.event_name))}),r(window.SensorsData_App_Visual_Bridge)&&window.SensorsData_App_Visual_Bridge.sensorsdata_visualized_mode&&(window.SensorsData_App_Visual_Bridge.sensorsdata_visualized_mode===!0||window.SensorsData_App_Visual_Bridge.sensorsdata_visualized_mode())&&(t.sensorsdata_web_visual_eventName=i)}return t.sensorsdata_app_visual_properties&&(t.sensorsdata_app_visual_properties=O(JSON.stringify(t.sensorsdata_app_visual_properties))),t},initAppGetPropsBridge:function(){var t=this;return new cr.JSBridge({type:"getJSVisualProperties",app_call_js:function(i){var n={};try{i=JSON.parse(N(i))}catch(a){cr.log("getJSVisualProperties data parse error!")}if(r(i)){var s=i.sensorsdata_js_visual_properties,o=t.initUrl();o&&(o=o.page_url,v(s)&&s.length>0&&k(s,function(e){if(r(e)&&e.url_host===o.host&&e.url_path===o.pathname&&e.h5){var i=t.getProp(e);r(i)&&(n=P(n,i))}}))}var l=cr.bridge.bridge_info.platform;if("android"===l){var c={callType:"getJSVisualProperties",data:n};r(i)&&i.message_id&&(c.message_id=i.message_id),r(window.SensorsData_APP_New_H5_Bridge)&&e(SensorsData_APP_New_H5_Bridge.sensorsdata_js_call_app)?SensorsData_APP_New_H5_Bridge.sensorsdata_js_call_app(JSON.stringify(c)):r(window.SensorsData_APP_JS_Bridge)&&e(SensorsData_APP_JS_Bridge.sensorsdata_js_call_app)&&SensorsData_APP_JS_Bridge.sensorsdata_js_call_app(JSON.stringify(c))}return n}})}},gi={events:[],customProp:fi,getAssignConfigs:ui.getAssignConfigs,initUrl:ui.initUrl,init:function(){if(this.initUrl()){var e=this.getConfigFromApp();e&&this.updateConfigs(e),this.customProp.init(),this.initAppUpdateConfigBridge()}},initAppUpdateConfigBridge:function(){var e=this;return new cr.JSBridge({type:"updateH5VisualConfig",app_call_js:function(t){if(t){try{t=JSON.parse(N(t))}catch(r){return void cr.log("updateH5VisualConfig result parse error\uff01")}e.updateConfigs(t)}}})},getConfigFromApp:function(){var e=new cr.JSBridge({type:"sensorsdata_get_app_visual_config"}),t=e.getAppData();if(t)try{t=JSON.parse(N(t))}catch(r){t=null,cr.log("getAppVisualConfig result parse error\uff01")}return t},updateConfigs:function(e){this.events=this.filterConfigs(e),this.customProp.updateEvents(this.events)},filterConfigs:function(e){return this.getAssignConfigs(function(e){return!(!r(e)||e.h5===!1)},e)}},hi=new l,mi={};mi.spa=hi,mi.initSystemEvent=function(){Bt(function(e){hi.emit("switch",e)})};var vi={getOriginalUrl:function(){function e(e){var t=e.split("&"),r=["sa-request-id","sa-request-type","sa-request-url"],i=[]; +return k(t,function(e){r.indexOf(e.split("=")[0])<0&&i.push(e)}),i.join("&")}var t=location.protocol+"//"+location.host+location.pathname,r="",i="";if(location.search){var n=e(location.search.slice(1));n&&(r="?"+n)}if(location.hash&&(i=location.hash,location.hash.indexOf("?")>-1)){var a=location.hash.split("?"),s=e(a[1]);s&&(i=a[0]+"?"+s)}return decodeURI(t+r+i)},isSeachHasKeyword:function(){return null!==Rt("sa-request-id")&&("string"==typeof sessionStorage.getItem("sensors-visual-mode")&&sessionStorage.removeItem("sensors-visual-mode"),!0)},hasKeywordHandle:function(){var e=Rt("sa-request-id"),t=Rt("sa-request-type"),r=Rt("sa-request-url");zr.setNotice(r),br.isSupport()&&(null!==r&&sessionStorage.setItem("sensors_heatmap_url",r),sessionStorage.setItem("sensors_heatmap_id",e),null!==t?"1"===t||"2"===t||"3"===t?sessionStorage.setItem("sensors_heatmap_type",t):t=null:t=null!==sessionStorage.getItem("sensors_heatmap_type")?sessionStorage.getItem("sensors_heatmap_type"):null),this.isReady(e,t,this.getOriginalUrl())},isReady:function(e,t,r){cr.para.heatmap_url?fe({success:function(){setTimeout(function(){"undefined"!=typeof sa_jssdk_heatmap_render&&(sa_jssdk_heatmap_render(cr,e,t,r),"object"==typeof console&&"function"==typeof console.log&&(cr.heatmap_version&&cr.heatmap_version===cr.lib_version||console.log("heatmap.js\u4e0esensorsdata.js\u7248\u672c\u53f7\u4e0d\u4e00\u81f4\uff0c\u53ef\u80fd\u5b58\u5728\u98ce\u9669!")))},0)},error:function(){},type:"js",url:cr.para.heatmap_url}):cr.log("\u6ca1\u6709\u6307\u5b9aheatmap_url\u7684\u8def\u5f84")},isStorageHasKeyword:function(){return br.isSupport()&&"string"==typeof sessionStorage.getItem("sensors_heatmap_id")},storageHasKeywordHandle:function(){zr.setNotice(),vi.isReady(sessionStorage.getItem("sensors_heatmap_id"),sessionStorage.getItem("sensors_heatmap_type"),this.getOriginalUrl())}},yi={isStorageHasKeyword:function(){return br.isSupport()&&"string"==typeof sessionStorage.getItem("sensors-visual-mode")},isSearchHasKeyword:function(){return(Rt("sa-visual-mode")===!0||"true"===Rt("sa-visual-mode"))&&("string"==typeof sessionStorage.getItem("sensors_heatmap_id")&&sessionStorage.removeItem("sensors_heatmap_id"),!0)},loadVtrack:function(){fe({success:function(){},error:function(){},type:"js",url:cr.para.vtrack_url?cr.para.vtrack_url:location.protocol+"//static.sensorsdata.cn/sdk/"+cr.lib_version+"/vtrack.min.js"})},messageListener:function(e){function t(e){return se(e)?ge(e):(cr.log("\u53ef\u89c6\u5316\u6a21\u5f0f\u68c0\u6d4b URL \u5931\u8d25"),!1)}if("sa-fe"!==e.data.source)return!1;if("v-track-mode"===e.data.type){if(e.data.data&&e.data.data.isVtrack)if(br.isSupport()&&sessionStorage.setItem("sensors-visual-mode","true"),e.data.data.userURL&&location.href.match(/sa-visual-mode=true/)){var r=t(e.data.data.userURL);r&&(window.location.href=r)}else yi.loadVtrack();window.removeEventListener("message",yi.messageListener,!1)}},removeMessageHandle:function(){window.removeEventListener&&window.removeEventListener("message",yi.messageListener,!1)},verifyVtrackMode:function(){window.addEventListener&&window.addEventListener("message",yi.messageListener,!1),yi.postMessage()},postMessage:function(){window.parent&&window.parent.postMessage&&window.parent.postMessage({source:"sa-web-sdk",type:"v-is-vtrack",data:{sdkversion:"1.22.6"}},"*")},notifyUser:function(){var e=function(t){return"sa-fe"===t.data.source&&void("v-track-mode"===t.data.type&&(t.data.data&&t.data.data.isVtrack&&alert("\u5f53\u524d\u7248\u672c\u4e0d\u652f\u6301\uff0c\u8bf7\u5347\u7ea7\u90e8\u7f72\u795e\u7b56\u6570\u636e\u6cbb\u7406"),window.removeEventListener("message",e,!1)))};window.addEventListener&&window.addEventListener("message",e,!1),yi.postMessage()}},wi=["setItem","deleteItem","getAppStatus","track","quick","register","registerPage","registerOnce","trackSignup","setProfile","setOnceProfile","appendProfile","incrementProfile","deleteProfile","unsetProfile","identify","login","logout","trackLink","clearAllRegister","clearPageRegister"],Si={track:function(e,t,r){},quick:function(e,t,r,i){},register:function(e){},registerPage:function(e){},registerOnce:function(e){},clearAllRegister:function(e){},trackSignup:function(e,t,r,i){},setProfile:function(e,t){},setOnceProfile:function(e,t){},appendProfile:function(e,t){},incrementProfile:function(e,t){},deleteProfile:function(e){},unsetProfile:function(e,t){},identify:function(e,t){},login:function(e,t){},logout:function(e){},trackLink:function(e,t,r){},deleteItem:function(e,t){},setItem:function(e,t,r){},getAppStatus:function(e){},clearPageRegister:function(e){}};Zt.prototype.process=function(e,t){if(!(e&&e in this.processDef))return void De("process ["+e+"] is not supported");var r=this.registeredInterceptors[e];if(r&&v(r)&&r.length>0)for(var i={current:0,total:r.length},n=new Xt(t,i,cr),a=0;a=a.length:a.push(o);break;default:a.splice(s,0,o)}}}};var bi={addCustomProps:null,formatData:null},ki=new Zt(bi),Pi={init:function(){},interceptor:{formatData:{priority:0,entry:function(e){return sr(e),e}}}},Di=window.sensors_data_pre_config,ji=!!r(Di)&&Di.is_compliance_enabled;cr.init=function(e){return!(cr.readyState&&cr.readyState.state&&cr.readyState.state>=2)&&(ji&&lr(!0),cr.ee.initSystemEvent(),cr.setInitVar(),cr.readyState.setState(2),cr.initPara(e),cr.bridge.supportAppCallJs(),cr.detectMode(),void cr.iOSWebClickPolyfill())},ji?lr(!1):(lr(!0),Ft());var Ni=cr;try{cr.modules={},cr.modules.Amp=function(){"use strict";var e={sd:null,init:function(e){if(this.sd)return!1;if(this.sd=e,!this.sd||!this.sd._)return!1;var t=this.sd._.cookie.get("sensors_amp_id"),r=this.sd.store._state.distinct_id;if(t&&t.length>0){var i="amp-"===t.slice(0,4);if(t!==r){if(!i)return!1;this.sd.store._state.first_id?(this.sd.identify(t,!0),this.sd.saEvent.send({original_id:t,distinct_id:r,type:"track_signup",event:"$SignUp",properties:{}},null),this.setAmpId(r)):this.sd.identify(t,!0)}}else this.setAmpId(r);this.addListener()},addListener:function(){var e=this;this.sd.events.on("changeDistinctId",function(t){e.setAmpId(t)}),this.sd.events.isReady()},setAmpId:function(e){this.sd._.cookie.set("sensors_amp_id",e)}};return window.SensorsDataWebJSSDKPlugin&&"[object Object]"===Object.prototype.toString.call(window.SensorsDataWebJSSDKPlugin)?window.SensorsDataWebJSSDKPlugin.Amp=window.SensorsDataWebJSSDKPlugin.Amp||e:window.SensorsDataWebJSSDKPlugin={Amp:e},e}(),cr.modules.Channel=function(){"use strict";var e,t,r,i={event_list:[],latest_event_initial_time:null,max_save_time:2592e6,init:function(i){return!t&&(!!(t=i)&&(e=t._,r=t.store,!!e.localStorage.isSupport()&&(t.para.max_string_length=1024,this.eventList.init(),this.addLatestChannelUrl(),void this.addIsChannelCallbackEvent())))},addIsChannelCallbackEvent:function(){t.registerPage({$is_channel_callback_event:function(e){if(e.event&&"$WebClick"!==e.event&&"$pageview"!==e.event&&"$WebStay"!==e.event&&"$SignUp"!==e.event)return!i.eventList.hasEvent(e.event)&&(i.eventList.add(e.event),!0)}})},addLatestChannelUrl:function(){var r=this.getUrlDomain(),n=this.cookie.getChannel();if("url\u89e3\u6790\u5931\u8d25"===r)this.registerAndSave({_sa_channel_landing_url:"",_sa_channel_landing_url_error:"url\u7684domain\u89e3\u6790\u5931\u8d25"});else if(e.isReferralTraffic(document.referrer)){var a=e.getQueryParam(location.href,"sat_cf");e.isString(a)&&a.length>0?(this.registerAndSave({_sa_channel_landing_url:location.href}),i.channelLinkHandler()):this.registerAndSave({_sa_channel_landing_url:""})}else n?t.registerPage(n):t.registerPage({_sa_channel_landing_url:"",_sa_channel_landing_url_error:"\u53d6\u503c\u5f02\u5e38"})},registerAndSave:function(e){t.registerPage(e),this.cookie.saveChannel(e)},cookie:{getChannel:function(){var t=e.decryptIfNeeded(e.cookie.get("sensorsdata2015jssdkchannel"));return t=e.safeJSONParse(t),!(!e.isObject(t)||!t.prop)&&t.prop},saveChannel:function(r){var i={prop:r},n=JSON.stringify(i);t.para.encrypt_cookie&&(n=e.encrypt(n)),e.cookie.set("sensorsdata2015jssdkchannel",n)}},channelLinkHandler:function(){this.eventList.reset(),t.track("$ChannelLinkReaching")},getUrlDomain:function(){var t=e.info.pageProp.url_domain;return""===t&&(t="url\u89e3\u6790\u5931\u8d25"),t},eventList:{init:function(){var t=this.get(),r=(new Date).getTime();if(t&&e.isNumber(t.latest_event_initial_time)&&e.isArray(t.eventList)){var n=r-t.latest_event_initial_time;n>0&&n0&&(1===arguments.length&&o(arguments[0])?e=arguments[0]:arguments.length>=2&&o(arguments[1])&&(e=arguments[1])),!s())return this.log("\u4e0d\u652f\u6301\u5f53\u524d\u7cfb\u7edf\uff0c\u76ee\u524d\u53ea\u652f\u6301Android\u548ciOS"),!1;if(o(e)&&this.sd._.isNumber(e.timeout)&&e.timeout>=2500&&(this.timeout=e.timeout),!this.sd.para.server_url)return this.log("\u795e\u7b56JS SDK\u914d\u7f6e\u9879server_url\u672a\u6b63\u786e\u914d\u7f6e"),!1;var t=c(this.sd);this.apiURL=this.apiURL.replace("{origin}",t.origin).replace("{project}",t.project);var r=this.sd._.getQueryParam(window.location.href,"deeplink");if(!r)return this.log("\u5f53\u524d\u9875\u9762\u7f3a\u5c11deeplink\u53c2\u6570"),!1;r=window.decodeURIComponent(r);var i=l(r);return i?(this.key=i[2],this.apiURL=this.apiURL.replace("{key}",window.encodeURIComponent(i[2])),this.sd._.ajax({url:this.apiURL,type:"GET",cors:!0,credentials:!1,success:function(e){return e.errorMsg?(d.log("API\u62a5\u9519\uff1a"+e.errorMsg),!1):(d.data=e,d.log("API\u67e5\u8be2\u6210\u529f\uff0c\u6570\u636e\uff1a"+JSON.stringify(e,null," ")),void(this.data.app_key&&(this.data.android_info&&this.data.android_info.url_schemes&&(this.data.android_info.url_schemes+="://sensorsdata/sd/"+this.data.app_key+"/"+this.key),this.data.ios_info&&this.data.ios_info.url_schemes&&(this.data.ios_info.url_schemes+="://sensorsdata/sd/"+this.data.app_key+"/"+this.key))))}.bind(this),error:function(){d.log("API\u67e5\u8be2\u51fa\u9519")}}),void this.addListeners()):(this.log("\u5f53\u524d\u9875\u9762\u7684deeplink\u53c2\u6570\u65e0\u6548"),!1)},openDeepLink:function(){if(this.log("openDeeplink()"),!this.data)return this.log("\u6ca1\u6709Deep link\u6570\u636e!"),!1;if("iOS"===a){this.log("\u5f53\u524d\u7cfb\u7edf\u662fiOS");var e=this.sd&&this.sd._&&this.sd._.getIOSVersion()>=9&&this.data.ios_info.ios_wake_url?this.data.ios_info.ios_wake_url:this.data.ios_info.url_schemes;this.log("\u5524\u8d77APP\u7684\u5730\u5740\uff1a"+e),p(this,e,this.data.ios_info.download_url)}else this.log("\u5f53\u524d\u7cfb\u7edf\u662f android"),u(this,this.data.android_info.url_schemes,this.data.android_info.download_url)},log:function(e){this.sd&&this.sd.log(e)},addListeners:function(){var e=r().visibilityChange;e&&document.addEventListener(e,function(){clearTimeout(this.timer),this.log("visibilitychange, clear timeout:"+this.timer)}.bind(this),!1),window.addEventListener("pagehide",function(){this.log("page hide, clear timeout:"+this.timer),clearTimeout(this.timer)}.bind(this),!1)}};return o(window.SensorsDataWebJSSDKPlugin)?(window.SensorsDataWebJSSDKPlugin.Deeplink=window.SensorsDataWebJSSDKPlugin.Deeplink||d,window.SensorsDataWebJSSDKPlugin.deeplink=window.SensorsDataWebJSSDKPlugin.deeplink||d):window.SensorsDataWebJSSDKPlugin={Deeplink:d,deeplink:d},d}(),cr.modules.Pageleave=function(){"use strict";function e(){this.sd=null,this.start_time=+new Date,this.page_show_status=!0,this.page_hidden_status=!1,this._={},this.timer=null,this.current_page_url=document.referrer,this.url=location.href,this.option={},this.heartbeat_interval_time=5e3,this.heartbeat_interval_timer=null,this.page_id=null,this.storage_name="sawebjssdkpageleave"}var t=5e3;e.prototype.init=function(e,t){if(e){this.sd=e,this._=this.sd._;var r=this;if(t){this.option=t;var i=t.heartbeat_interval_time;i&&(this._.isNumber(i)||this._.isNumber(1*i))&&1*i>0&&(this.heartbeat_interval_time=1e3*i)}this.page_id=Number(String(this._.getRandom()).slice(2,5)+String(this._.getRandom()).slice(2,4)+String((new Date).getTime()).slice(-4)),r.addEventListener(),document.hidden===!0?this.page_show_status=!1:r.addHeartBeatInterval(),this.log("PageLeave\u521d\u59cb\u5316\u5b8c\u6bd5")}else this.log("\u795e\u7b56JS SDK\u672a\u6210\u529f\u5f15\u5165")},e.prototype.log=function(e){this.sd&&this.sd.log(e)},e.prototype.refreshPageEndTimer=function(){var e=this;this.timer&&(clearTimeout(this.timer),this.timer=null),this.timer=setTimeout(function(){e.page_hidden_status=!1},t)},e.prototype.hiddenStatusHandler=function(){clearTimeout(this.timer),this.timer=null,this.page_hidden_status=!1},e.prototype.pageStartHandler=function(){this.start_time=+new Date,!document.hidden==!0?this.page_show_status=!0:this.page_show_status=!1,this.url=location.href},e.prototype.pageEndHandler=function(){if(this.page_hidden_status!==!0){var e=this.getPageLeaveProperties();this.page_show_status===!1&&delete e.event_duration,this.page_show_status=!1,this.page_hidden_status=!0,this.isCollectUrl(this.url)&&this.sd.track("$WebPageLeave",e),this.refreshPageEndTimer(),this.delHeartBeatData()}},e.prototype.addEventListener=function(){this.addPageStartListener(),this.addPageSwitchListener(),this.addSinglePageListener(),this.addPageEndListener()},e.prototype.addPageStartListener=function(){var e=this;"onpageshow"in window&&this._.addEvent(window,"pageshow",function(){e.pageStartHandler(),e.hiddenStatusHandler()})},e.prototype.isCollectUrl=function(e){return"function"!=typeof this.option.isCollectUrl||("string"!=typeof e||""===e||this.option.isCollectUrl(e))},e.prototype.addSinglePageListener=function(){var e=this;this.sd.ee&&this.sd.ee.spa.prepend("switch",function(t){t!==location.href&&(e.url=t,e.pageEndHandler(),e.stopHeartBeatInterval(),e.current_page_url=e.url,e.pageStartHandler(),e.hiddenStatusHandler(),e.startHeartBeatInterval())})},e.prototype.addPageEndListener=function(){var e=this;this._.each(["pagehide","beforeunload","unload"],function(t){"on"+t in window&&e._.addEvent(window,t,function(){e.pageEndHandler(),e.stopHeartBeatInterval()})})},e.prototype.addPageSwitchListener=function(){var e=this;this._.listenPageState({visible:function(){e.pageStartHandler(),e.hiddenStatusHandler(),e.startHeartBeatInterval()},hidden:function(){e.url=location.href,e.pageEndHandler(),e.stopHeartBeatInterval()}})},e.prototype.addHeartBeatInterval=function(){this._.localStorage.isSupport()&&this.startHeartBeatInterval()},e.prototype.startHeartBeatInterval=function(){var e=this;this.heartbeat_interval_timer&&this.stopHeartBeatInterval();var t=!0;this.isCollectUrl(this.url)||(t=!1),this.heartbeat_interval_timer=setInterval(function(){t&&e.saveHeartBeatData()},this.heartbeat_interval_time),t&&this.saveHeartBeatData("is_first_heartbeat"),this.reissueHeartBeatData()},e.prototype.stopHeartBeatInterval=function(){clearInterval(this.heartbeat_interval_timer),this.heartbeat_interval_timer=null},e.prototype.saveHeartBeatData=function(e){var t=this.getPageLeaveProperties();t.$time=new Date,"is_first_heartbeat"===e&&(t.event_duration=3.14);var r=this.sd.kit.buildData({type:"track",event:"$WebPageLeave",properties:t});r.heartbeat_interval_time=this.heartbeat_interval_time,this.sd.store.saveObjectVal(this.storage_name+"-"+this.page_id,r)},e.prototype.delHeartBeatData=function(e){this._.localStorage.remove(e||this.storage_name+"-"+this.page_id)},e.prototype.reissueHeartBeatData=function(){for(var e=window.localStorage.length,t=e-1;t>=0;t--){var r=window.localStorage.key(t);if(r&&r!==this.storage_name+"-"+this.page_id&&0===r.indexOf(this.storage_name+"-")){var i=this.sd.store.readObjectVal(r);this._.isObject(i)&&1*new Date-i.time>i.heartbeat_interval_time+5e3&&(delete i.heartbeat_interval_time,this.sd.kit.sendData(i),this.delHeartBeatData(r))}}},e.prototype.getPageLeaveProperties=function(){var e=(+new Date-this.start_time)/1e3;(isNaN(e)||e<0)&&(e=0),e=Number(e.toFixed(3));var t=this._.getReferrer(this.current_page_url),r=document.documentElement&&document.documentElement.scrollTop||window.pageYOffset||document.body&&document.body.scrollTop||0;r=Math.round(r)||0;var i={$title:document.title,$url:this._.getURL(this.url),$url_path:this._.getURLPath(),$referrer_host:t?this._.getHostname(t):"",$referrer:t,$viewport_position:r};return 0!==e&&(i.event_duration=e),i=this._.extend(i,this.option.custom_props)};var r=new e;return window.SensorsDataWebJSSDKPlugin&&"[object Object]"===Object.prototype.toString.call(window.SensorsDataWebJSSDKPlugin)?window.SensorsDataWebJSSDKPlugin.PageLeave=window.SensorsDataWebJSSDKPlugin.PageLeave||r:window.SensorsDataWebJSSDKPlugin={PageLeave:r},r}(),cr.modules.Pageload=function(){"use strict";var e={init:function(e){function t(t,r){if(t.getEntries&&"function"==typeof t.getEntries){for(var i=t.getEntries(),n=null,a=0;a=0&&n<10737418240&&(r.$page_resource_size=Number((n/1024).toFixed(3)))}}function r(){var i=window.performance||window.webkitPerformance||window.msPerformance||window.mozPerformance,n=0,a={$url:e._.getURL(),$title:document.title,$url_path:e._.getURLPath(),$referrer:e._.getReferrer(null,!0)};if(i&&i.timing){var s=i.timing;0===s.fetchStart||0===s.domContentLoadedEventEnd?e.log("performance \u6570\u636e\u83b7\u53d6\u5f02\u5e38"):n=s.domContentLoadedEventEnd-s.fetchStart,t(i,a)}else e.log("\u6d4f\u89c8\u5668\u672a\u652f\u6301 performance API.");n>0&&(a.event_duration=Number((n/1e3).toFixed(3))),e.track("$WebPageLoad",a),window.removeEventListener?window.removeEventListener("load",r):window.detachEvent&&window.detachEvent("onload",r)}"complete"==document.readyState?r():window.addEventListener?window.addEventListener("load",r):window.attachEvent&&window.attachEvent("onload",r)}};return window.SensorsDataWebJSSDKPlugin&&"[object Object]"===Object.prototype.toString.call(window.SensorsDataWebJSSDKPlugin)?window.SensorsDataWebJSSDKPlugin.PageLoad=window.SensorsDataWebJSSDKPlugin.PageLoad||e:window.SensorsDataWebJSSDKPlugin={PageLoad:e},e}(),cr.modules.RegisterProperties=function(){"use strict";function e(e,t){if("track"!==e.type)return e;var r=t.sd,i=r._,n=r.saEvent.check,a=i.extend2Lev({properties:{}},e),s=t.currentProps,o=a.properties,l=a.event,c={};return i.each(s,function(e){if(i.isObject(e))e.events.indexOf(l)>-1&&n({properties:e.properties})&&(c=i.extend(c,e.properties));else if(i.isFunction(e)){var t=e({event:l,properties:o,data:a});i.isObject(t)&&!i.isEmptyObject(t)&&n({properties:t})&&(c=i.extend(c,t))}}),e.properties=i.extend(o,c),e}function t(t){var r=this;this.sd=t.sd,this.currentProps=t.customRegister,this.interceptor={addCustomProps:{priority:0,entry:function(t){return e(t,r),t}}}}function r(e){this.dataStage=new t(e)}function i(){this.sd=null,this.log=window.console&&window.console.log||function(){},this.customRegister=[]}t.prototype.init=function(){},i.prototype.init=function(e){e?(this.sd=e,this._=e._,this.log=e.log,e.registerFeature(new r(this))):this.log("\u795e\u7b56JS SDK\u672a\u6210\u529f\u5f15\u5165")},i.prototype.register=function(e){return this.sd?void(this._.isObject(e)&&this._.isArray(e.events)&&e.events.length>0&&this._.isObject(e.properties)&&!this._.isEmptyObject(e.properties)?this.customRegister.push(e):this.log("RegisterProperties: register \u53c2\u6570\u9519\u8bef")):void this.log("\u795e\u7b56JS SDK\u672a\u6210\u529f\u5f15\u5165")},i.prototype.hookRegister=function(e){return this.sd?void(this._.isFunction(e)?this.customRegister.push(e):this.log("RegisterProperties: hookRegister \u53c2\u6570\u9519\u8bef")):void this.log("\u795e\u7b56JS SDK\u672a\u6210\u529f\u5f15\u5165")};var n=new i;return n.__constructor__=i,window.SensorsDataWebJSSDKPlugin&&"[object Object]"===Object.prototype.toString.call(window.SensorsDataWebJSSDKPlugin)?window.SensorsDataWebJSSDKPlugin.RegisterProperties=window.SensorsDataWebJSSDKPlugin.RegisterProperties||n:window.SensorsDataWebJSSDKPlugin={RegisterProperties:n},n}(),cr.modules.RegisterPropertyPageHeight=function(){"use strict";function e(e){try{if("$pageview"!==e.event&&(!e.type||"profile"!==e.type.slice(0,7))){var n=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight||0,a=document.documentElement.scrollHeight||0,s={$page_height:Math.max(n,a)||0};e.properties=t._.extend(e.properties||{},s)}}catch(o){i("\u9875\u9762\u9ad8\u5ea6\u83b7\u53d6\u5f02\u5e38\u3002")}return r.call(t.kit,e)}var t,r,i=window.console&&window.console.log||function(){},n={init:function(n){return t=n,i=t&&t.log||i,n&&n.kit&&n.kit.buildData?(r=t.kit.buildData,t.kit.buildData=e,void i("RegisterPropertyPageHeight \u63d2\u4ef6\u521d\u59cb\u5316\u5b8c\u6210")):void i("RegisterPropertyPageHeight \u63d2\u4ef6\u521d\u59cb\u5316\u5931\u8d25,\u5f53\u524d\u4e3bsdk\u4e0d\u652f\u6301 RegisterPropertyPageHeight \u63d2\u4ef6\uff0c\u8bf7\u5347\u7ea7\u4e3bsdk")}};return window.SensorsDataWebJSSDKPlugin&&"[object Object]"===Object.prototype.toString.call(window.SensorsDataWebJSSDKPlugin)?window.SensorsDataWebJSSDKPlugin.RegisterPropertyPageHeight=window.SensorsDataWebJSSDKPlugin.RegisterPropertyPageHeight||n:window.SensorsDataWebJSSDKPlugin={RegisterPropertyPageHeight:n},n}(),function(){"use strict";var e={};e.getPart=function(e){var t=!1,r=this.option.length;if(r)for(var i=0;i-1)return!0;return t},e.getPartHash=function(e){var t=this.option.length,r=!1;if(t)for(var i=0;i-1)return this.option[i].after_hash;return!!r},e.getCurrenId=function(){var e=this.store.getDistinctId()||"",t=this.store.getFirstId()||"";this._.urlSafeBase64&&this._.urlSafeBase64.encode?e=e?this._.urlSafeBase64.trim(this._.urlSafeBase64.encode(this._.base64Encode(e))):"":this._.rot13obfs&&(e=e?this._.rot13obfs(e):"");var r=t?"f"+e:"d"+e;return encodeURIComponent(r)},e.rewriteUrl=function(e,t){var r=/([^?#]+)(\?[^#]*)?(#.*)?/,i=r.exec(e),n="";if(i){var a,s=i[1]||"",o=i[2]||"",l=i[3]||"";if(this.getPartHash(e)){a=l.indexOf("_sasdk");var c=l.indexOf("?");n=c>-1?a>-1?s+o+"#"+l.substring(1,a)+"_sasdk="+this.getCurrenId():s+o+"#"+l.substring(1)+"&_sasdk="+this.getCurrenId():s+o+"#"+l.substring(1)+"?_sasdk="+this.getCurrenId()}else{a=o.indexOf("_sasdk");var u=/^\?(\w)+/.test(o);n=u?a>-1?s+"?"+o.substring(1,a)+"_sasdk="+this.getCurrenId()+l:s+"?"+o.substring(1)+"&_sasdk="+this.getCurrenId()+l:s+"?"+o.substring(1)+"_sasdk="+this.getCurrenId()+l}return t&&(t.href=n),n}},e.getUrlId=function(){var e=location.href.match(/_sasdk=([aufd][^\?\#\&\=]+)/);if(this._.isArray(e)&&e[1]){var t=decodeURIComponent(e[1]);return!t||"f"!==t.substring(0,1)&&"d"!==t.substring(0,1)||(this._.urlSafeBase64&&this._.urlSafeBase64.isUrlSafeBase64&&this._.urlSafeBase64.isUrlSafeBase64(t)?t=t.substring(0,1)+this._.base64Decode(this._.urlSafeBase64.decode(t.substring(1))):this._.rot13defs&&(t=t.substring(0,1)+this._.rot13defs(t.substring(1)))),t}return""},e.setRefferId=function(){var e=this.store.getDistinctId(),t=this.getUrlId();if(""===t)return!1;var r="a"===t.substring(0,1)||"d"===t.substring(0,1);return t=t.substring(1),t!==e&&(t&&r&&this.store.getFirstId()&&(this.sd.identify(t,!0),this.sd.saEvent.send({original_id:t,distinct_id:e,type:"track_signup",event:"$SignUp",properties:{}},null)),t&&r&&!this.store.getFirstId()&&this.sd.identify(t,!0),void(!t||r||this.store.getFirstId()||this.sd.login(t)))},e.addListen=function(){var e=this,t=function(t){var r,i,n=t.target,a=n.tagName.toLowerCase(),s=n.parentNode;if("a"===a&&n.href||s&&s.tagName&&"a"===s.tagName.toLowerCase()&&s.href){"a"===a&&n.href?(r=n.href,i=n):(r=s.href,i=s);var o=e._.URL(r),l=o.protocol;"http:"!==l&&"https:"!==l||e.getPart(r)&&e.rewriteUrl(r,i)}};e._.addEvent(document,"mousedown",t),window.PointerEvent&&"maxTouchPoints"in window.navigator&&window.navigator.maxTouchPoints>=0&&e._.addEvent(document,"pointerdown",t)},e.init=function(e,t){function r(t){for(var r=t.length,i=[],n=0;n0?(this.setRefferId(),this.addListen(),this.option=t.linker,void(this.option=r(this.option))):void e.log("\u8bf7\u914d\u7f6e\u6253\u901a\u57df\u540d\u53c2\u6570\uff01")},window.SensorsDataWebJSSDKPlugin&&"[object Object]"===Object.prototype.toString.call(window.SensorsDataWebJSSDKPlugin)?window.SensorsDataWebJSSDKPlugin.SiteLinker=window.SensorsDataWebJSSDKPlugin.SiteLinker||e:window.SensorsDataWebJSSDKPlugin={SiteLinker:e}}(),"string"==typeof window.sensorsDataAnalytic201505?(cr.para=window[sensorsDataAnalytic201505].para,cr._q=window[sensorsDataAnalytic201505]._q,window[sensorsDataAnalytic201505]=cr,window.sensorsDataAnalytic201505=cr,cr.init()):"undefined"==typeof window.sensorsDataAnalytic201505?window.sensorsDataAnalytic201505=cr:Ni=window.sensorsDataAnalytic201505}catch(Oi){if("object"==typeof console&&console.log)try{console.log(Oi)}catch(Ci){cr.log(Ci)}}var $i=Ni;return $i}); \ No newline at end of file diff --git a/src/shared/axios/handleError.ts b/src/shared/axios/handleError.ts new file mode 100644 index 0000000000000000000000000000000000000000..156fbb62385f0408f1ed600092d1250cfa3b05b0 --- /dev/null +++ b/src/shared/axios/handleError.ts @@ -0,0 +1,54 @@ +import type { AxiosError } from 'axios'; + +export default (err: AxiosError) => { + const { response } = err; + if (response) { + if (!response.status) { + err.code = ''; + err.message = '有response但没有response.status的情况'; + } + err.code = String(response.status); + switch (response && response.status) { + case 200: + err.message = '错误响应也会有状态码为200的情况'; + break; + case 400: + 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 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..f623c0afdd860166febc60a3a694b6ef1366e6d1 --- /dev/null +++ b/src/shared/axios/handleResponse.ts @@ -0,0 +1,17 @@ +import type { AxiosResponse } from 'axios'; +// 处理响应错误码 +export default (response: AxiosResponse) => { + const { status } = response; + // 如果http响应状态码response.status正常,则直接返回数据 + if ((status >= 200 && status <= 300) || status === 304) { + return response; + } else { + const code = parseInt(response.data && response.data.code); + const message = (response.data || {}).msg; + + return { + code, + message, + }; + } +}; diff --git a/src/shared/axios/index.ts b/src/shared/axios/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..2956a536589e0d1724ffd3ca7c1e1ff5ffc1fca7 --- /dev/null +++ b/src/shared/axios/index.ts @@ -0,0 +1,222 @@ +/* eslint-disable */ +import axios from 'axios'; +import type { + AxiosError, + AxiosInstance, + AxiosRequestConfig, + AxiosResponse, + AxiosStatic, +} from 'axios'; +import handleResponse from './handleResponse'; +import handleError from './handleError'; +import setConfig from './setConfig'; +import { ElLoading, ElMessage } from 'element-plus'; +import { LoadingInstance } from 'element-plus/lib/components/loading/src/loading'; + +interface RequestConfig extends AxiosRequestConfig { + data?: D; + $doException?: boolean; // 是否弹出错误提示框 + global?: boolean; // 是否为全局请求, 全局请求在清除请求池时,不清除 +} + +// 全局loading +let loadingInstance: LoadingInstance | null = null; +let loadingCount = 0; + +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; +} + +/** + * 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 requestInterceptorId = request.interceptors.request.use( + (config) => { + if (loadingCount === 0) { + loadingInstance = ElLoading.service({ + fullscreen: true, + target: 'body', + text: 'Loading', + background: 'transparent', + }); + } + loadingCount++; + // 存储请求信息 + // request.config = Object.assign({}, config); + // 定义取消请求 + 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 as RequestConfig).global, + }); + // } + }); + return config; + }, + (err: AxiosError) => { + Promise.reject(err); + } +); + +/** + * 响应拦截 + */ +const responseInterceptorId = request.interceptors.response.use( + // @ts-ignore + (response: AxiosResponse) => { + loadingCount--; + if (loadingCount === 0 && loadingInstance) { + loadingInstance.close(); + loadingInstance = null; + } + const { config } = response; + // 请求完成,移除请求池 + if (config.url) { + pendingPool.delete(config.url); + } + + return Promise.resolve(handleResponse(response)); + }, + (err: AxiosError) => { + if (loadingInstance) { + loadingInstance.close(); + } + const { config } = err; + if (!(config as RequestConfig).$doException) { + ElMessage({ + type: 'error', + message: err.toString(), + }); + } + // 非取消请求发生异常,同样将请求移除请求池 + if (!axios.isCancel(err) && config?.url) { + pendingPool.delete(config.url); + } + + if (err.response) { + err = handleError(err); + } + // 没有response(没有状态码)的情况 + // 如: 超时;断网;请求重复被取消;主动取消请求; + else { + // 被取消的请求 + if (axios.isCancel(err)) { + throw new axios.Cancel(err.message || `请求'${config?.url}'被取消`); + // @ts-ignore + } else if (err.stack && err.stack.includes('timeout')) { + // @ts-ignore + err.message = '请求超时!'; + } else { + // @ts-ignore + err.message = '连接服务器失败!'; + } + } + return Promise.reject(err).catch(() => {}); + } +); +// 移除全局的请求拦截器 +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, + // interface + AxiosResponse, +}; +export type { RequestConfig, RequestInstance }; diff --git a/src/shared/axios/setConfig.ts b/src/shared/axios/setConfig.ts new file mode 100644 index 0000000000000000000000000000000000000000..8072e351a1b72fd2bcdfac9ce54654fe16e9c2ab --- /dev/null +++ b/src/shared/axios/setConfig.ts @@ -0,0 +1,17 @@ +import type { AxiosStatic } from 'axios'; + +/** + * @param {axios} axios实例 + * @param {config} 自定义配置对象,可覆盖掉默认的自定义配置 + */ +export default (axios: AxiosStatic, config = {}) => { + const defaultConfig = { + baseURL: '', + timeout: 20000, + headers: { + 'Content-Type': 'application/json;charset=UTF-8', + }, + }; + Object.assign(axios.defaults, defaultConfig, config); + return axios; +}; diff --git a/src/shared/index.ts b/src/shared/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..3cb7068a739871aa991dcf348ddc5a8b4293bfac --- /dev/null +++ b/src/shared/index.ts @@ -0,0 +1,139 @@ +import { Base64 } from 'js-base64'; +import { ElMessage } from 'element-plus'; +import i18n from '@/i18n'; +import { reactive } from 'vue'; + +import { uploadIssueImage } from '@/api/api-quick-issue'; + +// 提交issue相关 + +const { t } = i18n.global; + +export function getUrlParam(paraName: string) { + const url = document.location.toString(); + const arrObj = url.split('?'); + if (arrObj.length > 1) { + const arrPara = Base64.decode(arrObj[1]).split('&'); + let arr; + for (let i = 0; i < arrPara.length; i++) { + arr = arrPara[i].split('='); + if (arr !== null && arr[0] === paraName) { + return arr[1]; + } + } + return ''; + } else { + return ''; + } +} +export async function handleUploadImage( + event: Event, + insertImage: any, + files: [File] +) { + // 拿到 files 之后上传到文件服务器,然后向编辑框中插入对应的内容 + const file = files[0]; + if (file.size / 1024 / 1024 > 2) { + ElMessage({ + message: '不支持2MB以上图片上传', + type: 'error', + }); + return; + } + + const formData = new FormData(); + let url = ''; + formData.append('file', file); + await uploadIssueImage(formData).then((res) => { + if (res.code === 200 && res.data?.url) { + url = res.data?.url; + insertImage({ + url: url, + desc: '输入图片说明', + }); + } else { + ElMessage({ + message: res?.msg, + type: 'error', + }); + } + }); +} + +export function statisticalPoint(jump_url: string, quick_issue_email: string) { + const sensors = (window as any)['sensorsDataAnalytic201505']; + sensors?.setProfile({ + profileType: 'noGiteeCreateIssue', + ...((window as any)['sensorsCustomBuriedData'] || {}), + $utm_source: 'quick_issue', + jump_url, + quick_issue_email, + }); +} + +// +export const rules: any = reactive({ + title: [ + { + required: true, + message: t('quickIssue.MANDATORY1'), + trigger: 'blur', + }, + { + min: 1, + max: 100, + message: t('quickIssue.TITLE_LIMIT'), + trigger: 'blur', + }, + ], + issue_type_id: [ + { + required: true, + message: t('quickIssue.MANDATORY1'), + trigger: 'change', + }, + ], + repo: [ + { + required: true, + message: t('quickIssue.MANDATORY1'), + trigger: 'change', + }, + ], + privacy: [], + email: [], + code: [], +}); +export const privacyRules = [ + { + required: true, + message: t('quickIssue.MANDATORY1'), + trigger: 'change', + }, +]; +export const emailRules = [ + { + required: true, + message: t('quickIssue.EMAIL_ADRESS'), + trigger: 'change', + }, + { + pattern: new RegExp( + '^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$' + ), + message: t('quickIssue.RIGHT_EMAIL_ADRESS'), + trigger: 'change', + }, +]; +export const codeRules = [ + { + required: true, + message: t('quickIssue.VER_CODE'), + trigger: 'blur', + }, + { + pattern: /^\d{6}$/, + message: t('quickIssue.VER_CODE1'), + trigger: 'blur', + }, +]; diff --git a/src/shared/lang.ts b/src/shared/lang.ts new file mode 100644 index 0000000000000000000000000000000000000000..c72b03d6d6a6c4b25f48da7e4770e341dc77aec3 --- /dev/null +++ b/src/shared/lang.ts @@ -0,0 +1,4 @@ +export function getNewPath(lang: string, path: string) { + const newLang = lang === 'zh' ? 'en' : 'zh'; + return path.replace(`/${lang}/`, `/${newLang}/`); +} diff --git a/src/shared/styles/base.scss b/src/shared/styles/base.scss new file mode 100644 index 0000000000000000000000000000000000000000..afdec0e5b86e9f86a9c63ed8ded47f0fe0650030 --- /dev/null +++ b/src/shared/styles/base.scss @@ -0,0 +1,130 @@ +/* base */ +html, +body { + 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; + overflow-x: hidden; + overflow-y: auto; + scroll-padding-top: 80px; + font-family: 'Helvetica', 'Arial', 'PingFang SC', 'Microsoft YaHei', + sans-serif; + &::-webkit-scrollbar-track { + border-radius: 4px; + background-color: var(--o-color-bg2); + } + + &::-webkit-scrollbar { + width: 6px; + background-color: var(--o-color-bg2); + } + + &::-webkit-scrollbar-thumb { + border-radius: 4px; + background: var(--o-color-division1); + } +} + +: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; +} +body { + .el-loading-spinner { + position: absolute; + margin: 0; + top: 300px; + } +} +.language-change.el-popper { + box-shadow: var(--o-shadow-l1) !important; + width: 120px; + .el-dropdown-menu { + background: none; + padding: 0 20px; + &__item { + justify-content: center; + line-height: 50px; + border-bottom: 1px solid var(--o-color-division1); + color: var(--o-color-text1); + padding: 0; + background: none !important; + &:last-child { + border-bottom: none; + } + &:hover { + color: var(--o-color-brand1); + } + &.active { + color: var(--o-color-brand1); + } + } + } + .el-popper__arrow { + display: none; + } +} diff --git a/src/shared/styles/element-plus/_message.scss b/src/shared/styles/element-plus/_message.scss new file mode 100644 index 0000000000000000000000000000000000000000..37c705bf0cb44e3c006304b2361f58896885ab5b --- /dev/null +++ b/src/shared/styles/element-plus/_message.scss @@ -0,0 +1,42 @@ +.el-message { + display: flex; + justify-content: center; + top: 104px !important; + height: 112px; + border-radius: 0; + background: var(--o-color-bg2) !important; + box-shadow: var(--o-shadow-l4); + font-size: var(--o-font-h4); + --el-message-border-color: var(--o-color-bg2); + + .el-message__icon { + margin-right: var(--o-spacing-h6); + font-size: var(--o-font-size-h5); + } + + .el-message__content { + text-overflow: -o-ellipsis-lastline; + overflow: hidden; + text-overflow: ellipsis; + display: -webkit-box; + -webkit-line-clamp: 2; + line-clamp: 2; + -webkit-box-orient: vertical; + color: var(--o-color-text1) !important; + font-size: var(--o-font-size-h7); + } + + @media screen and (max-width: 867px) { + height: inherit; + max-width: 280px; + min-width: 0; + + .el-message__icon { + font-size: var(--o-font-size-h8); + } + + .el-message__content { + font-size: var(--o-font-size-tip); + } + } +} diff --git a/src/shared/styles/element-plus/_option.scss b/src/shared/styles/element-plus/_option.scss new file mode 100644 index 0000000000000000000000000000000000000000..03fd067d9ad83d26087c357ff58146581f3fe80c --- /dev/null +++ b/src/shared/styles/element-plus/_option.scss @@ -0,0 +1,14 @@ +.el-popper__arrow { + display: none; +} +.el-popper.o-select-dropdown { + border: none; + border-radius: 0 !important; + background-color: var(--o-color-bg2); + .o-option.hover { + background-color: var(--o-color-bg4); + } + .o-option:hover { + background-color: var(--o-color-bg4); + } +} diff --git a/src/shared/styles/element-plus/_popper.scss b/src/shared/styles/element-plus/_popper.scss new file mode 100644 index 0000000000000000000000000000000000000000..11ae4d5e7ffc6a8b5a08fc52ba4e352635afffb7 --- /dev/null +++ b/src/shared/styles/element-plus/_popper.scss @@ -0,0 +1,7 @@ +body { + .el-popover.el-popper { + border-radius: 0 ; + box-shadow: var(--o-shadow-l1); + padding: 16px; + } +} \ No newline at end of file diff --git a/src/shared/styles/element-plus/index.scss b/src/shared/styles/element-plus/index.scss new file mode 100644 index 0000000000000000000000000000000000000000..be52d996314ede4115eeb22b7083ec1288b8d45e --- /dev/null +++ b/src/shared/styles/element-plus/index.scss @@ -0,0 +1,19 @@ +@forward 'element-plus/theme-chalk/src/common/var.scss' with ( + $colors: ( + 'primary': ( + 'base': #7d32ea, + ), + 'success': ( + 'base': #82c04d, + ), + 'warning': ( + 'base': #f0934b, + ), + 'danger': ( + 'base': #f3524d, + ), + 'error': ( + 'base': #f3524d, + ), + ) +); diff --git a/src/shared/styles/index.scss b/src/shared/styles/index.scss new file mode 100644 index 0000000000000000000000000000000000000000..0a4f79f81e7fc79d6b21a57721a0e8e2ae0f5aa4 --- /dev/null +++ b/src/shared/styles/index.scss @@ -0,0 +1,7 @@ +@import './normalize.scss'; +@import './base.scss'; +@import './markdown.scss'; +@import './element-plus/message'; +@import './element-plus/option'; +@import './element-plus/popper'; +@import './theme-dark.scss'; diff --git a/src/shared/styles/markdown.scss b/src/shared/styles/markdown.scss new file mode 100644 index 0000000000000000000000000000000000000000..bc575be169a83904626d8e709acd75e06175952e --- /dev/null +++ b/src/shared/styles/markdown.scss @@ -0,0 +1,301 @@ +.markdown, +.vuepress-markdown-body { + width: calc(100% - 80px); + max-width: 1416px; + min-height: calc(100vh - 443px); + padding: 40px; + margin: var(--o-spacing-h2) auto; + margin-bottom: var(--o-spacing-h1); + background-color: var(--o-color-bg2); + box-shadow: var(--o-shadow-l1); + & > *:first-child { + margin-top: 0 !important; + } + --o-color-table: var(--o-color-border2); + @media (max-width: 1439px) { + width: calc(100% - 48px); + } + @media (max-width: 1100px) { + width: calc(100% - 32px); + } + @media (max-width: 768px) { + min-height: calc(100vh - 395px); + padding: var(--o-spacing-h5); + margin-top: var(--o-spacing-h5); + margin-bottom: var(--o-spacing-h2); + } + ol, + ul { + list-style: inherit; + } + + a { + word-break: break-all; + } + + h1, + h2, + h3, + h4, + h5, + h6 { + color: var(--o-color-text1); + font-weight: normal; + + a { + display: none; + } + } + + hr { + margin: var(--o-spacing-h1) 0; + border: none; + height: 1px; + background-color: var(--o-color-division1); + @media screen and (max-width: 768px) { + margin: var(--o-spacing-h4) 0; + } + } + + h1 { + margin-top: var(--o-spacing-h1); + margin-bottom: var(--o-spacing-h2); + font-size: var(--o-font-size-h3); + line-height: var(--o-line-height-h3); + @media screen and (max-width: 768px) { + margin: var(--o-spacing-h3) 0 var(--o-spacing-h4); + font-size: var(--o-font-size-h7); + line-height: var(--o-line-height-h7); + } + } + + h2 { + margin-top: var(--o-spacing-h2); + margin-bottom: var(--o-spacing-h3); + font-size: var(--o-font-size-h5); + line-height: var(--o-line-height-h5); + @media screen and (max-width: 768px) { + margin: var(--o-spacing-h4) 0 var(--o-spacing-h5); + font-size: var(--o-font-size-h8); + line-height: var(--o-line-height-h8); + } + } + + h3 { + margin-top: var(--o-spacing-h3); + font-size: var(--o-font-size-h7); + line-height: var(--o-line-height-h8); + @media screen and (max-width: 768px) { + margin-top: var(--o-spacing-h5); + font-size: var(--o-font-size-text); + line-height: var(--o-line-height-text); + } + } + + h4 { + margin-top: var(--o-spacing-h4); + font-size: var(--o-font-size-h8); + line-height: var(--o-font-size-h8); + @media screen and (max-width: 768px) { + margin-top: var(--o-spacing-h6); + font-size: var(--o-font-size-tip); + line-height: var(--o-line-height-tip); + } + } + + h5 { + margin-top: var(--o-spacing-h5); + font-size: var(--o-font-size-text); + line-height: var(--o-font-size-text); + } + + p, + ul, + ol { + margin-top: var(--o-spacing-h8); + margin-bottom: var(--o-spacing-h8); + font-size: var(--o-font-size-text); + font-weight: normal; + color: var(--o-color-text4); + line-height: var(--o-line-height-text); + @media screen and (max-width: 768px) { + font-size: var(--o-font-size-tip); + } + } + + ul, + ol { + padding-left: 1em; + + li { + &::marker { + color: var(--o-color-text1); + } + } + } + + table { + width: 100%; + font-size: var(--o-font-size-text); + table-layout: fixed; + word-break: break-word; + border-collapse: collapse; + padding: 0; + line-height: var(--o-line-height-text); + + tr { + height: 54px; + color: var(--o-color-text4); + border-bottom: 1px solid var(--o-color-table); + + th { + padding-left: var(--o-spacing-h3); + text-align: left; + font-weight: 500; + font-size: var(--o-font-size-h8); + line-height: var(--o-line-height-h8); + background-color: var(--o-color-bg4); + color: var(--o-color-text1); + @media screen and (max-width: 768px) { + font-size: var(--o-font-size-text); + padding-left: var(--o-spacing-h5); + } + } + td { + padding-left: var(--o-spacing-h3); + line-height: var(--o-line-height-text); + @media screen and (max-width: 768px) { + padding-left: var(--o-spacing-h6); + font-size: var(--o-font-size-tip); + } + } + } + } + + strong { + font-weight: bold; + } + + img { + max-width: 100%; + } + + a[href^='#'] { + display: none; + } + // div[class*='language-'] { + // position: relative; + // margin: 8px 0; + // background-color: var(--o-color-bg1); + // box-shadow: var(--o-shadow-l1); + // overflow-x: auto; + // } + code, + pre { + 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; + } + + pre { + position: relative; + margin: 8px 0; + background-color: var(--o-color-bg1); + box-shadow: var(--o-shadow-l1); + overflow-x: auto; + z-index: 1; + padding: 24px 32px; + @media screen and (max-width: 768px) { + padding: 12px 24px; + } + &::-webkit-scrollbar-track { + border-radius: 4px; + background-color: var(--o-color-bg2); + } + + &::-webkit-scrollbar { + height: 8px; + background-color: var(--o-color-bg2); + } + + &::-webkit-scrollbar-thumb { + border-radius: 4px; + background: var(--o-color-bg4); + } + } + + code { + padding: 0; + line-height: var(--o-line-height-text); + font-size: var(--o-font-size-text); + color: var(--o-color-text1); + } +} + +/** + * 法律声明 && 隐私政策 + **/ +.legal-privacy { + margin: 0 auto; + padding: 0; + padding-top: 94px; + padding-bottom: var(--o-spacing-h1); + max-width: 880px; + background: var(--o-color-bg1); + box-shadow: none; +} +@media screen and (max-width: 768px) { + .legal-privacy { + padding-top: 0; + margin-top: var(--o-spacing-h2); + padding-bottom: var(--o-spacing-h2); + } +} +.legal-privacy hr { + margin: var(--o-spacing-h2) 0; +} +@media screen and (max-width: 768px) { + .legal-privacy hr { + margin: var(--o-spacing-h4) 0 var(--o-spacing-h4) 0; + } +} +.legal-privacy h1 { + margin-top: 0; + text-align: center; +} +.legal-privacy h2 { + font-size: var(--o-font-size-h7); + letter-spacing: 0; + line-height: var(--o-line-height-h8); + font-weight: 700; + margin-bottom: var(--o-spacing-h6); +} +@media screen and (max-width: 768px) { + .legal-privacy h2 { + font-size: var(--o-font-size-text); + letter-spacing: 0; + line-height: var(--o-line-height-text); + font-weight: 700; + margin-bottom: --o-spacing-h8; + } +} +.vuepress-markdown-body { + h1, + h2, + h3, + h4, + h5, + h6 { + margin: var(--o-spacing-h5) 0; + font-weight: normal; + } +} 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/shared/url-config.ts b/src/shared/url-config.ts new file mode 100644 index 0000000000000000000000000000000000000000..c7619887361c0c28c143ce1aa3bad9f42a14df10 --- /dev/null +++ b/src/shared/url-config.ts @@ -0,0 +1,31 @@ +// 涉及的公网路径配置文件 +const DATA_LINK = 'https://datastat.opengauss.org/'; +const OSCHINA_LINK = 'https://my.oschina.net/'; +const CSDN_LINK = 'https://blog.csdn.net/'; +const CTO_LINK = 'https://blog.51cto.com/'; +const MODB_LINK = 'https://www.modb.pro/'; +const INFOQ_LINK = 'https://www.infoq.cn/'; +const BILIBILI_LINK = 'https://space.bilibili.com/'; +const ZHIZHU_LINK = 'https://www.zhihu.com/'; +const ENMOEDU_LINK = 'https://enmoedu.com/'; +const GITEE_LINK = 'https://gitee.com/'; +const GITEE_LINK1 = 'http://gitee.com/'; +const GIYHUB_LINK = 'https://github.com/'; +const STATUS_LINK = 'https://status.opengauss.org/'; + + +export { + DATA_LINK, GITEE_LINK1, + OSCHINA_LINK, + CSDN_LINK, + CTO_LINK, + MODB_LINK, + INFOQ_LINK, + BILIBILI_LINK, + ZHIZHU_LINK, + ENMOEDU_LINK, + GITEE_LINK, + STATUS_LINK, + GIYHUB_LINK, + +}; diff --git a/src/shared/utils.ts b/src/shared/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..f03cfe425aed8ecd39726ce02b96e1206fec81d9 --- /dev/null +++ b/src/shared/utils.ts @@ -0,0 +1,46 @@ +import CryptoJS from 'crypto-js'; + +// TS 对象key合法检查 +export function isValidKey( + key: string | number | symbol, + object: object +): key is keyof typeof object { + return Object.prototype.hasOwnProperty.call(object, key); +} + +export function scrollToTop() { + document.body.scrollTop = 0; + document.documentElement.scrollTop = 0; +} + +export function hiddenMail(mail: string) { + const mailTest = new RegExp( + '^[a-z0-9A-Z]+[- | a-z0-9A-Z . _]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$' + ); + if (mailTest.test(mail)) { + return `${mail.split('@')[0]}@***${mail.charAt(mail.length - 1)}`; + } +} + +/** + * @word 要加密的内容 + * @keyWord String 服务器随机返回的关键字 + * */ +export function aesEncrypt(word: string, keyWord: string) { + const key = CryptoJS.enc.Utf8.parse(keyWord); + const srcs = CryptoJS.enc.Utf8.parse(word); + const encrypted = CryptoJS.AES.encrypt(srcs, key, { + mode: CryptoJS.mode.ECB, + padding: CryptoJS.pad.Pkcs7, + }); + return encrypted.toString(); +} + +export function getAuthorization() { + const secret = import.meta.env.VITE_SECRET; + const data = { + secret: secret, + timestamp: Math.floor(Date.now() / 1000), + }; + return aesEncrypt(JSON.stringify(data), secret); +} diff --git a/src/stores/index.ts b/src/stores/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..131c8028833528144e3569e37ca68a65b97c04f6 --- /dev/null +++ b/src/stores/index.ts @@ -0,0 +1,32 @@ +import { defineStore } from 'pinia'; +interface LabelColor { + color: string; + name: string; +} + +// 语言 +export const useLangStore = defineStore('lang', { + state: () => { + return { + lang: '', + }; + }, + actions: { + setLangStore(val: string) { + this.lang = val; + }, + }, +}); +// 标签颜色 +export const useLabelColor = defineStore('color', { + state: () => { + return { + labelColor: [] as Array, + }; + }, + actions: { + setLabelColor(data: Array) { + this.labelColor = data; + }, + }, +}); diff --git a/src/stores/login.ts b/src/stores/login.ts new file mode 100644 index 0000000000000000000000000000000000000000..5ab4a27313112a889ebe002bf31eec6397dc7047 --- /dev/null +++ b/src/stores/login.ts @@ -0,0 +1,8 @@ +import { defineStore } from 'pinia'; +import { ref } from 'vue'; + +export const useLogin = defineStore('login', () => { + // 登录信息 + const guardAuthClient = ref({} as any); + return { guardAuthClient }; +}); diff --git a/src/views/TheQuickIssue.vue b/src/views/TheQuickIssue.vue new file mode 100644 index 0000000000000000000000000000000000000000..d845eecb40cac497e370b70528613b9a4e2f506a --- /dev/null +++ b/src/views/TheQuickIssue.vue @@ -0,0 +1,19 @@ + + + + diff --git a/src/views/pull-request/PullRequest.vue b/src/views/pull-request/PullRequest.vue new file mode 100644 index 0000000000000000000000000000000000000000..baca156c3fa149772fd42126beb28b54d5accea1 --- /dev/null +++ b/src/views/pull-request/PullRequest.vue @@ -0,0 +1,19 @@ + + + + diff --git a/src/views/submit-issue/SubmitIssue.vue b/src/views/submit-issue/SubmitIssue.vue new file mode 100644 index 0000000000000000000000000000000000000000..8dc80b95cabdf6e8e479fc09f6db27346924d140 --- /dev/null +++ b/src/views/submit-issue/SubmitIssue.vue @@ -0,0 +1,943 @@ + + + + diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000000000000000000000000000000000000..3813f8b0573fa6a16f05c8848c7d0811325abead --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1,23 @@ +/// + +declare module '*.vue' { + import type { DefineComponent } from 'vue'; + // eslint-disable-next-line @typescript-eslint/ban-types + const component: DefineComponent<{}, {}, any>; + export default component; +} +declare module '*.svg'; +declare module '*.png'; +declare module '*.jpg'; +declare module '*.jpeg'; +declare module '*.gif'; +declare module '*.bmp'; +declare module '*.tiff'; +declare module '*.json'; +declare module '*.md'; +declare module '*.mp4'; +declare module '@kangc/v-md-editor/lib/theme/vuepress.js'; +declare module '@kangc/v-md-editor'; +declare module '@kangc/v-md-editor/lib/lang/en-US'; +declare module '@kangc/v-md-editor/lib/lang/zh-CN'; +declare module 'crypto-js'; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000000000000000000000000000000000..9baf557a61d496ccebf039e3573376a633b6927a --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,24 @@ +{ + "compilerOptions": { + "target": "ESNext", + "useDefineForClassFields": true, + "module": "ESNext", + "moduleResolution": "Node", + "strict": true, + "allowJs": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "isolatedModules": true, + "esModuleInterop": true, + "lib": ["ESNext", "DOM"], + "skipLibCheck": true, + "paths": { + "@/*": ["./src/*"], + "opendesign": ["./opendesign"] + }, + "types": ["unplugin-icons/types/vue", "element-plus/global", "node"] + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"], + "references": [{ "path": "./tsconfig.node.json" }] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000000000000000000000000000000000000..9d31e2aed93c876bc048cf2f863cb2a847c901e8 --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "compilerOptions": { + "composite": true, + "module": "ESNext", + "moduleResolution": "Node", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000000000000000000000000000000000000..5406c9d7004df03e0213c0646855c0394029118c --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,86 @@ +import { defineConfig } from 'vite'; +import path from 'path'; +import vue from '@vitejs/plugin-vue'; +import vueJsx from '@vitejs/plugin-vue-jsx'; + +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'; +import ElementPlus from 'unplugin-element-plus/vite'; + +export default defineConfig({ + base: process.env.NODE_ENV === 'development' ? './' : '/', + resolve: { + alias: { + '@/': `${path.resolve(__dirname, './src')}/`, + 'vue-i18n': 'vue-i18n/dist/vue-i18n.cjs.js', + }, + }, + + plugins: [ + vue(), + vueJsx({}), + AutoImport({ + resolvers: [ElementPlusResolver({ importStyle: 'sass' })], + }), + Components({ + resolvers: [ElementPlusResolver({ importStyle: 'sass' })], + }), + Icons({ + compiler: 'vue3', + customCollections: { + app: FileSystemIconLoader('./src/assets/svg-icons'), + }, + }), + ElementPlus({ + useSource: true, + }), + ], + css: { + preprocessorOptions: { + scss: { + additionalData: `@use "@/shared/styles/element-plus/index.scss" as *;`, + }, + }, + }, + + build: { + chunkSizeWarningLimit: 1500, + rollupOptions: { + output: { + manualChunks(id) { + if (id.includes('node_modules')) { + return id + .toString() + .split('node_modules/')[1] + .split('/')[0] + .toString(); + } + }, + }, + }, + }, + server: { + proxy: { + '/api-dsapi/': { + target: 'https://dsapi.osinfra.cn/', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api-dsapi/, ''), + }, + '/api-omapi/': { + target: 'https://omapi.osinfra.cn/', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api-omapi/, ''), + }, + '/api-issues/': { + target: 'http://119.8.32.82', + // target: 'https://ipb.osinfra.cn', + changeOrigin: true, + rewrite: (path) => path.replace(/^\/api-issues/, ''), + }, + }, + }, +});