commit 3679c9b8ef8842a4a3e1e51e6769899a5c04311f Author: SnhAenIgseAl <11845079+snhaenigseal@user.noreply.gitee.com> Date: Tue Mar 31 16:10:12 2026 +0800 first commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..38adffa --- /dev/null +++ b/.gitignore @@ -0,0 +1,28 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json new file mode 100644 index 0000000..dd4ad0b --- /dev/null +++ b/.hbuilderx/launch.json @@ -0,0 +1,16 @@ +{ // launch.json 配置了启动调试时相关设置,configurations下节点名称可为 app-plus/h5/mp-weixin/mp-baidu/mp-alipay/mp-qq/mp-toutiao/mp-360/ + // launchtype项可配置值为local或remote, local代表前端连本地云函数,remote代表前端连云端云函数 + "version": "0.0", + "configurations": [{ + "default" : + { + "launchtype" : "local" + }, + "mp-weixin" : + { + "launchtype" : "local" + }, + "type" : "uniCloud" + } + ] +} diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 0000000..7489970 --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,38 @@ +module.exports = { + // 一行最多 80 字符 + printWidth: 80, + // 使用 4 个空格缩进 + tabWidth: 2, + // 不使用 tab 缩进,而使用空格 + useTabs: false, + // 行尾需要有分号 + semi: false, + // 使用单引号代替双引号 + singleQuote: true, + // 对象的 key 仅在必要时用引号 + quoteProps: 'as-needed', + // jsx 不使用单引号,而使用双引号 + jsxSingleQuote: false, + // 末尾使用逗号 + trailingComma: 'all', + // 大括号内的首尾需要空格 { foo: bar } + bracketSpacing: true, + // jsx 标签的反尖括号需要换行 + jsxBracketSameLine: false, + // 箭头函数,只有一个参数的时候,也需要括号 + arrowParens: 'always', + // 每个文件格式化的范围是文件的全部内容 + rangeStart: 0, + rangeEnd: Infinity, + // 不需要写文件开头的 @prettier + requirePragma: false, + // 不需要自动在文件开头插入 @prettier + insertPragma: false, + // 使用默认的折行标准 + proseWrap: 'preserve', + // 根据显示样式决定 html 要不要折行 + htmlWhitespaceSensitivity: 'css', + // 换行符使用 lf + endOfLine: 'auto' + } + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..22ceabf --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 恋轩 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..2478098 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# Uniapp 白板模板 \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..60d0627 --- /dev/null +++ b/index.html @@ -0,0 +1,20 @@ + + + + + + + + + + +
+ + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..3c869d3 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,7967 @@ +{ + "name": "uni-preset-vue", + "version": "0.0.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "uni-preset-vue", + "version": "0.0.0", + "dependencies": { + "@dcloudio/uni-app": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-app-plus": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-components": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-h5": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-alipay": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-baidu": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-lark": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-qq": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3050320220729001", + "@types/uni-app": "^1.4.8", + "js-calendar-converter": "^0.0.7", + "lunisolar": "^2.6.0", + "miniprogram-api-typings": "^4.1.0", + "pinia": "^2.0.36", + "pinia-plugin-persistedstate": "^2.3.0", + "text-encoding-shim": "^1.0.5", + "vue": "^3.5.1", + "wot-design-uni": "^1.13.0" + }, + "devDependencies": { + "@dcloudio/types": "^3.0.13", + "@dcloudio/uni-automator": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-stacktracey": "3.0.0-alpha-3050320220729001", + "@dcloudio/vite-plugin-uni": "3.0.0-alpha-3050320220729001", + "@types/node": "^18.11.9", + "sass": "^1.54.9", + "typescript": "^4.7.4", + "unplugin-auto-import": "^0.11.2", + "vite": "^2.9.14" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@antfu/utils": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.5.2.tgz", + "integrity": "sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "dependencies": { + "@babel/highlight": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "dependencies": { + "@babel/types": "^7.19.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "dependencies": { + "@babel/compat-data": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "dependencies": { + "@babel/types": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "dependencies": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz", + "integrity": "sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/standalone": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.19.0.tgz", + "integrity": "sha512-P8lYynBl10MYpgkhGEV1fOsGDE/6lQSYp+e2YvqUPMWHT4JaQrOkM49FizjswrRzJ6KZTgG6ZY90/1GYvAR3/Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", + "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "dependencies": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.0", + "@babel/types": "^7.19.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@dcloudio/types": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-3.0.14.tgz", + "integrity": "sha512-WNVBTL4yn8a2cDp2YkVDhvBHIsw505HgY4lLILvzmUO9nFxidwJawXYAgE05lYidE4c62SRZSh9/gYF3eRtg1A==", + "dev": true + }, + "node_modules/@dcloudio/uni-app": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app/-/uni-app-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-QmL7TwB5oTu4/NaLVl2nYsMeg9CqE+ssw88TFk2m/beNckax0+8PDzEWgJ+fTa1JU/hffM0wVtelYuSfii6bnQ==", + "dependencies": { + "@dcloudio/uni-cloud": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-components": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-push": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-stat": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-app-plus": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-Cd9LnWaXLlT0e9QoUe1k7o+83hiddA2XKaOZPFtv2vq8vL6IbYrVHG9QjaOT4UVX0KP6XRMjKk8NR2lL/bt5RA==", + "dependencies": { + "@dcloudio/uni-app-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-app-vue": "3.0.0-alpha-3050320220729001" + } + }, + "node_modules/@dcloudio/uni-app-vite": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-gevUPtUxphXaqlErl+rkEcVD4daQopU8aX+Jw9BBnLz5omdGGe0dcn5kbLsMtDftjbB/sG5Q/nKM0uAL7XdOeQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-nvue-styler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts": "3.0.0-alpha-3050320220729001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-vue": "^2.3.3", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0", + "rollup": "^2.59.0" + } + }, + "node_modules/@dcloudio/uni-app-vue": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vue/-/uni-app-vue-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-489zXrr1xB4noQhyAcJK38u3FnWQmKDkHdSLW3WvtMmqwDXQQgGYz9V4U7XDKXLGbP7LpQzHAqKd47+b54UMtA==" + }, + "node_modules/@dcloudio/uni-automator": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-automator/-/uni-automator-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-NoLWdz3qtj3ZwimD3oyIWW+H5TZkOMiIKdldN5NWOBKmBaceNT/KLfx6bDmmUIm+ceSHl/796IZgZTsOtHu+oA==", + "dev": true, + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "address": "^1.1.2", + "cross-env": "^7.0.3", + "debug": "^4.3.3", + "default-gateway": "^6.0.3", + "fs-extra": "^10.0.0", + "licia": "^1.29.0", + "postcss-selector-parser": "^6.0.6", + "qrcode-reader": "^1.0.4", + "qrcode-terminal": "^0.12.0", + "ws": "^8.4.2" + } + }, + "node_modules/@dcloudio/uni-cli-shared": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-HhCQqPN1tvFam1J6Og3ZTyAa4VVoVV+VcvKDRQ6xoMsR3xPyiHhrW3yPp8kcPCKnIfB8vxVtX9f4NMGOauXI7A==", + "dependencies": { + "@ampproject/remapping": "^2.1.2", + "@babel/core": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@intlify/core-base": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37", + "autoprefixer": "^10.4.7", + "base64url": "^3.0.1", + "chokidar": "^3.5.3", + "compare-versions": "^3.6.0", + "debug": "^4.3.3", + "es-module-lexer": "^0.9.3", + "esbuild": "^0.14.27", + "estree-walker": "^2.0.2", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "magic-string": "^0.26.1", + "merge": "^2.1.1", + "mime": "^3.0.0", + "module-alias": "^2.2.2", + "os-locale-s-fix": "^1.0.8-fix-1", + "picocolors": "^1.0.0", + "postcss-import": "^14.0.2", + "postcss-load-config": "^3.1.1", + "postcss-modules": "^4.3.0", + "postcss-selector-parser": "^6.0.6", + "resolve": "^1.22.0", + "tapable": "^2.2.0", + "xregexp": "3.1.0" + } + }, + "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "node_modules/@dcloudio/uni-cli-shared/node_modules/@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + }, + "peerDependencies": { + "vue": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-cli-shared/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", + "license": "MIT", + "peer": true + }, + "node_modules/@dcloudio/uni-cli-shared/node_modules/vue": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-cloud": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-dkZBop9yOsdoFf9fS8VMGewJ0DQzdZPYiI5sy/YJxi+3HJU17znNVKpP1ittvDd6PUV8YVIC/qJ+O7nnvzcoLQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37", + "fast-glob": "^3.2.11" + } + }, + "node_modules/@dcloudio/uni-components": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-components/-/uni-components-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-xz6boCIrcdO7+ZoNHf+LlEdInNjI06bibDjcaDRRG+noAXkctvCh1k17h/pvz9ZLHxcvrs/SAR7bacuBF2y9Ow==" + }, + "node_modules/@dcloudio/uni-h5": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5/-/uni-h5-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-rauQlZDFEn6D/HxCJQgCvSG2cPxmJ5eirdhKXvW3T5/8i0Eo6jqxljGMmmIfttcSDkPEdrXYKUyGQQHREw8oIg==", + "dependencies": { + "@dcloudio/uni-h5-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-h5-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37", + "localstorage-polyfill": "^1.0.1", + "safe-area-insets": "^1.4.1", + "vue-router": "^4.1.2", + "xmlhttprequest": "^1.8.0" + } + }, + "node_modules/@dcloudio/uni-h5-vite": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-GW/VEp6UkqbKBlcuPdqf2O5GbyjU7E2RzY5Reh7gcoQBt5SPcwQsOlh++HflkOTEOuY2uAM6V15FzrhHi415QA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "mime": "^3.0.0", + "module-alias": "^2.2.2" + } + }, + "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "node_modules/@dcloudio/uni-h5-vite/node_modules/@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + }, + "peerDependencies": { + "vue": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5-vite/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", + "license": "MIT", + "peer": true + }, + "node_modules/@dcloudio/uni-h5-vite/node_modules/vue": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5-vue": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-AZ3O/7JuMPFIcjAMKLL3c0L2E2pjcf1CKZQ64Jf/g8IptAJJxGzb0+usFT72sElzRsmelcKpFgAfO1LTJfOq8Q==", + "dependencies": { + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001" + } + }, + "node_modules/@dcloudio/uni-h5/node_modules/@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5/node_modules/@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5/node_modules/@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "node_modules/@dcloudio/uni-h5/node_modules/@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + }, + "peerDependencies": { + "vue": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-h5/node_modules/csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", + "license": "MIT", + "peer": true + }, + "node_modules/@dcloudio/uni-h5/node_modules/vue": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-i18n": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-xlrc0nkbsR2hB6Puhu6/z+Zgm2Ze246DzGjz0ulIAWI/W1uyVgx7cE8UrV2ppAUIKlE47ZX+GSu689j0GDo8wg==" + }, + "node_modules/@dcloudio/uni-mp-alipay": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-+XJTJScIi7Osz5agpCg+e+fYSxXqm0UMuxhQMhPe4cqmBreFkgKmq5Fio3aMJc8hK/JXtazAbf+x25LnnyqnHQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-mp-baidu": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-IoPw6E/eIn41dBl55HQBOs98LyOx9KWhCR8u3G/I6GV8qAZ6fjpWLdebJlEGlFbQ00kqZxy0+9RtJKGtXS1f1A==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-mp-compiler": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-AsOuHKM8oc9XIXG5NxLcGI995v8H3XXFTvPQJYj5zlwlwc6dTC6K2RuBgaDlmge83V5JdYq4E7CTnsT2nMfu/g==", + "dependencies": { + "@babel/generator": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2" + } + }, + "node_modules/@dcloudio/uni-mp-kuaishou": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-kuaishou/-/uni-mp-kuaishou-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-b2am+5J+aQacWJhpm+01SyU55/dFOcl7A4CfAMLRhVeXjWUGCkooq4YbZ55xvMXbo6/iqEtQCLNc24jtj2pfFg==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-mp-lark": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-lark/-/uni-mp-lark-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-iD8j2YYez7jY3oF3TVtODW1tflDnwr5zHDg9nOoCRrmTI/O9C0mIu1/y7C2un0LYjR2XVSj5yJQLdBsxqwCaDQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-mp-qq": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-qq/-/uni-mp-qq-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-Kg2J9yJyWIx5VibqnRDNUYP5kTmEJ2ZFOv/VgObeQ6m55muAZuWNXoeoQwHN4NwGUMkm6FpotGCQZkONrelieg==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37", + "fs-extra": "^10.0.0" + } + }, + "node_modules/@dcloudio/uni-mp-toutiao": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-wHSJ8vrLvjW4Uor+oH65dQ1zb4mg2jwl4EZuT6B0SozTd0bawuysEheSP5wjND6I8uzL5hDy2wVOdO+LX4Drww==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-mp-vite": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-P51UW1IHQVrEVqU5KsEQ+9x4M1jiafdpgtAHSa5JW/xLnesziisMiBtfIj5KtQP8/hds94y5Dy/dxLqONgKyRQ==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-sfc": "3.2.37", + "@vue/shared": "3.2.37", + "debug": "^4.3.3", + "magic-string": "^0.26.1" + } + }, + "node_modules/@dcloudio/uni-mp-vue": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-KroRZfvWjCLf4dSvOUxXTwWTXZxHnHBYDCigH9TdCJT+qkxvjSk09oMlc6f/M9VwBru6mLBw7+lVWEFobrFwFQ==", + "dependencies": { + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-mp-weixin": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-NRHxl8/ZGtkfEOJMTjD5H4goadzfgmZtJDf52wYypYepImg8Q34InW7oIrwAozF+SNlY3DjTE34bl4obd1M76w==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-nvue-styler": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-+qksnZhaGbPC9+5wxKeMakOrpbO/InPuORn2PbfdZYIFm9YJGvRXbMncH46+dIl7Vf4hkwLpXbUkC+z0CSuIsg==", + "dependencies": { + "@vue/shared": "3.2.37", + "parse-css-font": "^4.0.0", + "postcss": "^8.4.13" + } + }, + "node_modules/@dcloudio/uni-push": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-push/-/uni-push-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-lxpLu4Q2YvaYL17qbapNxOYzjJrRH4nKnHLHVxry/DmxEANVTP30AAcdfe+j5bKKG/RGqIa8clFezpxccAkNfA==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001" + } + }, + "node_modules/@dcloudio/uni-quickapp-webview": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-RdmVtlIMx+4Mw7Ut7IMS52iALgbKHSDufsVrU91hkvr2xCWtVDp9X4wV58UXD32a3QecRz62CTEfQ0kqKgT+3g==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-shared": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-shared/-/uni-shared-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-sDSR4HFm+uQu0fnouL91LwvMgw1E2Gd608Lk7+7j7n809CHWFXlpKXX8uJ84cIQRFh1N0NMAcCoNg3976MecJg==", + "dependencies": { + "@vue/shared": "3.2.37" + } + }, + "node_modules/@dcloudio/uni-stacktracey": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-achRH2PTQxaaRH/WBkmWLvGqUbFHKQ13nOLQXz4uU7o8CIvVrnYwJVmnFRizxK/9PMGO612B127hNc4TM+kwqA==", + "dev": true + }, + "node_modules/@dcloudio/uni-stat": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-X+83ScyAHNFXpBFI81sM1ytz6+fX+NnUUzKGLS4kBzmYgiQ21toXN5FYr8cvBXx7L4Cb1K6ADr0hYdKghOW5Gw==", + "dependencies": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "debug": "^4.3.3" + } + }, + "node_modules/@dcloudio/uts": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts/-/uts-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-3b46dL23LTNqUCR53uQlESsVVMDiQN32dN6xNvHSCtQdBCnMs+3DwdWN2uSR+Gl9mwiH3hPkLO76pjzJeKa68g==", + "dependencies": { + "cac": "6.7.9", + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0" + }, + "bin": { + "uts": "bin/uts.js" + }, + "optionalDependencies": { + "@dcloudio/uts-darwin-arm64": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts-darwin-x64": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts-win32-ia32-msvc": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts-win32-x64-msvc": "3.0.0-alpha-3050320220729001" + } + }, + "node_modules/@dcloudio/uts-darwin-arm64": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-darwin-arm64/-/uts-darwin-arm64-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-MeCR4/qs4N95Stkial2cxEzE+3J8oIGW+TU6fP67ez/wBMMBBP+qM1r3BKCdNx9HksphhguNu1+yivHsCfzc0g==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@dcloudio/uts-darwin-x64": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-darwin-x64/-/uts-darwin-x64-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-V/6GYijIrzNCGHpYWJ9nklaTKzWkft49GX3uaIH36LCoSyVYDV7lb0pd0OYcFPaqOgZf5pip+2AlNgRKhFppJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@dcloudio/uts-win32-ia32-msvc": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-win32-ia32-msvc/-/uts-win32-ia32-msvc-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-ZvEmaQ8Am89FfLuoSaZQFEPZUEj1QQcdMQhAxn9oo9wuKvlYTglNi1AmMJ00rBEc8eI4zNCGFq8snEsnviZ+Rg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@dcloudio/uts-win32-x64-msvc": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-win32-x64-msvc/-/uts-win32-x64-msvc-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-Jv9Wst0GQrcXBr11rWH1C+vend+44ff6O9pbicWVlXEKFyQaG+Peq0tp0iu0ejhwEZnnusDneKVltzQBLME6TA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=10" + } + }, + "node_modules/@dcloudio/vite-plugin-uni": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-g2fU7M635Y2eoLPjtGBNkBih+3jErQp2ywi3Sz/lHv31EjM6XTZi4BpxwnGk4wuKhSyCz+cDQm/RtR7L2yDCkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.17.9", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.16.8", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-legacy": "^1.8.2", + "@vitejs/plugin-vue": "^2.3.3", + "@vitejs/plugin-vue-jsx": "^1.3.10", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/shared": "3.2.37", + "cac": "6.7.9", + "debug": "^4.3.3", + "estree-walker": "^2.0.2", + "express": "^4.17.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "picocolors": "^1.0.0" + }, + "bin": { + "uni": "bin/uni.js" + }, + "peerDependencies": { + "vite": "2.9.14" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@intlify/core-base": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.9.tgz", + "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==", + "dependencies": { + "@intlify/devtools-if": "9.1.9", + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/devtools-if": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.9.tgz", + "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==", + "dependencies": { + "@intlify/shared": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.9.tgz", + "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==", + "dependencies": { + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9", + "source-map": "0.6.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/message-resolver": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.9.tgz", + "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/runtime": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.9.tgz", + "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==", + "dependencies": { + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/shared": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.9.tgz", + "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/@intlify/vue-devtools": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz", + "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==", + "dependencies": { + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/uni-app": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/@types/uni-app/-/uni-app-1.4.8.tgz", + "integrity": "sha512-plxwi9MvGDrekCsDKuNlCN3ZXIv9zkqHsKZJOsc8FQqLSHveDBOm11qOaswe4QyNWVHpvwZMViii/Ni1/d40LA==", + "license": "MIT", + "dependencies": { + "vue": "^2.6.8" + } + }, + "node_modules/@types/uni-app/node_modules/@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "dependencies": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@types/uni-app/node_modules/vue": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" + } + }, + "node_modules/@vitejs/plugin-legacy": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-1.8.2.tgz", + "integrity": "sha512-NCOKU+pU+cxLMR9P9RTolEuOK+h+zYBXlknj+zGcKSj/NXBZYgA1GAH1FnO4zijoWRiTaiOm2ha9LQrELE7XHg==", + "dev": true, + "dependencies": { + "@babel/standalone": "^7.17.11", + "core-js": "^3.22.3", + "magic-string": "^0.26.1", + "regenerator-runtime": "^0.13.9", + "systemjs": "^6.12.1" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.8.0" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", + "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "vite": "^2.5.10", + "vue": "^3.2.25" + } + }, + "node_modules/@vitejs/plugin-vue-jsx": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz", + "integrity": "sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.17.9", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.16.8", + "@rollup/pluginutils": "^4.2.0", + "@vue/babel-plugin-jsx": "^1.1.1", + "hash-sum": "^2.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", + "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", + "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "dependencies": { + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", + "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-ssr": "3.2.37", + "@vue/reactivity-transform": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + } + }, + "node_modules/@vue/compiler-sfc/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", + "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "dependencies": { + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/reactivity": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.22.tgz", + "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", + "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "dependencies": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/reactivity-transform/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/@vue/reactivity/node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.22.tgz", + "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/runtime-core/node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", + "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.22", + "@vue/runtime-core": "3.5.22", + "@vue/shared": "3.5.22", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/runtime-dom/node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.22.tgz", + "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "vue": "3.5.22" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/@vue/server-renderer/node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/@vue/shared": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", + "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", + "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cac": { + "version": "6.7.9", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.9.tgz", + "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001393", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz", + "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz", + "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==", + "dev": true, + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==" + }, + "node_modules/css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==" + }, + "node_modules/css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==" + }, + "node_modules/css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" + }, + "node_modules/css-list-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-list-helpers/-/css-list-helpers-2.0.0.tgz", + "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ==" + }, + "node_modules/css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==" + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.245", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.245.tgz", + "integrity": "sha512-kUN8QXmqHAN8phxjF3QpHeX7CbXGXadSngx9r1O/S9jt+uC0O/vjPi/9+8/Mk3sKewLLMrjpBJZMfVpPCdkG3g==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "node_modules/esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "dependencies": { + "loader-utils": "^3.2.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" + }, + "node_modules/html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "devOptional": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sindresorhus/invert-kv?sponsor=1" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-calendar-converter": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/js-calendar-converter/-/js-calendar-converter-0.0.7.tgz", + "integrity": "sha512-w4QSGDwWaxBAxmWdfOC2CHVxEFxu48WUm9191uomUPabDyx/pVKSapZebBBVBv/H5GQc5hzDPOPmOLVA31bqjQ==", + "license": "GPL-3.0-or-later" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "dependencies": { + "invert-kv": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/licia": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/licia/-/licia-1.37.0.tgz", + "integrity": "sha512-jX49+WmzikOPGNrcy/giS23HCI8Pb7RF585Ei5d7oWF4WMelaZWv4odqQNdT0jtHkoUxqSvPz67Jvyq06xamUA==", + "dev": true + }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "engines": { + "node": ">=10" + } + }, + "node_modules/loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==", + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/localstorage-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz", + "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/lunisolar": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/lunisolar/-/lunisolar-2.6.0.tgz", + "integrity": "sha512-Q2Ph0MtYDovbX5lvvo2FvM+bFzZVZaIb70q+FyQLheZ4xuL5tvCBP/uEU5KwG+vfo0ztzGPrlIitOcGhltfwvQ==", + "license": "GPL-3.0" + }, + "node_modules/magic-string": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", + "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", + "dependencies": { + "sourcemap-codec": "^1.4.8" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/miniprogram-api-typings": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/miniprogram-api-typings/-/miniprogram-api-typings-4.1.0.tgz", + "integrity": "sha512-4RBsz27nBKyRkVGoNkRaPx24/KeJBw3zaaIlXDR8s/WBh2PbcUAc+q7wLLbp7Qsmb3bLzzUu7tqAti+B06kmjg==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.14.tgz", + "integrity": "sha512-DgRgNUSX9NIxxCxygX4Xeg9C7GX7OUx1wuQ8cXx9o9LE0e9wrH+OZ9fcnrlEedsC/rtqry3ZhUddC759XD/L0w==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "pathe": "^0.3.5", + "pkg-types": "^0.3.4", + "ufo": "^0.8.5" + } + }, + "node_modules/module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-locale-s-fix": { + "version": "1.0.8-fix-1", + "resolved": "https://registry.npmjs.org/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz", + "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==", + "dependencies": { + "lcid": "^3.0.0" + }, + "engines": { + "node": ">=10", + "yarn": "^1.22.4" + } + }, + "node_modules/parse-css-font": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-css-font/-/parse-css-font-4.0.0.tgz", + "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==", + "dependencies": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-list-helpers": "^2.0.0", + "css-system-font-keywords": "^1.0.0", + "unquote": "^1.1.1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/pathe": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.3.7.tgz", + "integrity": "sha512-yz7GK+kSsS27x727jtXpd5VT4dDfP/JDIQmaowfxyWCnFjOWtE1VIh7i6TzcSfzW0n4+bRQztj1VdKnITNq/MA==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinia": { + "version": "2.0.36", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.36.tgz", + "integrity": "sha512-4UKApwjlmJH+VuHKgA+zQMddcCb3ezYnyewQ9NVrsDqZ/j9dMv5+rh+1r48whKNdpFkZAWVxhBp5ewYaYX9JcQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.2.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia-plugin-persistedstate": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-2.3.0.tgz", + "integrity": "sha512-K7vzt68Z3lbMDjb23Ki2vgHVBP2QFvjl7WNwzIwqY/DAkhSt8mi/z6bN/cXTst7fJjXWF0lC9NyxFKHfxWehuw==", + "license": "MIT", + "peerDependencies": { + "pinia": "^2.0.0" + }, + "peerDependenciesMeta": { + "pinia": { + "optional": true + } + } + }, + "node_modules/pkg-types": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-0.3.5.tgz", + "integrity": "sha512-VkxCBFVgQhNHYk9subx+HOhZ4jzynH11ah63LZsprTKwPCWG9pfWBlkElWFbvkP9BVR0dP1jS9xPdhaHQNK74Q==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.2.0", + "mlly": "^0.5.14", + "pathe": "^0.3.7" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "dependencies": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qrcode-reader": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz", + "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==", + "dev": true + }, + "node_modules/qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "dev": true, + "bin": { + "qrcode-terminal": "bin/qrcode-terminal.js" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dependencies": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rollup": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", + "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-area-insets": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/safe-area-insets/-/safe-area-insets-1.4.1.tgz", + "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/sass": { + "version": "1.54.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.9.tgz", + "integrity": "sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==", + "devOptional": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/scule": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", + "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", + "dev": true + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-literal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.0.tgz", + "integrity": "sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA==", + "dev": true, + "dependencies": { + "acorn": "^8.7.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/systemjs": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.12.6.tgz", + "integrity": "sha512-SawLiWya8/uNR4p12OggSYZ35tP4U4QTpfV57DdZEOPr6+J6zlLSeeEpMmzYTEoBAsMhctdEE+SWJUDYX4EaKw==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/text-encoding-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", + "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==", + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/ufo": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.5.tgz", + "integrity": "sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true, + "license": "MIT" + }, + "node_modules/unimport": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-0.6.7.tgz", + "integrity": "sha512-EMoVqDjswHkU+nD098QYHXH7Mkw7KwGDQAyeRF2lgairJnuO+wpkhIcmCqrD1OPJmsjkTbJ2tW6Ap8St0PuWZA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.2.1", + "escape-string-regexp": "^5.0.0", + "fast-glob": "^3.2.11", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.2", + "mlly": "^0.5.7", + "pathe": "^0.3.3", + "scule": "^0.3.2", + "strip-literal": "^0.4.0", + "unplugin": "^0.9.0" + } + }, + "node_modules/unimport/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.9.5.tgz", + "integrity": "sha512-luraheyfxwtvkvHpsOvMNv7IjLdORTWKZp0gWYNHGLi2ImON3iIZOj464qEyyEwLA/EMt12fC415HW9zRpOfTg==", + "dev": true, + "dependencies": { + "acorn": "^8.8.0", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.4.4" + }, + "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 + } + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.11.2.tgz", + "integrity": "sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.5.2", + "@rollup/pluginutils": "^4.2.1", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.2", + "unimport": "^0.6.7", + "unplugin": "^0.9.3" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.14.tgz", + "integrity": "sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==", + "dependencies": { + "esbuild": "^0.14.27", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": ">=12.2.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "less": "*", + "sass": "*", + "stylus": "*" + }, + "peerDependenciesMeta": { + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz", + "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-sfc": "3.5.22", + "@vue/runtime-dom": "3.5.22", + "@vue/server-renderer": "3.5.22", + "@vue/shared": "3.5.22" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.5.tgz", + "integrity": "sha512-IsvoF5D2GQ/EGTs/Th4NQms9gd2NSqV+yylxIyp/OYp8xOwxmU8Kj/74E9DTSYAyH5LX7idVUngN3JSj1X4xcQ==", + "dependencies": { + "@vue/devtools-api": "^6.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue/node_modules/@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/vue/node_modules/@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/vue/node_modules/@vue/compiler-sfc": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/vue/node_modules/@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "node_modules/vue/node_modules/@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==", + "license": "MIT" + }, + "node_modules/vue/node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz", + "integrity": "sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wot-design-uni": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/wot-design-uni/-/wot-design-uni-1.13.0.tgz", + "integrity": "sha512-U4ezX7n1DfSuecTvHap06UqkN7dGhSLyC5n7OfmddajYSiV6t39bPLtRIds6uTarmRZCEWERrLN8cGSdZJIHWg==", + "license": "MIT", + "engines": { + "HBuilderX": "^3.8.7" + }, + "peerDependencies": { + "vue": ">=3.2.47" + } + }, + "node_modules/ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/xregexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-3.1.0.tgz", + "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "engines": { + "node": ">= 6" + } + } + }, + "dependencies": { + "@ampproject/remapping": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", + "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", + "requires": { + "@jridgewell/gen-mapping": "^0.1.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@antfu/utils": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.5.2.tgz", + "integrity": "sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", + "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", + "requires": { + "@babel/highlight": "^7.18.6" + } + }, + "@babel/compat-data": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.0.tgz", + "integrity": "sha512-y5rqgTTPTmaF5e2nVhOxw+Ur9HDJLsWb6U/KpgUzRZEdPfE6VOubXBKLdbcUTijzRptednSBDQbYZBOSqJxpJw==" + }, + "@babel/core": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.0.tgz", + "integrity": "sha512-reM4+U7B9ss148rh2n1Qs9ASS+w94irYXga7c2jaQv9RVzpS7Mv1a9rnYYwuDa45G+DkORt9g6An2k/V4d9LbQ==", + "requires": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.0", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + } + }, + "@babel/generator": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", + "requires": { + "@babel/types": "^7.19.0", + "@jridgewell/gen-mapping": "^0.3.2", + "jsesc": "^2.5.1" + }, + "dependencies": { + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + } + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.0.tgz", + "integrity": "sha512-Ai5bNWXIvwDvWM7njqsG3feMlL9hCVQsPYXodsZyLwshYkZVJt59Gftau4VrE8S9IT9asd2uSP1hG6wCNw+sXA==", + "requires": { + "@babel/compat-data": "^7.19.0", + "@babel/helper-validator-option": "^7.18.6", + "browserslist": "^4.20.2", + "semver": "^6.3.0" + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.19.0.tgz", + "integrity": "sha512-NRz8DwF4jT3UfrmUoZjd0Uph9HQnP30t7Ash+weACcyNkiYTywpIjDBgReJMKgr+n86sn2nPVVmJ28Dm053Kqw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.9", + "@babel/helper-split-export-declaration": "^7.18.6" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==" + }, + "@babel/helper-function-name": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.18.9.tgz", + "integrity": "sha512-RxifAh2ZoVU67PyKIO4AMi1wTenGfMR/O/ae0CCRqwgBAt5v7xjdtRw7UoSbsreKrQn5t7r89eruK/9JjYHuDg==", + "dev": true, + "requires": { + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-module-imports": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", + "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-module-transforms": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.18.6", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", + "dev": true, + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", + "dev": true + }, + "@babel/helper-replace-supers": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.18.9.tgz", + "integrity": "sha512-dNsWibVI4lNT6HiuOIBr1oyxo40HvIVmbwPUm3XZ7wMh4k2WxrxTqZwSqw/eEmXDS9np0ey5M2bz9tBmO9c+YQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.18.9", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9" + } + }, + "@babel/helper-simple-access": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.18.6.tgz", + "integrity": "sha512-iNpIgTgyAvDQpDj76POqg+YEt8fPxx3yaNBg3S30dxNKm2SWfYhD0TGrK/Eu9wHpUW63VQU894TsTg+GLbUa1g==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", + "requires": { + "@babel/types": "^7.18.6" + } + }, + "@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==" + }, + "@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==" + }, + "@babel/helper-validator-option": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz", + "integrity": "sha512-XO7gESt5ouv/LRJdrVjkShckw6STTaB7l9BrpBaAHDeF5YZT+01PCwmR0SJHnkW6i8OwW/EVWRShfi4j2x+KQw==" + }, + "@babel/helpers": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", + "requires": { + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" + } + }, + "@babel/highlight": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", + "requires": { + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "requires": { + "@babel/types": "^7.28.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", + "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-syntax-typescript": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.18.6.tgz", + "integrity": "sha512-mAWAuq4rvOepWCBid55JuRNvpTNf2UGVgoz4JV0fXEKolsVZDzsa4NqCef758WZJj/GDu0gVGItjKFiClTAmZA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.18.6" + } + }, + "@babel/plugin-transform-typescript": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.19.0.tgz", + "integrity": "sha512-DOOIywxPpkQHXijXv+s9MDAyZcLp12oYRl3CMWZ6u7TjSoCBq/KqHR/nNFR3+i2xqheZxoF0H2XyL7B6xeSRuA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.19.0", + "@babel/helper-plugin-utils": "^7.19.0", + "@babel/plugin-syntax-typescript": "^7.18.6" + } + }, + "@babel/standalone": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.19.0.tgz", + "integrity": "sha512-P8lYynBl10MYpgkhGEV1fOsGDE/6lQSYp+e2YvqUPMWHT4JaQrOkM49FizjswrRzJ6KZTgG6ZY90/1GYvAR3/Q==", + "dev": true + }, + "@babel/template": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" + } + }, + "@babel/traverse": { + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.0.tgz", + "integrity": "sha512-4pKpFRDh+utd2mbRC8JLnlsMUii3PMHjpL6a0SZ4NMZy7YFP9aXORxEhdMVOc9CpWtDF09IkciQLEhK7Ml7gRA==", + "requires": { + "@babel/code-frame": "^7.18.6", + "@babel/generator": "^7.19.0", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/parser": "^7.19.0", + "@babel/types": "^7.19.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "requires": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + } + }, + "@dcloudio/types": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@dcloudio/types/-/types-3.0.14.tgz", + "integrity": "sha512-WNVBTL4yn8a2cDp2YkVDhvBHIsw505HgY4lLILvzmUO9nFxidwJawXYAgE05lYidE4c62SRZSh9/gYF3eRtg1A==", + "dev": true + }, + "@dcloudio/uni-app": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app/-/uni-app-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-QmL7TwB5oTu4/NaLVl2nYsMeg9CqE+ssw88TFk2m/beNckax0+8PDzEWgJ+fTa1JU/hffM0wVtelYuSfii6bnQ==", + "requires": { + "@dcloudio/uni-cloud": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-components": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-push": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-stat": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-app-plus": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-plus/-/uni-app-plus-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-Cd9LnWaXLlT0e9QoUe1k7o+83hiddA2XKaOZPFtv2vq8vL6IbYrVHG9QjaOT4UVX0KP6XRMjKk8NR2lL/bt5RA==", + "requires": { + "@dcloudio/uni-app-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-app-vue": "3.0.0-alpha-3050320220729001" + } + }, + "@dcloudio/uni-app-vite": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vite/-/uni-app-vite-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-gevUPtUxphXaqlErl+rkEcVD4daQopU8aX+Jw9BBnLz5omdGGe0dcn5kbLsMtDftjbB/sG5Q/nKM0uAL7XdOeQ==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-nvue-styler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts": "3.0.0-alpha-3050320220729001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-vue": "^2.3.3", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0", + "rollup": "^2.59.0" + } + }, + "@dcloudio/uni-app-vue": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-app-vue/-/uni-app-vue-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-489zXrr1xB4noQhyAcJK38u3FnWQmKDkHdSLW3WvtMmqwDXQQgGYz9V4U7XDKXLGbP7LpQzHAqKd47+b54UMtA==" + }, + "@dcloudio/uni-automator": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-automator/-/uni-automator-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-NoLWdz3qtj3ZwimD3oyIWW+H5TZkOMiIKdldN5NWOBKmBaceNT/KLfx6bDmmUIm+ceSHl/796IZgZTsOtHu+oA==", + "dev": true, + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "address": "^1.1.2", + "cross-env": "^7.0.3", + "debug": "^4.3.3", + "default-gateway": "^6.0.3", + "fs-extra": "^10.0.0", + "licia": "^1.29.0", + "postcss-selector-parser": "^6.0.6", + "qrcode-reader": "^1.0.4", + "qrcode-terminal": "^0.12.0", + "ws": "^8.4.2" + } + }, + "@dcloudio/uni-cli-shared": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cli-shared/-/uni-cli-shared-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-HhCQqPN1tvFam1J6Og3ZTyAa4VVoVV+VcvKDRQ6xoMsR3xPyiHhrW3yPp8kcPCKnIfB8vxVtX9f4NMGOauXI7A==", + "requires": { + "@ampproject/remapping": "^2.1.2", + "@babel/core": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@intlify/core-base": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37", + "autoprefixer": "^10.4.7", + "base64url": "^3.0.1", + "chokidar": "^3.5.3", + "compare-versions": "^3.6.0", + "debug": "^4.3.3", + "es-module-lexer": "^0.9.3", + "esbuild": "^0.14.27", + "estree-walker": "^2.0.2", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "magic-string": "^0.26.1", + "merge": "^2.1.1", + "mime": "^3.0.0", + "module-alias": "^2.2.2", + "os-locale-s-fix": "^1.0.8-fix-1", + "picocolors": "^1.0.0", + "postcss-import": "^14.0.2", + "postcss-load-config": "^3.1.1", + "postcss-modules": "^4.3.0", + "postcss-selector-parser": "^6.0.6", + "resolve": "^1.22.0", + "tapable": "^2.2.0", + "xregexp": "3.1.0" + }, + "dependencies": { + "@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "peer": true, + "requires": { + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "peer": true, + "requires": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "peer": true, + "requires": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "requires": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", + "peer": true + }, + "vue": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "peer": true, + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + } + } + }, + "@dcloudio/uni-cloud": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-cloud/-/uni-cloud-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-dkZBop9yOsdoFf9fS8VMGewJ0DQzdZPYiI5sy/YJxi+3HJU17znNVKpP1ittvDd6PUV8YVIC/qJ+O7nnvzcoLQ==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37", + "fast-glob": "^3.2.11" + } + }, + "@dcloudio/uni-components": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-components/-/uni-components-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-xz6boCIrcdO7+ZoNHf+LlEdInNjI06bibDjcaDRRG+noAXkctvCh1k17h/pvz9ZLHxcvrs/SAR7bacuBF2y9Ow==" + }, + "@dcloudio/uni-h5": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5/-/uni-h5-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-rauQlZDFEn6D/HxCJQgCvSG2cPxmJ5eirdhKXvW3T5/8i0Eo6jqxljGMmmIfttcSDkPEdrXYKUyGQQHREw8oIg==", + "requires": { + "@dcloudio/uni-h5-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-h5-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37", + "localstorage-polyfill": "^1.0.1", + "safe-area-insets": "^1.4.1", + "vue-router": "^4.1.2", + "xmlhttprequest": "^1.8.0" + }, + "dependencies": { + "@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "peer": true, + "requires": { + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "peer": true, + "requires": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "peer": true, + "requires": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "requires": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", + "peer": true + }, + "vue": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "peer": true, + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + } + } + }, + "@dcloudio/uni-h5-vite": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vite/-/uni-h5-vite-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-GW/VEp6UkqbKBlcuPdqf2O5GbyjU7E2RzY5Reh7gcoQBt5SPcwQsOlh++HflkOTEOuY2uAM6V15FzrhHi415QA==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@rollup/pluginutils": "^4.2.0", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37", + "debug": "^4.3.3", + "fs-extra": "^10.0.0", + "mime": "^3.0.0", + "module-alias": "^2.2.2" + }, + "dependencies": { + "@vue/reactivity": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.2.37.tgz", + "integrity": "sha512-/7WRafBOshOc6m3F7plwzPeCu/RCVv9uMpOwa/5PiY1Zz+WLVRWiy0MYKwmg19KBdGtFWsmZ4cD+LOdVPcs52A==", + "peer": true, + "requires": { + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-core": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.2.37.tgz", + "integrity": "sha512-JPcd9kFyEdXLl/i0ClS7lwgcs0QpUAWj+SKX2ZC3ANKi1U4DOtiEr6cRqFXsPwY5u1L9fAjkinIdB8Rz3FoYNQ==", + "peer": true, + "requires": { + "@vue/reactivity": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/runtime-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.2.37.tgz", + "integrity": "sha512-HimKdh9BepShW6YozwRKAYjYQWg9mQn63RGEiSswMbW+ssIht1MILYlVGkAGGQbkhSh31PCdoUcfiu4apXJoPw==", + "peer": true, + "requires": { + "@vue/runtime-core": "3.2.37", + "@vue/shared": "3.2.37", + "csstype": "^2.6.8" + } + }, + "@vue/server-renderer": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.2.37.tgz", + "integrity": "sha512-kLITEJvaYgZQ2h47hIzPh2K3jG8c1zCVbp/o/bzQOyvzaKiCquKS7AaioPI28GNxIsE/zSx+EwWYsNxDCX95MA==", + "requires": { + "@vue/compiler-ssr": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "csstype": { + "version": "2.6.21", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-2.6.21.tgz", + "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==", + "peer": true + }, + "vue": { + "version": "3.2.37", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.2.37.tgz", + "integrity": "sha512-bOKEZxrm8Eh+fveCqS1/NkG/n6aMidsI6hahas7pa0w/l7jkbssJVsRhVDs07IdDq7h9KHswZOgItnwJAgtVtQ==", + "peer": true, + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/runtime-dom": "3.2.37", + "@vue/server-renderer": "3.2.37", + "@vue/shared": "3.2.37" + } + } + } + }, + "@dcloudio/uni-h5-vue": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-h5-vue/-/uni-h5-vue-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-AZ3O/7JuMPFIcjAMKLL3c0L2E2pjcf1CKZQ64Jf/g8IptAJJxGzb0+usFT72sElzRsmelcKpFgAfO1LTJfOq8Q==", + "requires": { + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001" + } + }, + "@dcloudio/uni-i18n": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-i18n/-/uni-i18n-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-xlrc0nkbsR2hB6Puhu6/z+Zgm2Ze246DzGjz0ulIAWI/W1uyVgx7cE8UrV2ppAUIKlE47ZX+GSu689j0GDo8wg==" + }, + "@dcloudio/uni-mp-alipay": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-alipay/-/uni-mp-alipay-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-+XJTJScIi7Osz5agpCg+e+fYSxXqm0UMuxhQMhPe4cqmBreFkgKmq5Fio3aMJc8hK/JXtazAbf+x25LnnyqnHQ==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-mp-baidu": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-baidu/-/uni-mp-baidu-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-IoPw6E/eIn41dBl55HQBOs98LyOx9KWhCR8u3G/I6GV8qAZ6fjpWLdebJlEGlFbQ00kqZxy0+9RtJKGtXS1f1A==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-mp-compiler": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-compiler/-/uni-mp-compiler-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-AsOuHKM8oc9XIXG5NxLcGI995v8H3XXFTvPQJYj5zlwlwc6dTC6K2RuBgaDlmge83V5JdYq4E7CTnsT2nMfu/g==", + "requires": { + "@babel/generator": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2" + } + }, + "@dcloudio/uni-mp-kuaishou": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-kuaishou/-/uni-mp-kuaishou-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-b2am+5J+aQacWJhpm+01SyU55/dFOcl7A4CfAMLRhVeXjWUGCkooq4YbZ55xvMXbo6/iqEtQCLNc24jtj2pfFg==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-mp-lark": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-lark/-/uni-mp-lark-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-iD8j2YYez7jY3oF3TVtODW1tflDnwr5zHDg9nOoCRrmTI/O9C0mIu1/y7C2un0LYjR2XVSj5yJQLdBsxqwCaDQ==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-mp-qq": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-qq/-/uni-mp-qq-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-Kg2J9yJyWIx5VibqnRDNUYP5kTmEJ2ZFOv/VgObeQ6m55muAZuWNXoeoQwHN4NwGUMkm6FpotGCQZkONrelieg==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37", + "fs-extra": "^10.0.0" + } + }, + "@dcloudio/uni-mp-toutiao": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-toutiao/-/uni-mp-toutiao-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-wHSJ8vrLvjW4Uor+oH65dQ1zb4mg2jwl4EZuT6B0SozTd0bawuysEheSP5wjND6I8uzL5hDy2wVOdO+LX4Drww==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-mp-vite": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vite/-/uni-mp-vite-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-P51UW1IHQVrEVqU5KsEQ+9x4M1jiafdpgtAHSa5JW/xLnesziisMiBtfIj5KtQP8/hds94y5Dy/dxLqONgKyRQ==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-i18n": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-compiler": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/compiler-sfc": "3.2.37", + "@vue/shared": "3.2.37", + "debug": "^4.3.3", + "magic-string": "^0.26.1" + } + }, + "@dcloudio/uni-mp-vue": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-vue/-/uni-mp-vue-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-KroRZfvWjCLf4dSvOUxXTwWTXZxHnHBYDCigH9TdCJT+qkxvjSk09oMlc6f/M9VwBru6mLBw7+lVWEFobrFwFQ==", + "requires": { + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-mp-weixin": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-mp-weixin/-/uni-mp-weixin-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-NRHxl8/ZGtkfEOJMTjD5H4goadzfgmZtJDf52wYypYepImg8Q34InW7oIrwAozF+SNlY3DjTE34bl4obd1M76w==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-nvue-styler": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-nvue-styler/-/uni-nvue-styler-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-+qksnZhaGbPC9+5wxKeMakOrpbO/InPuORn2PbfdZYIFm9YJGvRXbMncH46+dIl7Vf4hkwLpXbUkC+z0CSuIsg==", + "requires": { + "@vue/shared": "3.2.37", + "parse-css-font": "^4.0.0", + "postcss": "^8.4.13" + } + }, + "@dcloudio/uni-push": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-push/-/uni-push-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-lxpLu4Q2YvaYL17qbapNxOYzjJrRH4nKnHLHVxry/DmxEANVTP30AAcdfe+j5bKKG/RGqIa8clFezpxccAkNfA==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001" + } + }, + "@dcloudio/uni-quickapp-webview": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-quickapp-webview/-/uni-quickapp-webview-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-RdmVtlIMx+4Mw7Ut7IMS52iALgbKHSDufsVrU91hkvr2xCWtVDp9X4wV58UXD32a3QecRz62CTEfQ0kqKgT+3g==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vite": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-vue": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-shared": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-shared/-/uni-shared-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-sDSR4HFm+uQu0fnouL91LwvMgw1E2Gd608Lk7+7j7n809CHWFXlpKXX8uJ84cIQRFh1N0NMAcCoNg3976MecJg==", + "requires": { + "@vue/shared": "3.2.37" + } + }, + "@dcloudio/uni-stacktracey": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stacktracey/-/uni-stacktracey-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-achRH2PTQxaaRH/WBkmWLvGqUbFHKQ13nOLQXz4uU7o8CIvVrnYwJVmnFRizxK/9PMGO612B127hNc4TM+kwqA==", + "dev": true + }, + "@dcloudio/uni-stat": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uni-stat/-/uni-stat-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-X+83ScyAHNFXpBFI81sM1ytz6+fX+NnUUzKGLS4kBzmYgiQ21toXN5FYr8cvBXx7L4Cb1K6ADr0hYdKghOW5Gw==", + "requires": { + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "debug": "^4.3.3" + } + }, + "@dcloudio/uts": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts/-/uts-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-3b46dL23LTNqUCR53uQlESsVVMDiQN32dN6xNvHSCtQdBCnMs+3DwdWN2uSR+Gl9mwiH3hPkLO76pjzJeKa68g==", + "requires": { + "@dcloudio/uts-darwin-arm64": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts-darwin-x64": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts-win32-ia32-msvc": "3.0.0-alpha-3050320220729001", + "@dcloudio/uts-win32-x64-msvc": "3.0.0-alpha-3050320220729001", + "cac": "6.7.9", + "chokidar": "^3.5.3", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "picocolors": "^1.0.0" + } + }, + "@dcloudio/uts-darwin-arm64": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-darwin-arm64/-/uts-darwin-arm64-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-MeCR4/qs4N95Stkial2cxEzE+3J8oIGW+TU6fP67ez/wBMMBBP+qM1r3BKCdNx9HksphhguNu1+yivHsCfzc0g==", + "optional": true + }, + "@dcloudio/uts-darwin-x64": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-darwin-x64/-/uts-darwin-x64-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-V/6GYijIrzNCGHpYWJ9nklaTKzWkft49GX3uaIH36LCoSyVYDV7lb0pd0OYcFPaqOgZf5pip+2AlNgRKhFppJw==", + "optional": true + }, + "@dcloudio/uts-win32-ia32-msvc": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-win32-ia32-msvc/-/uts-win32-ia32-msvc-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-ZvEmaQ8Am89FfLuoSaZQFEPZUEj1QQcdMQhAxn9oo9wuKvlYTglNi1AmMJ00rBEc8eI4zNCGFq8snEsnviZ+Rg==", + "optional": true + }, + "@dcloudio/uts-win32-x64-msvc": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/uts-win32-x64-msvc/-/uts-win32-x64-msvc-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-Jv9Wst0GQrcXBr11rWH1C+vend+44ff6O9pbicWVlXEKFyQaG+Peq0tp0iu0ejhwEZnnusDneKVltzQBLME6TA==", + "optional": true + }, + "@dcloudio/vite-plugin-uni": { + "version": "3.0.0-alpha-3050320220729001", + "resolved": "https://registry.npmjs.org/@dcloudio/vite-plugin-uni/-/vite-plugin-uni-3.0.0-alpha-3050320220729001.tgz", + "integrity": "sha512-g2fU7M635Y2eoLPjtGBNkBih+3jErQp2ywi3Sz/lHv31EjM6XTZi4BpxwnGk4wuKhSyCz+cDQm/RtR7L2yDCkw==", + "dev": true, + "requires": { + "@babel/core": "^7.17.9", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.16.8", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-shared": "3.0.0-alpha-3050320220729001", + "@rollup/pluginutils": "^4.2.0", + "@vitejs/plugin-legacy": "^1.8.2", + "@vitejs/plugin-vue": "^2.3.3", + "@vitejs/plugin-vue-jsx": "^1.3.10", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-sfc": "3.2.37", + "@vue/shared": "3.2.37", + "cac": "6.7.9", + "debug": "^4.3.3", + "estree-walker": "^2.0.2", + "express": "^4.17.1", + "fast-glob": "^3.2.11", + "fs-extra": "^10.0.0", + "hash-sum": "^2.0.0", + "jsonc-parser": "^3.0.0", + "picocolors": "^1.0.0" + } + }, + "@esbuild/linux-loong64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz", + "integrity": "sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw==", + "optional": true + }, + "@intlify/core-base": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-9.1.9.tgz", + "integrity": "sha512-x5T0p/Ja0S8hs5xs+ImKyYckVkL4CzcEXykVYYV6rcbXxJTe2o58IquSqX9bdncVKbRZP7GlBU1EcRaQEEJ+vw==", + "requires": { + "@intlify/devtools-if": "9.1.9", + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9", + "@intlify/vue-devtools": "9.1.9" + } + }, + "@intlify/devtools-if": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/devtools-if/-/devtools-if-9.1.9.tgz", + "integrity": "sha512-oKSMKjttG3Ut/1UGEZjSdghuP3fwA15zpDPcjkf/1FjlOIm6uIBGMNS5jXzsZy593u+P/YcnrZD6cD3IVFz9vQ==", + "requires": { + "@intlify/shared": "9.1.9" + } + }, + "@intlify/message-compiler": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-9.1.9.tgz", + "integrity": "sha512-6YgCMF46Xd0IH2hMRLCssZI3gFG4aywidoWQ3QP4RGYQXQYYfFC54DxhSgfIPpVoPLQ+4AD29eoYmhiHZ+qLFQ==", + "requires": { + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9", + "source-map": "0.6.1" + } + }, + "@intlify/message-resolver": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/message-resolver/-/message-resolver-9.1.9.tgz", + "integrity": "sha512-Lx/DBpigeK0sz2BBbzv5mu9/dAlt98HxwbG7xLawC3O2xMF9MNWU5FtOziwYG6TDIjNq0O/3ZbOJAxwITIWXEA==" + }, + "@intlify/runtime": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/runtime/-/runtime-9.1.9.tgz", + "integrity": "sha512-XgPw8+UlHCiie3fI41HPVa/VDJb3/aSH7bLhY1hJvlvNV713PFtb4p4Jo+rlE0gAoMsMCGcsiT982fImolSltg==", + "requires": { + "@intlify/message-compiler": "9.1.9", + "@intlify/message-resolver": "9.1.9", + "@intlify/shared": "9.1.9" + } + }, + "@intlify/shared": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-9.1.9.tgz", + "integrity": "sha512-xKGM1d0EAxdDFCWedcYXOm6V5Pfw/TMudd6/qCdEb4tv0hk9EKeg7lwQF1azE0dP2phvx0yXxrt7UQK+IZjNdw==" + }, + "@intlify/vue-devtools": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@intlify/vue-devtools/-/vue-devtools-9.1.9.tgz", + "integrity": "sha512-YPehH9uL4vZcGXky4Ev5qQIITnHKIvsD2GKGXgqf+05osMUI6WSEQHaN9USRa318Rs8RyyPCiDfmA0hRu3k7og==", + "requires": { + "@intlify/message-resolver": "9.1.9", + "@intlify/runtime": "9.1.9", + "@intlify/shared": "9.1.9" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", + "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/node": { + "version": "18.19.130", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-18.19.130.tgz", + "integrity": "sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==", + "dev": true, + "requires": { + "undici-types": "~5.26.4" + } + }, + "@types/uni-app": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/@types/uni-app/-/uni-app-1.4.8.tgz", + "integrity": "sha512-plxwi9MvGDrekCsDKuNlCN3ZXIv9zkqHsKZJOsc8FQqLSHveDBOm11qOaswe4QyNWVHpvwZMViii/Ni1/d40LA==", + "requires": { + "vue": "^2.6.8" + }, + "dependencies": { + "@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "requires": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "^0.6.1" + } + }, + "vue": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", + "requires": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" + } + } + } + }, + "@vitejs/plugin-legacy": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-legacy/-/plugin-legacy-1.8.2.tgz", + "integrity": "sha512-NCOKU+pU+cxLMR9P9RTolEuOK+h+zYBXlknj+zGcKSj/NXBZYgA1GAH1FnO4zijoWRiTaiOm2ha9LQrELE7XHg==", + "dev": true, + "requires": { + "@babel/standalone": "^7.17.11", + "core-js": "^3.22.3", + "magic-string": "^0.26.1", + "regenerator-runtime": "^0.13.9", + "systemjs": "^6.12.1" + } + }, + "@vitejs/plugin-vue": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-2.3.4.tgz", + "integrity": "sha512-IfFNbtkbIm36O9KB8QodlwwYvTEsJb4Lll4c2IwB3VHc2gie2mSPtSzL0eYay7X2jd/2WX02FjSGTWR6OPr/zg==", + "requires": {} + }, + "@vitejs/plugin-vue-jsx": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue-jsx/-/plugin-vue-jsx-1.3.10.tgz", + "integrity": "sha512-Cf5zznh4yNMiEMBfTOztaDVDmK1XXfgxClzOSUVUc8WAmHzogrCUeM8B05ABzuGtg0D1amfng+mUmSIOFGP3Pw==", + "dev": true, + "requires": { + "@babel/core": "^7.17.9", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.16.8", + "@rollup/pluginutils": "^4.2.0", + "@vue/babel-plugin-jsx": "^1.1.1", + "hash-sum": "^2.0.0" + } + }, + "@vue/babel-helper-vue-transform-on": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", + "integrity": "sha512-hz4R8tS5jMn8lDq6iD+yWL6XNB699pGIVLk7WSJnn1dbpjaazsjZQkieJoRX6gW5zpYSCFqQ7jUquPNY65tQYA==", + "dev": true + }, + "@vue/babel-plugin-jsx": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.1.1.tgz", + "integrity": "sha512-j2uVfZjnB5+zkcbc/zsOc0fSNGCMMjaEXP52wdwdIfn0qjFfEYpYZBFKFg+HHnQeJCVrjOeO0YxgaL7DMrym9w==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/template": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", + "@vue/babel-helper-vue-transform-on": "^1.0.2", + "camelcase": "^6.0.0", + "html-tags": "^3.1.0", + "svg-tags": "^1.0.0" + } + }, + "@vue/compiler-core": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.37.tgz", + "integrity": "sha512-81KhEjo7YAOh0vQJoSmAD68wLfYqJvoiD4ulyedzF+OEk/bk6/hx3fTNVfuzugIIaTrOx4PGx6pAiBRe5e9Zmg==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "source-map": "^0.6.1" + } + }, + "@vue/compiler-dom": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.37.tgz", + "integrity": "sha512-yxJLH167fucHKxaqXpYk7x8z7mMEnXOw3G2q62FTkmsvNxu4FQSu5+3UMb+L7fjKa26DEzhrmCxAgFLLIzVfqQ==", + "requires": { + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/compiler-sfc": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.37.tgz", + "integrity": "sha512-+7i/2+9LYlpqDv+KTtWhOZH+pa8/HnX/905MdVmAcI/mPQOBwkHHIzrsEsucyOIZQYMkXUiTkmZq5am/NyXKkg==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/compiler-dom": "3.2.37", + "@vue/compiler-ssr": "3.2.37", + "@vue/reactivity-transform": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7", + "postcss": "^8.1.10", + "source-map": "^0.6.1" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "@vue/compiler-ssr": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.37.tgz", + "integrity": "sha512-7mQJD7HdXxQjktmsWp/J67lThEIcxLemz1Vb5I6rYJHR5vI+lON3nPGOH3ubmbvYGt8xEUaAr1j7/tIFWiEOqw==", + "requires": { + "@vue/compiler-dom": "3.2.37", + "@vue/shared": "3.2.37" + } + }, + "@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==" + }, + "@vue/reactivity": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.22.tgz", + "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==", + "requires": { + "@vue/shared": "3.5.22" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==" + } + } + }, + "@vue/reactivity-transform": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.2.37.tgz", + "integrity": "sha512-IWopkKEb+8qpu/1eMKVeXrK0NLw9HicGviJzhJDEyfxTR9e1WtpnnbYkJWurX6WwoFP0sz10xQg8yL8lgskAZg==", + "requires": { + "@babel/parser": "^7.16.4", + "@vue/compiler-core": "3.2.37", + "@vue/shared": "3.2.37", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + }, + "dependencies": { + "magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + } + } + }, + "@vue/runtime-core": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.22.tgz", + "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==", + "requires": { + "@vue/reactivity": "3.5.22", + "@vue/shared": "3.5.22" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==" + } + } + }, + "@vue/runtime-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz", + "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==", + "requires": { + "@vue/reactivity": "3.5.22", + "@vue/runtime-core": "3.5.22", + "@vue/shared": "3.5.22", + "csstype": "^3.1.3" + }, + "dependencies": { + "@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==" + } + } + }, + "@vue/server-renderer": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.22.tgz", + "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==", + "requires": { + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "requires": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "requires": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "requires": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==" + } + } + }, + "@vue/shared": { + "version": "3.2.37", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.37.tgz", + "integrity": "sha512-4rSJemR2NQIo9Klm1vabqWjD8rs/ZaJSzMxkMNeJS6lHiUjjUeYFbooN19NgFjztubEKh3WlZUeOLVdbbUWHsw==" + }, + "accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "requires": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + } + }, + "acorn": { + "version": "8.8.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", + "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", + "dev": true + }, + "address": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/address/-/address-1.2.0.tgz", + "integrity": "sha512-tNEZYz5G/zYunxFm7sfhAxkXEuLj3K6BKwv6ZURlsF6yiUQ65z0Q2wZW9L5cPUl9ocofGvXOdFYbFHp0+6MOig==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "autoprefixer": { + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", + "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==", + "requires": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true + }, + "cac": { + "version": "6.7.9", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.9.tgz", + "integrity": "sha512-XN5qEpfNQCJ8jRaZgitSkkukjMRCGio+X3Ks5KUbGGlPbV+pSem1l9VuzooCBXOiMFshUZgyYqg6rgN8rjkb/w==" + }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001393", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001393.tgz", + "integrity": "sha512-N/od11RX+Gsk+1qY/jbPa0R6zJupEa0lxeBG598EbrtblxVCTJsQwbRBm6+V+rxpc5lHKdsXb9RY83cZIPLseA==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "compare-versions": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", + "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "core-js": { + "version": "3.25.1", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.25.1.tgz", + "integrity": "sha512-sr0FY4lnO1hkQ4gLDr24K0DGnweGO1QwSj5BpfQjpSJPdqWalja4cTps29Y/PJVG/P7FYlPDkH3hO+Tr0CvDgQ==", + "dev": true + }, + "cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "css-font-size-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-size-keywords/-/css-font-size-keywords-1.0.0.tgz", + "integrity": "sha512-Q+svMDbMlelgCfH/RVDKtTDaf5021O486ZThQPIpahnIjUkMUslC+WuOQSWTgGSrNCH08Y7tYNEmmy0hkfMI8Q==" + }, + "css-font-stretch-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-stretch-keywords/-/css-font-stretch-keywords-1.0.1.tgz", + "integrity": "sha512-KmugPO2BNqoyp9zmBIUGwt58UQSfyk1X5DbOlkb2pckDXFSAfjsD5wenb88fNrD6fvS+vu90a/tsPpb9vb0SLg==" + }, + "css-font-style-keywords": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/css-font-style-keywords/-/css-font-style-keywords-1.0.1.tgz", + "integrity": "sha512-0Fn0aTpcDktnR1RzaBYorIxQily85M2KXRpzmxQPgh8pxUN9Fcn00I8u9I3grNr1QXVgCl9T5Imx0ZwKU973Vg==" + }, + "css-font-weight-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-font-weight-keywords/-/css-font-weight-keywords-1.0.0.tgz", + "integrity": "sha512-5So8/NH+oDD+EzsnF4iaG4ZFHQ3vaViePkL1ZbZ5iC/KrsCY+WHq/lvOgrtmuOQ9pBBZ1ADGpaf+A4lj1Z9eYA==" + }, + "css-list-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/css-list-helpers/-/css-list-helpers-2.0.0.tgz", + "integrity": "sha512-9Bj8tZ0jWbAM3u/U6m/boAzAwLPwtjzFvwivr2piSvyVa3K3rChJzQy4RIHkNkKiZCHrEMWDJWtTR8UyVhdDnQ==" + }, + "css-system-font-keywords": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-system-font-keywords/-/css-system-font-keywords-1.0.0.tgz", + "integrity": "sha512-1umTtVd/fXS25ftfjB71eASCrYhilmEsvDEI6wG/QplnmlfmVM5HkZ/ZX46DT5K3eblFPgLUHt5BRCb0YXkSFA==" + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" + }, + "csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "requires": { + "execa": "^5.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.4.245", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.245.tgz", + "integrity": "sha512-kUN8QXmqHAN8phxjF3QpHeX7CbXGXadSngx9r1O/S9jt+uC0O/vjPi/9+8/Mk3sKewLLMrjpBJZMfVpPCdkG3g==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true + }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==" + }, + "es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==" + }, + "esbuild": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.54.tgz", + "integrity": "sha512-Cy9llcy8DvET5uznocPyqL3BFRrFXSVqbgpMJ9Wz8oVjZlh/zUSNbPRbov0VX7VxN2JH1Oa0uNxZ7eLRb62pJA==", + "requires": { + "@esbuild/linux-loong64": "0.14.54", + "esbuild-android-64": "0.14.54", + "esbuild-android-arm64": "0.14.54", + "esbuild-darwin-64": "0.14.54", + "esbuild-darwin-arm64": "0.14.54", + "esbuild-freebsd-64": "0.14.54", + "esbuild-freebsd-arm64": "0.14.54", + "esbuild-linux-32": "0.14.54", + "esbuild-linux-64": "0.14.54", + "esbuild-linux-arm": "0.14.54", + "esbuild-linux-arm64": "0.14.54", + "esbuild-linux-mips64le": "0.14.54", + "esbuild-linux-ppc64le": "0.14.54", + "esbuild-linux-riscv64": "0.14.54", + "esbuild-linux-s390x": "0.14.54", + "esbuild-netbsd-64": "0.14.54", + "esbuild-openbsd-64": "0.14.54", + "esbuild-sunos-64": "0.14.54", + "esbuild-windows-32": "0.14.54", + "esbuild-windows-64": "0.14.54", + "esbuild-windows-arm64": "0.14.54" + } + }, + "esbuild-android-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.54.tgz", + "integrity": "sha512-Tz2++Aqqz0rJ7kYBfz+iqyE3QMycD4vk7LBRyWaAVFgFtQ/O8EJOnVmTOiDWYZ/uYzB4kvP+bqejYdVKzE5lAQ==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.54.tgz", + "integrity": "sha512-F9E+/QDi9sSkLaClO8SOV6etqPd+5DgJje1F9lOWoNncDdOBL2YF59IhsWATSt0TLZbYCf3pNlTHvVV5VfHdvg==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.54.tgz", + "integrity": "sha512-jtdKWV3nBviOd5v4hOpkVmpxsBy90CGzebpbO9beiqUYVMBtSc0AL9zGftFuBon7PNDcdvNCEuQqw2x0wP9yug==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.54.tgz", + "integrity": "sha512-OPafJHD2oUPyvJMrsCvDGkRrVCar5aVyHfWGQzY1dWnzErjrDuSETxwA2HSsyg2jORLY8yBfzc1MIpUkXlctmw==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.54.tgz", + "integrity": "sha512-OKwd4gmwHqOTp4mOGZKe/XUlbDJ4Q9TjX0hMPIDBUWWu/kwhBAudJdBoxnjNf9ocIB6GN6CPowYpR/hRCbSYAg==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.54.tgz", + "integrity": "sha512-sFwueGr7OvIFiQT6WeG0jRLjkjdqWWSrfbVwZp8iMP+8UHEHRBvlaxL6IuKNDwAozNUmbb8nIMXa7oAOARGs1Q==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.54.tgz", + "integrity": "sha512-1ZuY+JDI//WmklKlBgJnglpUL1owm2OX+8E1syCD6UAxcMM/XoWd76OHSjl/0MR0LisSAXDqgjT3uJqT67O3qw==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.54.tgz", + "integrity": "sha512-EgjAgH5HwTbtNsTqQOXWApBaPVdDn7XcK+/PtJwZLT1UmpLoznPd8c5CxqsH2dQK3j05YsB3L17T8vE7cp4cCg==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.54.tgz", + "integrity": "sha512-qqz/SjemQhVMTnvcLGoLOdFpCYbz4v4fUo+TfsWG+1aOu70/80RV6bgNpR2JCrppV2moUQkww+6bWxXRL9YMGw==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.54.tgz", + "integrity": "sha512-WL71L+0Rwv+Gv/HTmxTEmpv0UgmxYa5ftZILVi2QmZBgX3q7+tDeOQNqGtdXSdsL8TQi1vIaVFHUPDe0O0kdig==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.54.tgz", + "integrity": "sha512-qTHGQB8D1etd0u1+sB6p0ikLKRVuCWhYQhAHRPkO+OF3I/iSlTKNNS0Lh2Oc0g0UFGguaFZZiPJdJey3AGpAlw==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.54.tgz", + "integrity": "sha512-j3OMlzHiqwZBDPRCDFKcx595XVfOfOnv68Ax3U4UKZ3MTYQB5Yz3X1mn5GnodEVYzhtZgxEBidLWeIs8FDSfrQ==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.54.tgz", + "integrity": "sha512-y7Vt7Wl9dkOGZjxQZnDAqqn+XOqFD7IMWiewY5SPlNlzMX39ocPQlOaoxvT4FllA5viyV26/QzHtvTjVNOxHZg==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.54.tgz", + "integrity": "sha512-zaHpW9dziAsi7lRcyV4r8dhfG1qBidQWUXweUjnw+lliChJqQr+6XD71K41oEIC3Mx1KStovEmlzm+MkGZHnHA==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.54.tgz", + "integrity": "sha512-PR01lmIMnfJTgeU9VJTDY9ZerDWVFIUzAtJuDHwwceppW7cQWjBBqP48NdeRtoP04/AtO9a7w3viI+PIDr6d+w==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.54.tgz", + "integrity": "sha512-Qyk7ikT2o7Wu76UsvvDS5q0amJvmRzDyVlL0qf5VLsLchjCa1+IAvd8kTBgUxD7VBUUVgItLkk609ZHUc1oCaw==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.54.tgz", + "integrity": "sha512-28GZ24KmMSeKi5ueWzMcco6EBHStL3B6ubM7M51RmPwXQGLe0teBGJocmWhgwccA1GeFXqxzILIxXpHbl9Q/Kw==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.54.tgz", + "integrity": "sha512-T+rdZW19ql9MjS7pixmZYVObd9G7kcaZo+sETqNH4RCkuuYSuv9AGHUVnPoP9hhuE1WM1ZimHz1CIBHBboLU7w==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.54.tgz", + "integrity": "sha512-AoHTRBUuYwXtZhjXZbA1pGfTo8cJo3vZIcWGLiUcTNgHpJJMC1rVA44ZereBHMJtotyN71S8Qw0npiCIkW96cQ==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.54", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.54.tgz", + "integrity": "sha512-M0kuUvXhot1zOISQGXwWn6YtS+Y/1RT9WrVIOywZnJHo3jCDyewAc79aKNQWFCQm+xNHVTq9h8dZKvygoXQQRg==", + "optional": true + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true + }, + "execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "dev": true, + "requires": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } + } + }, + "fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "requires": { + "reusify": "^1.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true + }, + "fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "generic-names": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/generic-names/-/generic-names-4.0.0.tgz", + "integrity": "sha512-ySFolZQfw9FoDb3ed9d80Cm9f0+r7qj+HJkWjeD9RBfpxEVTlVhol+gvaQB/78WbwYfbnNh8nWHHBSlg072y6A==", + "requires": { + "loader-utils": "^3.2.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==" + }, + "get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" + }, + "graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true + }, + "hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" + }, + "html-tags": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.2.0.tgz", + "integrity": "sha512-vy7ClnArOZwCnqZgvv+ddgHgJiAFXe3Ge9ML5/mBctVJoUoYPCdxVucOywjDARn6CVoh3dRSFdPHy2sX80L0Wg==", + "dev": true + }, + "http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==" + }, + "icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "requires": {} + }, + "immutable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.1.0.tgz", + "integrity": "sha512-oNkuqVTA8jqG1Q6c+UglTOD1xhC1BtjKI7XkCXRkZHrN5m18/XsnUp8Q89GkQO/z+0WjonSvl0FLhDYftp46nQ==", + "devOptional": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "invert-kv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-3.0.1.tgz", + "integrity": "sha512-CYdFeFexxhv/Bcny+Q0BfOV+ltRlJcd4BBZBYFX/O0u4npJrgZtIcjokegtiSMAvlMTJ+Koq0GBCc//3bueQxw==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "js-calendar-converter": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/js-calendar-converter/-/js-calendar-converter-0.0.7.tgz", + "integrity": "sha512-w4QSGDwWaxBAxmWdfOC2CHVxEFxu48WUm9191uomUPabDyx/pVKSapZebBBVBv/H5GQc5hzDPOPmOLVA31bqjQ==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" + }, + "json5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==" + }, + "jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "lcid": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-3.1.1.tgz", + "integrity": "sha512-M6T051+5QCGLBQb8id3hdvIW8+zeFV2FyBGFS9IEK5H9Wt4MueD4bW1eWikpHgZp+5xR3l5c8pZUkQsIA0BFZg==", + "requires": { + "invert-kv": "^3.0.0" + } + }, + "licia": { + "version": "1.37.0", + "resolved": "https://registry.npmjs.org/licia/-/licia-1.37.0.tgz", + "integrity": "sha512-jX49+WmzikOPGNrcy/giS23HCI8Pb7RF585Ei5d7oWF4WMelaZWv4odqQNdT0jtHkoUxqSvPz67Jvyq06xamUA==", + "dev": true + }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==" + }, + "loader-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.0.tgz", + "integrity": "sha512-HVl9ZqccQihZ7JM85dco1MvO9G+ONvxoGa9rkhzFsneGLKSUg1gJf9bWzhRhcvm2qChhWpebQhP44qxjKIUCaQ==" + }, + "local-pkg": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.2.tgz", + "integrity": "sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==", + "dev": true + }, + "localstorage-polyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/localstorage-polyfill/-/localstorage-polyfill-1.0.1.tgz", + "integrity": "sha512-m4iHVZxFH5734oQcPKU08025gIz2+4bjWR9lulP8ZYxEJR0BpA0w32oJmkzh8y3UI9ci7xCBehQDc3oA1X+VHw==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "lunisolar": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/lunisolar/-/lunisolar-2.6.0.tgz", + "integrity": "sha512-Q2Ph0MtYDovbX5lvvo2FvM+bFzZVZaIb70q+FyQLheZ4xuL5tvCBP/uEU5KwG+vfo0ztzGPrlIitOcGhltfwvQ==" + }, + "magic-string": { + "version": "0.26.3", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.3.tgz", + "integrity": "sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==", + "requires": { + "sourcemap-codec": "^1.4.8" + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true + }, + "merge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-2.1.1.tgz", + "integrity": "sha512-jz+Cfrg9GWOZbQAnDQ4hlVnQky+341Yk5ru8bZSe6sIDTCIg8n9i/u7hSQGSVOF3C7lH6mGtqjkiT9G4wFLL0w==" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true + }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + }, + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true + }, + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "requires": { + "mime-db": "1.52.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "miniprogram-api-typings": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/miniprogram-api-typings/-/miniprogram-api-typings-4.1.0.tgz", + "integrity": "sha512-4RBsz27nBKyRkVGoNkRaPx24/KeJBw3zaaIlXDR8s/WBh2PbcUAc+q7wLLbp7Qsmb3bLzzUu7tqAti+B06kmjg==" + }, + "mlly": { + "version": "0.5.14", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-0.5.14.tgz", + "integrity": "sha512-DgRgNUSX9NIxxCxygX4Xeg9C7GX7OUx1wuQ8cXx9o9LE0e9wrH+OZ9fcnrlEedsC/rtqry3ZhUddC759XD/L0w==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "pathe": "^0.3.5", + "pkg-types": "^0.3.4", + "ufo": "^0.8.5" + } + }, + "module-alias": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/module-alias/-/module-alias-2.2.2.tgz", + "integrity": "sha512-A/78XjoX2EmNvppVWEhM2oGk3x4lLxnkEA4jTbaK97QKSDjkIoOsKQlfylt/d3kKKi596Qy3NP5XrXJ6fZIC9Q==" + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==" + }, + "negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true + }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==" + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==" + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, + "on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "os-locale-s-fix": { + "version": "1.0.8-fix-1", + "resolved": "https://registry.npmjs.org/os-locale-s-fix/-/os-locale-s-fix-1.0.8-fix-1.tgz", + "integrity": "sha512-Sv0OvhPiMutICiwORAUefv02DCPb62IelBmo8ZsSrRHyI3FStqIWZvjqDkvtjU+lcujo7UNir+dCwKSqlEQ/5w==", + "requires": { + "lcid": "^3.0.0" + } + }, + "parse-css-font": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-css-font/-/parse-css-font-4.0.0.tgz", + "integrity": "sha512-lnY7dTUfjRXsSo5G5C639L8RaBBaVSgL+5hacIFKsNHzeCJQ5SFSZv1DZmc7+wZv/22PFGOq2YbaEHLdaCS/mQ==", + "requires": { + "css-font-size-keywords": "^1.0.0", + "css-font-stretch-keywords": "^1.0.1", + "css-font-style-keywords": "^1.0.1", + "css-font-weight-keywords": "^1.0.0", + "css-list-helpers": "^2.0.0", + "css-system-font-keywords": "^1.0.0", + "unquote": "^1.1.1" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "pathe": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.3.7.tgz", + "integrity": "sha512-yz7GK+kSsS27x727jtXpd5VT4dDfP/JDIQmaowfxyWCnFjOWtE1VIh7i6TzcSfzW0n4+bRQztj1VdKnITNq/MA==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==" + }, + "pinia": { + "version": "2.0.36", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-2.0.36.tgz", + "integrity": "sha512-4UKApwjlmJH+VuHKgA+zQMddcCb3ezYnyewQ9NVrsDqZ/j9dMv5+rh+1r48whKNdpFkZAWVxhBp5ewYaYX9JcQ==", + "requires": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": "*" + } + }, + "pinia-plugin-persistedstate": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pinia-plugin-persistedstate/-/pinia-plugin-persistedstate-2.3.0.tgz", + "integrity": "sha512-K7vzt68Z3lbMDjb23Ki2vgHVBP2QFvjl7WNwzIwqY/DAkhSt8mi/z6bN/cXTst7fJjXWF0lC9NyxFKHfxWehuw==", + "requires": {} + }, + "pkg-types": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-0.3.5.tgz", + "integrity": "sha512-VkxCBFVgQhNHYk9subx+HOhZ4jzynH11ah63LZsprTKwPCWG9pfWBlkElWFbvkP9BVR0dP1jS9xPdhaHQNK74Q==", + "dev": true, + "requires": { + "jsonc-parser": "^3.2.0", + "mlly": "^0.5.14", + "pathe": "^0.3.7" + } + }, + "postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-modules": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/postcss-modules/-/postcss-modules-4.3.1.tgz", + "integrity": "sha512-ItUhSUxBBdNamkT3KzIZwYNNRFKmkJrofvC2nWab3CPKhYBQ1f27XXh1PAPE27Psx58jeelPsxWB/+og+KEH0Q==", + "requires": { + "generic-names": "^4.0.0", + "icss-replace-symbols": "^1.1.0", + "lodash.camelcase": "^4.3.0", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.0", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "string-hash": "^1.1.1" + } + }, + "postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "requires": {} + }, + "postcss-modules-local-by-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.0.tgz", + "integrity": "sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==", + "requires": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + } + }, + "postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "requires": { + "postcss-selector-parser": "^6.0.4" + } + }, + "postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "requires": { + "icss-utils": "^5.0.0" + } + }, + "postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "optional": true + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "qrcode-reader": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/qrcode-reader/-/qrcode-reader-1.0.4.tgz", + "integrity": "sha512-rRjALGNh9zVqvweg1j5OKIQKNsw3bLC+7qwlnead5K/9cb1cEIAGkwikt/09U0K+2IDWGD9CC6SP7tHAjUeqvQ==", + "dev": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "dev": true + }, + "qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "requires": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "requires": { + "pify": "^2.3.0" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", + "dev": true + }, + "resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "requires": { + "is-core-module": "^2.9.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" + }, + "rollup": { + "version": "2.79.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz", + "integrity": "sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==", + "requires": { + "fsevents": "~2.3.2" + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "safe-area-insets": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/safe-area-insets/-/safe-area-insets-1.4.1.tgz", + "integrity": "sha512-r/nRWTjFGhhm3w1Z6Kd/jY11srN+lHt2mNl1E/emQGW8ic7n3Avu4noibklfSM+Y34peNphHD/BSZecav0sXYQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sass": { + "version": "1.54.9", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.54.9.tgz", + "integrity": "sha512-xb1hjASzEH+0L0WI9oFjqhRi51t/gagWnxLiwUNMltA0Ab6jIDkAacgKiGYKM9Jhy109osM7woEEai6SXeJo5Q==", + "devOptional": true, + "requires": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + } + }, + "scule": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/scule/-/scule-0.3.2.tgz", + "integrity": "sha512-zIvPdjOH8fv8CgrPT5eqtxHQXmPNnV/vHJYffZhE43KZkvULvpCTvOt1HPlFaCZx287INL9qaqrZg34e8NgI4g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + }, + "send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + } + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + }, + "string-hash": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/string-hash/-/string-hash-1.1.3.tgz", + "integrity": "sha512-kJUvRUFK49aub+a7T1nNE66EJbZBMnBgoC1UbCZ5n6bsZKBRga4KgBRTMn/pFkeCZSYtNeSyMxPDM0AXWELk2A==" + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-literal": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-0.4.0.tgz", + "integrity": "sha512-ql/sBDoJOybTKSIOWrrh8kgUEMjXMwRAkZTD0EwiwxQH/6tTPkZvMIEjp0CRlpi6V5FMiJyvxeRkEi1KrGISoA==", + "dev": true, + "requires": { + "acorn": "^8.7.1" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "systemjs": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/systemjs/-/systemjs-6.12.6.tgz", + "integrity": "sha512-SawLiWya8/uNR4p12OggSYZ35tP4U4QTpfV57DdZEOPr6+J6zlLSeeEpMmzYTEoBAsMhctdEE+SWJUDYX4EaKw==", + "dev": true + }, + "tapable": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.3.2.tgz", + "integrity": "sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==" + }, + "text-encoding-shim": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/text-encoding-shim/-/text-encoding-shim-1.0.5.tgz", + "integrity": "sha512-H7yYW+jRn4yhu60ygZ2f/eMhXPITRt4QSUTKzLm+eCaDsdX8avmgWpmtmHAzesjBVUTAypz9odu5RKUjX5HNYA==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typescript": { + "version": "4.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.3.tgz", + "integrity": "sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==", + "devOptional": true + }, + "ufo": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-0.8.5.tgz", + "integrity": "sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==", + "dev": true + }, + "undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "unimport": { + "version": "0.6.7", + "resolved": "https://registry.npmjs.org/unimport/-/unimport-0.6.7.tgz", + "integrity": "sha512-EMoVqDjswHkU+nD098QYHXH7Mkw7KwGDQAyeRF2lgairJnuO+wpkhIcmCqrD1OPJmsjkTbJ2tW6Ap8St0PuWZA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.2.1", + "escape-string-regexp": "^5.0.0", + "fast-glob": "^3.2.11", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.2", + "mlly": "^0.5.7", + "pathe": "^0.3.3", + "scule": "^0.3.2", + "strip-literal": "^0.4.0", + "unplugin": "^0.9.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true + } + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true + }, + "unplugin": { + "version": "0.9.5", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-0.9.5.tgz", + "integrity": "sha512-luraheyfxwtvkvHpsOvMNv7IjLdORTWKZp0gWYNHGLi2ImON3iIZOj464qEyyEwLA/EMt12fC415HW9zRpOfTg==", + "dev": true, + "requires": { + "acorn": "^8.8.0", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.4.4" + } + }, + "unplugin-auto-import": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/unplugin-auto-import/-/unplugin-auto-import-0.11.2.tgz", + "integrity": "sha512-1+VwBfn9dtiYv9SQLKP1AvZolUbK9xTVeAT+iOcEk4EHSFUlmIqBVLEKI76cifSQTLOJ3rZyPrEgptf3SZNLlQ==", + "dev": true, + "requires": { + "@antfu/utils": "^0.5.2", + "@rollup/pluginutils": "^4.2.1", + "local-pkg": "^0.4.2", + "magic-string": "^0.26.2", + "unimport": "^0.6.7", + "unplugin": "^0.9.3" + } + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "update-browserslist-db": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.7.tgz", + "integrity": "sha512-iN/XYesmZ2RmmWAiI4Z5rq0YqSiv0brj9Ce9CfhNE4xIW2h+MFxcgkxIzZ+ShkFPUkjU3gQ+3oypadD3RAMtrg==", + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true + }, + "vite": { + "version": "2.9.14", + "resolved": "https://registry.npmjs.org/vite/-/vite-2.9.14.tgz", + "integrity": "sha512-P/UCjSpSMcE54r4mPak55hWAZPlyfS369svib/gpmz8/01L822lMPOJ/RYW6tLCe1RPvMvOsJ17erf55bKp4Hw==", + "requires": { + "esbuild": "^0.14.27", + "fsevents": "~2.3.2", + "postcss": "^8.4.13", + "resolve": "^1.22.0", + "rollup": "^2.59.0" + } + }, + "vue": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz", + "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==", + "requires": { + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-sfc": "3.5.22", + "@vue/runtime-dom": "3.5.22", + "@vue/server-renderer": "3.5.22", + "@vue/shared": "3.5.22" + }, + "dependencies": { + "@vue/compiler-core": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz", + "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==", + "requires": { + "@babel/parser": "^7.28.4", + "@vue/shared": "3.5.22", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-dom": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz", + "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==", + "requires": { + "@vue/compiler-core": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "@vue/compiler-sfc": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz", + "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==", + "requires": { + "@babel/parser": "^7.28.4", + "@vue/compiler-core": "3.5.22", + "@vue/compiler-dom": "3.5.22", + "@vue/compiler-ssr": "3.5.22", + "@vue/shared": "3.5.22", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.19", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "@vue/compiler-ssr": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz", + "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==", + "requires": { + "@vue/compiler-dom": "3.5.22", + "@vue/shared": "3.5.22" + } + }, + "@vue/shared": { + "version": "3.5.22", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz", + "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w==" + }, + "magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + } + } + }, + "vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "requires": {} + }, + "vue-router": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.1.5.tgz", + "integrity": "sha512-IsvoF5D2GQ/EGTs/Th4NQms9gd2NSqV+yylxIyp/OYp8xOwxmU8Kj/74E9DTSYAyH5LX7idVUngN3JSj1X4xcQ==", + "requires": { + "@vue/devtools-api": "^6.1.4" + } + }, + "webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true + }, + "webpack-virtual-modules": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.4.4.tgz", + "integrity": "sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wot-design-uni": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/wot-design-uni/-/wot-design-uni-1.13.0.tgz", + "integrity": "sha512-U4ezX7n1DfSuecTvHap06UqkN7dGhSLyC5n7OfmddajYSiV6t39bPLtRIds6uTarmRZCEWERrLN8cGSdZJIHWg==", + "requires": {} + }, + "ws": { + "version": "8.8.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.8.1.tgz", + "integrity": "sha512-bGy2JzvzkPowEJV++hF07hAD6niYSr0JzBNo/J29WsB57A2r7Wlc1UFcTR9IzrPvuNVO4B8LGqF8qcpsVOhJCA==", + "dev": true, + "requires": {} + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha512-58Im/U0mlVBLM38NdZjHyhuMtCqa61469k2YP/AaPbvCoV9aQGUpbJBj1QRm2ytRiVQBD/fsw7L2bJGDVQswBA==" + }, + "xregexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-3.1.0.tgz", + "integrity": "sha512-4Y1x6DyB8xRoxosooa6PlGWqmmSKatbzhrftZ7Purmm4B8R4qIEJG1A2hZsdz5DhmIqS0msC0I7KEq93GphEVg==" + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..8e730a1 --- /dev/null +++ b/package.json @@ -0,0 +1,70 @@ +{ + "name": "uni-preset-vue", + "version": "0.0.0", + "description": "此项目为uniapp的vue3 + ts + vite + pinia的模板", + "scripts": { + "dev:app": "uni -p app", + "dev:custom": "uni -p", + "dev:h5": "uni", + "dev:h5:ssr": "uni --ssr", + "dev:mp-alipay": "uni -p mp-alipay", + "dev:mp-baidu": "uni -p mp-baidu", + "dev:mp-kuaishou": "uni -p mp-kuaishou", + "dev:mp-lark": "uni -p mp-lark", + "dev:mp-qq": "uni -p mp-qq", + "dev:mp-toutiao": "uni -p mp-toutiao", + "dev:mp-weixin": "uni -p mp-weixin", + "dev:quickapp-webview": "uni -p quickapp-webview", + "dev:quickapp-webview-huawei": "uni -p quickapp-webview-huawei", + "dev:quickapp-webview-union": "uni -p quickapp-webview-union", + "build:app": "uni build -p app", + "build:custom": "uni build -p", + "build:h5": "uni build", + "build:h5:ssr": "uni build --ssr", + "build:mp-alipay": "uni build -p mp-alipay", + "build:mp-baidu": "uni build -p mp-baidu", + "build:mp-kuaishou": "uni build -p mp-kuaishou", + "build:mp-lark": "uni build -p mp-lark", + "build:mp-qq": "uni build -p mp-qq", + "build:mp-toutiao": "uni build -p mp-toutiao", + "build:mp-weixin": "uni build -p mp-weixin", + "build:quickapp-webview": "uni build -p quickapp-webview", + "build:quickapp-webview-huawei": "uni build -p quickapp-webview-huawei", + "build:quickapp-webview-union": "uni build -p quickapp-webview-union" + }, + "dependencies": { + "@dcloudio/uni-app": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-app-plus": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-components": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-h5": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-alipay": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-baidu": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-kuaishou": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-lark": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-qq": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-toutiao": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-mp-weixin": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-quickapp-webview": "3.0.0-alpha-3050320220729001", + "@types/uni-app": "^1.4.8", + "js-calendar-converter": "^0.0.7", + "lunisolar": "^2.6.0", + "miniprogram-api-typings": "^4.1.0", + "pinia": "^2.0.36", + "pinia-plugin-persistedstate": "^2.3.0", + "text-encoding-shim": "^1.0.5", + "vue": "^3.5.1", + "wot-design-uni": "^1.13.0" + }, + "devDependencies": { + "@dcloudio/types": "^3.0.13", + "@dcloudio/uni-automator": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-cli-shared": "3.0.0-alpha-3050320220729001", + "@dcloudio/uni-stacktracey": "3.0.0-alpha-3050320220729001", + "@dcloudio/vite-plugin-uni": "3.0.0-alpha-3050320220729001", + "@types/node": "^18.11.9", + "sass": "^1.54.9", + "typescript": "^4.7.4", + "unplugin-auto-import": "^0.11.2", + "vite": "^2.9.14" + } +} diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..d41e853 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,56 @@ + + diff --git a/src/api/index.ts b/src/api/index.ts new file mode 100644 index 0000000..d46c793 --- /dev/null +++ b/src/api/index.ts @@ -0,0 +1,4 @@ +export * from './modules/AI' +export * from './modules/ZhouYi' +export * from './modules/question' +export * from './modules/suggestion' diff --git a/src/api/modules/AI.ts b/src/api/modules/AI.ts new file mode 100644 index 0000000..c83b455 --- /dev/null +++ b/src/api/modules/AI.ts @@ -0,0 +1,147 @@ +import { request } from '@/utils/request' +import { getPageConfig } from './config' +import { 动爻数量 } from '@/utils/gua_64' +import { storeToRefs } from 'pinia' +import { useAIReponseStore, useTabStore } from '@/stores' +import * as TextEncoding from "text-encoding-shim"; +import { watch } from 'vue' + +const { + responseText, + showResponseText, + isLoading, + isDone +} = storeToRefs(useAIReponseStore()) + +const { + tabIndex +} = storeToRefs(useTabStore()) + + +// const API_KEY = 'sk-Go5P3ztUx30inaZCsWHQje7SjUxbGjD6znDO6xUJNCDB5jNu' // 美团团 +// const API_KEY = 'sk-OPl2umaMSEp7QrwK5e13Fd5f9d86471788A3E2590f439f18' // aihubmix +// const API_KEY = 'sk-54463246c08f40ecb3baec28bc9a78b4' // 千问 +const API_KEY = 'sk-b65f99c1b2ab416aaf340891cf4ca308' // ds + +const AI_URL = 'https://api.deepseek.com/chat/completions' +// const AI_URL = 'https://max.openai365.top/v1/chat/completions' +// const AI_URL = 'https://aihubmix.com/v1/chat/completions' +// const AI_MODEL = 'gemini-3-pro-preview' +// const AI_URL = 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' +const AI_MODEL = 'deepseek-chat' + +const errMessage = { + 401: 'API key 无效', + 403: 'API key 余额不足', +} + +export const AIChat = async ( + q: string, // 用户所问之事 + symbol_1: string, // 本卦结果 + symbol_2: string, // 变卦结果 + symbol_3: string, // 动爻结果 + // count: number, // 动爻数量 +) => { + const pageCfg = await getPageConfig() + + let callWord = pageCfg.call_word + callWord = callWord + .replace('[q]', q) + .replace('[symbol_1]', symbol_1) + .replace('[symbol_2]', symbol_2) + .replace('[symbol_3]', symbol_3) + + console.log(callWord) + + // try { + // const requestTask = await StreamRequest({ + // model: AI_MODEL, + // messages: [ + // { role: "system", content: "You are a helpful assistant." }, + // { role: "user", content: callWord } + // ], + // stream: true + // }) + // requestTask.onHeadersReceived((e) => { + // console.log(e); + // }) + // requestTask.onChunkReceived((e) => { + // console.log(e); + // const decoder = new TextDecoder('utf-8'); + // const txt = decoder.decode(e.data); + // responseText.value = txt + // }) + // } catch (err) { + // console.log(err); + // } + + return await new Promise((resolve, reject) => { + const requestTask: any = uni.request({ + url: AI_URL, + method: 'POST', + header: { + 'content-type': 'application/json', + 'Authorization': `Bearer ${API_KEY}` + }, + data: { + model: AI_MODEL, + messages: [ + { role: "system", content: "You are a helpful assistant." }, + { role: "user", content: callWord } + ], + stream: true + }, + enableChunked: true, + responseType: 'arraybuffer', + success: (res) => { + if (res.statusCode !== 200) { + resolve({ + code: res.statusCode, + message: errMessage[res.statusCode] + }) + } + isDone.value = true + // console.log('Data received 数据接受完毕:', res.data) + }, + fail: (error) => { + // console.log('打印***error 错误处理', error) + }, + complete: (complete) => { + // console.log('打印***complete 完成接收', complete) + } + } as any) + + requestTask.onChunkReceived(res => { + const uint8Array = new Uint8Array(res.data); + const decoder = new TextEncoding.TextDecoder("utf-8"); + const chunk = decoder.decode(uint8Array).toString().split('data: ') + + for (let i = 1; i < chunk.length; i++) { + try { + const result = JSON.parse(chunk[i]) + // console.log(result) + if (result.choices[0].delta.content) { + // showResponseText.value = true + isLoading.value = false + responseText.value += result.choices[0].delta?.content + } + } catch (e) {} + } + }) + + watch( + () => tabIndex.value, + (newVal, oldVal) => { + if (newVal !== oldVal) { + requestTask.abort() + isLoading.value = false + responseText.value = '' + return + } + }, + { + deep: true + } + ) + }) +} \ No newline at end of file diff --git a/src/api/modules/ZhouYi.ts b/src/api/modules/ZhouYi.ts new file mode 100644 index 0000000..848e32f --- /dev/null +++ b/src/api/modules/ZhouYi.ts @@ -0,0 +1,41 @@ +import { request } from "@/utils/request" + +export const getZhouList = () => { + return request('/api/zhou-yis?sort=index&pagination[pageSize]=64', { + method: 'GET', + }) +} + +export const getZhouDetail = ({ + id, + name +}: { + id?: string, + name?: string +}) => { + if (id) { + return request(`/api/zhou-yis/${id}`, { + method: 'GET', + }) + } + if (name) { + return request(`/api/zhou-yis?filters[name]=${name}`, { + method: 'GET', + }) + } +} + +export const 获取易经爻辞 = ( + name: string, + 动爻名称: string +) => { + return request(`/api/zhou-yis?filters[name]=${name}`, { + method: 'GET', + }).then( + res => res.data[0] + ).then(res => { + let str = res.desc.split('\n\n') + let index = str.findIndex(item => item.includes(动爻名称)) + return str[index] + '\n' + str[index + 1] + }) +} \ No newline at end of file diff --git a/src/api/modules/config.ts b/src/api/modules/config.ts new file mode 100644 index 0000000..a24f375 --- /dev/null +++ b/src/api/modules/config.ts @@ -0,0 +1,7 @@ +import { request } from '@/utils/request' + +export const getPageConfig = async () => { + return request('/api/config?populate=avatar', { + method: 'GET' + }).then(res => res.data) +} \ No newline at end of file diff --git a/src/api/modules/question.ts b/src/api/modules/question.ts new file mode 100644 index 0000000..dfecc0a --- /dev/null +++ b/src/api/modules/question.ts @@ -0,0 +1,14 @@ +import { request } from "@/utils/request" + +export const createQ = ( + q: string +) => { + return request('/api/questions', { + method: 'POST', + data: { + data: { + q + } + } + }) +} \ No newline at end of file diff --git a/src/api/modules/suggestion.ts b/src/api/modules/suggestion.ts new file mode 100644 index 0000000..1a391b8 --- /dev/null +++ b/src/api/modules/suggestion.ts @@ -0,0 +1,14 @@ +import { request } from "@/utils/request" + +export const createSuggestion = ( + desc: string +) => { + return request('/api/suggestions', { + method: 'POST', + data: { + data: { + desc + } + } + }) +} \ No newline at end of file diff --git a/src/components/Navbar.vue b/src/components/Navbar.vue new file mode 100644 index 0000000..e2e0432 --- /dev/null +++ b/src/components/Navbar.vue @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/src/components/TabBar.vue b/src/components/TabBar.vue new file mode 100644 index 0000000..c3f62bb --- /dev/null +++ b/src/components/TabBar.vue @@ -0,0 +1,56 @@ + + + + + \ No newline at end of file diff --git a/src/components/ua-markdown/lib/highlight/atom-one-dark.css b/src/components/ua-markdown/lib/highlight/atom-one-dark.css new file mode 100644 index 0000000..5344ee3 --- /dev/null +++ b/src/components/ua-markdown/lib/highlight/atom-one-dark.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#abb2bf;background:#282c34}.hljs-comment,.hljs-quote{color:#5c6370;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#c678dd}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e06c75}.hljs-literal{color:#56b6c2}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#98c379}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#d19a66}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#61aeee}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#e6c07b}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/src/components/ua-markdown/lib/highlight/atom-one-light.css b/src/components/ua-markdown/lib/highlight/atom-one-light.css new file mode 100644 index 0000000..df0268a --- /dev/null +++ b/src/components/ua-markdown/lib/highlight/atom-one-light.css @@ -0,0 +1 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{color:#383a42;background:#fafafa}.hljs-comment,.hljs-quote{color:#a0a1a7;font-style:italic}.hljs-doctag,.hljs-formula,.hljs-keyword{color:#a626a4}.hljs-deletion,.hljs-name,.hljs-section,.hljs-selector-tag,.hljs-subst{color:#e45649}.hljs-literal{color:#0184bb}.hljs-addition,.hljs-attribute,.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#50a14f}.hljs-attr,.hljs-number,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-pseudo,.hljs-template-variable,.hljs-type,.hljs-variable{color:#986801}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-selector-id,.hljs-symbol,.hljs-title{color:#4078f2}.hljs-built_in,.hljs-class .hljs-title,.hljs-title.class_{color:#c18401}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}.hljs-link{text-decoration:underline} \ No newline at end of file diff --git a/src/components/ua-markdown/lib/highlight/github-dark.min.css b/src/components/ua-markdown/lib/highlight/github-dark.min.css new file mode 100644 index 0000000..03b6da8 --- /dev/null +++ b/src/components/ua-markdown/lib/highlight/github-dark.min.css @@ -0,0 +1,10 @@ +pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}/*! + Theme: GitHub Dark + Description: Dark theme as seen on github.com + Author: github.com + Maintainer: @Hirse + Updated: 2021-05-15 + + Outdated base version: https://github.com/primer/github-syntax-dark + Current colors taken from GitHub's CSS +*/.hljs{color:#c9d1d9;background:#0d1117}.hljs-doctag,.hljs-keyword,.hljs-meta .hljs-keyword,.hljs-template-tag,.hljs-template-variable,.hljs-type,.hljs-variable.language_{color:#ff7b72}.hljs-title,.hljs-title.class_,.hljs-title.class_.inherited__,.hljs-title.function_{color:#d2a8ff}.hljs-attr,.hljs-attribute,.hljs-literal,.hljs-meta,.hljs-number,.hljs-operator,.hljs-selector-attr,.hljs-selector-class,.hljs-selector-id,.hljs-variable{color:#79c0ff}.hljs-meta .hljs-string,.hljs-regexp,.hljs-string{color:#a5d6ff}.hljs-built_in,.hljs-symbol{color:#ffa657}.hljs-code,.hljs-comment,.hljs-formula{color:#8b949e}.hljs-name,.hljs-quote,.hljs-selector-pseudo,.hljs-selector-tag{color:#7ee787}.hljs-subst{color:#c9d1d9}.hljs-section{color:#1f6feb;font-weight:700}.hljs-bullet{color:#f2cc60}.hljs-emphasis{color:#c9d1d9;font-style:italic}.hljs-strong{color:#c9d1d9;font-weight:700}.hljs-addition{color:#aff5b4;background-color:#033a16}.hljs-deletion{color:#ffdcd7;background-color:#67060c} \ No newline at end of file diff --git a/src/components/ua-markdown/lib/highlight/uni-highlight.min.js b/src/components/ua-markdown/lib/highlight/uni-highlight.min.js new file mode 100644 index 0000000..489c997 --- /dev/null +++ b/src/components/ua-markdown/lib/highlight/uni-highlight.min.js @@ -0,0 +1,5254 @@ +/* + Highlight.js v11.7.0 + (c) 2006-2022 undefined and other contributors + License: BSD-3-Clause + */ +var e = { + exports: {} +}; +function n(e) { + return e instanceof Map ? e.clear = e.delete = e.set = () => { + throw Error("map is read-only") + } : e instanceof Set && (e.add = e.clear = e.delete = () => { + throw Error("set is read-only") + }), Object.freeze(e), Object.getOwnPropertyNames(e).forEach((t => { + var a = e[t]; + "object" != typeof a || Object.isFrozen(a) || n(a) + })), e +} +e.exports = n, e.exports.default = n; +class t { + constructor(e) { + void 0 === e.data && (e.data = {}), this.data = e.data, this.isMatchIgnored = !1 + } + ignoreMatch() { + this.isMatchIgnored = !0 + } +} + +function a(e) { + return e.replace(/&/g, "&").replace(//g, ">").replace(/"/g, """).replace(/'/g, + "'") +} + +function i(e, ...n) { + const t = Object.create(null); + for (const n in e) t[n] = e[n]; + return n.forEach((e => { + for (const n in e) t[n] = e[n] + })), t +} +const r = e => !!e.scope || e.sublanguage && e.language; +class s { + constructor(e, n) { + this.buffer = "", this.classPrefix = n.classPrefix, e.walk(this) + } + addText(e) { + this.buffer += a(e) + } + openNode(e) { + if (!r(e)) return; + let n = ""; + n = e.sublanguage ? "language-" + e.language : ((e, { + prefix: n + }) => { + if (e.includes(".")) { + const t = e.split("."); + return [`${n}${t.shift()}`, ...t.map(((e, n) => `${e}${"_".repeat(n+1)}`))].join(" ") + } + return `${n}${e}` + })(e.scope, { + prefix: this.classPrefix + }), this.span(n) + } + closeNode(e) { + r(e) && (this.buffer += "") + } + value() { + return this.buffer + } + span(e) { + this.buffer += `` + } +} +const o = (e = {}) => { + const n = { + children: [] + }; + return Object.assign(n, e), n +}; +class l { + constructor() { + this.rootNode = o(), this.stack = [this.rootNode] + } + get top() { + return this.stack[this.stack.length - 1] + } + get root() { + return this.rootNode + } + add(e) { + this.top.children.push(e) + } + openNode(e) { + const n = o({ + scope: e + }); + this.add(n), this.stack.push(n) + } + closeNode() { + if (this.stack.length > 1) return this.stack.pop() + } + closeAllNodes() { + for (; this.closeNode();); + } + toJSON() { + return JSON.stringify(this.rootNode, null, 4) + } + walk(e) { + return this.constructor._walk(e, this.rootNode) + } + static _walk(e, n) { + return "string" == typeof n ? e.addText(n) : n.children && (e.openNode(n), + n.children.forEach((n => this._walk(e, n))), e.closeNode(n)), e + } + static _collapse(e) { + "string" != typeof e && e.children && (e.children.every((e => "string" == typeof e)) ? e.children = [e.children + .join("") + ] : e.children.forEach((e => { + l._collapse(e) + }))) + } +} +class c extends l { + constructor(e) { + super(), this.options = e + } + addKeyword(e, n) { + "" !== e && (this.openNode(n), this.addText(e), this.closeNode()) + } + addText(e) { + "" !== e && this.add(e) + } + addSublanguage(e, n) { + const t = e.root; + t.sublanguage = !0, t.language = n, this.add(t) + } + toHTML() { + return new s(this, this.options).value() + } + finalize() { + return !0 + } +} + +function d(e) { + return e ? "string" == typeof e ? e : e.source : null +} + +function g(e) { + return m("(?=", e, ")") +} + +function u(e) { + return m("(?:", e, ")*") +} + +function b(e) { + return m("(?:", e, ")?") +} + +function m(...e) { + return e.map((e => d(e))).join("") +} + +function p(...e) { + const n = (e => { + const n = e[e.length - 1]; + return "object" == typeof n && n.constructor === Object ? (e.splice(e.length - 1, 1), n) : {} + })(e); + return "(" + (n.capture ? "" : "?:") + e.map((e => d(e))).join("|") + ")" +} + +function _(e) { + return RegExp(e.toString() + "|").exec("").length - 1 +} +const h = /\[(?:[^\\\]]|\\.)*\]|\(\??|\\([1-9][0-9]*)|\\./; + +function f(e, { + joinWith: n +}) { + let t = 0; + return e.map((e => { + t += 1; + const n = t; + let a = d(e), + i = ""; + for (; a.length > 0;) { + const e = h.exec(a); + if (!e) { + i += a; + break + } + i += a.substring(0, e.index), + a = a.substring(e.index + e[0].length), "\\" === e[0][0] && e[1] ? i += "\\" + (Number(e[1]) + n) : (i += + e[0], + "(" === e[0] && t++) + } + return i + })).map((e => `(${e})`)).join(n) +} +const E = "(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)", + y = { + begin: "\\\\[\\s\\S]", + relevance: 0 + }, + w = { + scope: "string", + begin: "'", + end: "'", + illegal: "\\n", + contains: [y] + }, + N = { + scope: "string", + begin: '"', + end: '"', + illegal: "\\n", + contains: [y] + }, + v = (e, n, t = {}) => { + const a = i({ + scope: "comment", + begin: e, + end: n, + contains: [] + }, t); + a.contains.push({ + scope: "doctag", + begin: "[ ]*(?=(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):)", + end: /(TODO|FIXME|NOTE|BUG|OPTIMIZE|HACK|XXX):/, + excludeBegin: !0, + relevance: 0 + }); + const r = p("I", "a", "is", "so", "us", "to", "at", "if", "in", "it", "on", /[A-Za-z]+['](d|ve|re|ll|t|s|n)/, + /[A-Za-z]+[-][a-z]+/, /[A-Za-z][a-z]{2,}/); + return a.contains.push({ + begin: m(/[ ]+/, "(", r, /[.]?[:]?([.][ ]|[ ])/, "){3}") + }), a + }, + O = v("//", "$"), + k = v("/\\*", "\\*/"), + x = v("#", "$"); +var M = Object.freeze({ + __proto__: null, + MATCH_NOTHING_RE: /\b\B/, + IDENT_RE: "[a-zA-Z]\\w*", + UNDERSCORE_IDENT_RE: "[a-zA-Z_]\\w*", + NUMBER_RE: "\\b\\d+(\\.\\d+)?", + C_NUMBER_RE: E, + BINARY_NUMBER_RE: "\\b(0b[01]+)", + RE_STARTERS_RE: "!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~", + SHEBANG: (e = {}) => { + const n = /^#![ ]*\//; + return e.binary && (e.begin = m(n, /.*\b/, e.binary, /\b.*/)), i({ + scope: "meta", + begin: n, + end: /$/, + relevance: 0, + "on:begin": (e, n) => { + 0 !== e.index && n.ignoreMatch() + } + }, e) + }, + BACKSLASH_ESCAPE: y, + APOS_STRING_MODE: w, + QUOTE_STRING_MODE: N, + PHRASAL_WORDS_MODE: { + begin: /\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|they|like|more)\b/ + }, + COMMENT: v, + C_LINE_COMMENT_MODE: O, + C_BLOCK_COMMENT_MODE: k, + HASH_COMMENT_MODE: x, + NUMBER_MODE: { + scope: "number", + begin: "\\b\\d+(\\.\\d+)?", + relevance: 0 + }, + C_NUMBER_MODE: { + scope: "number", + begin: E, + relevance: 0 + }, + BINARY_NUMBER_MODE: { + scope: "number", + begin: "\\b(0b[01]+)", + relevance: 0 + }, + REGEXP_MODE: { + begin: /(?=\/[^/\n]*\/)/, + contains: [{ + scope: "regexp", + begin: /\//, + end: /\/[gimuy]*/, + illegal: /\n/, + contains: [y, { + begin: /\[/, + end: /\]/, + relevance: 0, + contains: [y] + }] + }] + }, + TITLE_MODE: { + scope: "title", + begin: "[a-zA-Z]\\w*", + relevance: 0 + }, + UNDERSCORE_TITLE_MODE: { + scope: "title", + begin: "[a-zA-Z_]\\w*", + relevance: 0 + }, + METHOD_GUARD: { + begin: "\\.\\s*[a-zA-Z_]\\w*", + relevance: 0 + }, + END_SAME_AS_BEGIN: e => Object.assign(e, { + "on:begin": (e, n) => { + n.data._beginMatch = e[1] + }, + "on:end": (e, n) => { + n.data._beginMatch !== e[1] && n.ignoreMatch() + } + }) +}); + +function S(e, n) { + "." === e.input[e.index - 1] && n.ignoreMatch() +} + +function A(e, n) { + void 0 !== e.className && (e.scope = e.className, delete e.className) +} + +function C(e, n) { + n && e.beginKeywords && (e.begin = "\\b(" + e.beginKeywords.split(" ").join("|") + ")(?!\\.)(?=\\b|\\s)", + e.__beforeBegin = S, e.keywords = e.keywords || e.beginKeywords, delete e.beginKeywords, + void 0 === e.relevance && (e.relevance = 0)) +} + +function T(e, n) { + Array.isArray(e.illegal) && (e.illegal = p(...e.illegal)) +} + +function R(e, n) { + if (e.match) { + if (e.begin || e.end) throw Error("begin & end are not supported with match"); + e.begin = e.match, delete e.match + } +} + +function D(e, n) { + void 0 === e.relevance && (e.relevance = 1) +} +const I = (e, n) => { + if (!e.beforeMatch) return; + if (e.starts) throw Error("beforeMatch cannot be used with starts"); + const t = Object.assign({}, e); + Object.keys(e).forEach((n => { + delete e[n] + })), e.keywords = t.keywords, e.begin = m(t.beforeMatch, g(t.begin)), e.starts = { + relevance: 0, + contains: [Object.assign(t, { + endsParent: !0 + })] + }, e.relevance = 0, delete t.beforeMatch + }, + L = ["of", "and", "for", "in", "not", "or", "if", "then", "parent", "list", "value"]; + +function B(e, n, t = "keyword") { + const a = Object.create(null); + return "string" == typeof e ? i(t, e.split(" ")) : Array.isArray(e) ? i(t, e) : Object.keys(e).forEach((t => { + Object.assign(a, B(e[t], n, t)) + })), a; + + function i(e, t) { + n && (t = t.map((e => e.toLowerCase()))), t.forEach((n => { + const t = n.split("|"); + a[t[0]] = [e, $(t[0], t[1])] + })) + } +} + +function $(e, n) { + return n ? Number(n) : (e => L.includes(e.toLowerCase()))(e) ? 0 : 1 +} +const z = {}, + F = e => { + console.error(e) + }, + U = (e, ...n) => { + console.log("WARN: " + e, ...n) + }, + j = (e, n) => { + z[`${e}/${n}`] || (console.log(`Deprecated as of ${e}. ${n}`), z[`${e}/${n}`] = !0) + }, + P = Error(); + +function K(e, n, { + key: t +}) { + let a = 0; + const i = e[t], + r = {}, + s = {}; + for (let e = 1; e <= n.length; e++) s[e + a] = i[e], r[e + a] = !0, a += _(n[e - 1]); + e[t] = s, e[t]._emit = r, e[t]._multi = !0 +} + +function H(e) { + (e => { + e.scope && "object" == typeof e.scope && null !== e.scope && (e.beginScope = e.scope, + delete e.scope) + })(e), "string" == typeof e.beginScope && (e.beginScope = { + _wrap: e.beginScope + }), "string" == typeof e.endScope && (e.endScope = { + _wrap: e.endScope + }), (e => { + if (Array.isArray(e.begin)) { + if (e.skip || e.excludeBegin || e.returnBegin) throw F( + "skip, excludeBegin, returnBegin not compatible with beginScope: {}"), + P; + if ("object" != typeof e.beginScope || null === e.beginScope) throw F("beginScope must be object"), + P; + K(e, e.begin, { + key: "beginScope" + }), e.begin = f(e.begin, { + joinWith: "" + }) + } + })(e), (e => { + if (Array.isArray(e.end)) { + if (e.skip || e.excludeEnd || e.returnEnd) throw F( + "skip, excludeEnd, returnEnd not compatible with endScope: {}"), + P; + if ("object" != typeof e.endScope || null === e.endScope) throw F("endScope must be object"), + P; + K(e, e.end, { + key: "endScope" + }), e.end = f(e.end, { + joinWith: "" + }) + } + })(e) +} + +function q(e) { + function n(n, t) { + return RegExp(d(n), "m" + (e.case_insensitive ? "i" : "") + (e.unicodeRegex ? "u" : "") + (t ? "g" : "")) + } + class t { + constructor() { + this.matchIndexes = {}, this.regexes = [], this.matchAt = 1, this.position = 0 + } + addRule(e, n) { + n.position = this.position++, this.matchIndexes[this.matchAt] = n, this.regexes.push([n, e]), + this.matchAt += _(e) + 1 + } + compile() { + 0 === this.regexes.length && (this.exec = () => null); + const e = this.regexes.map((e => e[1])); + this.matcherRe = n(f(e, { + joinWith: "|" + }), !0), this.lastIndex = 0 + } + exec(e) { + this.matcherRe.lastIndex = this.lastIndex; + const n = this.matcherRe.exec(e); + if (!n) return null; + const t = n.findIndex(((e, n) => n > 0 && void 0 !== e)), + a = this.matchIndexes[t]; + return n.splice(0, t), Object.assign(n, a) + } + } + class a { + constructor() { + this.rules = [], this.multiRegexes = [], + this.count = 0, this.lastIndex = 0, this.regexIndex = 0 + } + getMatcher(e) { + if (this.multiRegexes[e]) return this.multiRegexes[e]; + const n = new t; + return this.rules.slice(e).forEach((([e, t]) => n.addRule(e, t))), + n.compile(), this.multiRegexes[e] = n, n + } + resumingScanAtSamePosition() { + return 0 !== this.regexIndex + } + considerAll() { + this.regexIndex = 0 + } + addRule(e, n) { + this.rules.push([e, n]), "begin" === n.type && this.count++ + } + exec(e) { + const n = this.getMatcher(this.regexIndex); + n.lastIndex = this.lastIndex; + let t = n.exec(e); + if (this.resumingScanAtSamePosition()) + if (t && t.index === this.lastIndex); + else { + const n = this.getMatcher(0); + n.lastIndex = this.lastIndex + 1, t = n.exec(e) + } + return t && (this.regexIndex += t.position + 1, + this.regexIndex === this.count && this.considerAll()), t + } + } + if (e.compilerExtensions || (e.compilerExtensions = []), + e.contains && e.contains.includes("self")) throw Error( + "ERR: contains `self` is not supported at the top-level of a language. See documentation."); + return e.classNameAliases = i(e.classNameAliases || {}), + function t(r, s) { + const o = r; + if (r.isCompiled) return o; + [A, R, H, I].forEach((e => e(r, s))), e.compilerExtensions.forEach((e => e(r, s))), + r.__beforeBegin = null, [C, T, D].forEach((e => e(r, s))), r.isCompiled = !0; + let l = null; + return "object" == typeof r.keywords && r.keywords.$pattern && (r.keywords = Object.assign({}, r.keywords), + l = r.keywords.$pattern, + delete r.keywords.$pattern), l = l || /\w+/, r.keywords && (r.keywords = B(r.keywords, e.case_insensitive)), + o.keywordPatternRe = n(l, !0), + s && (r.begin || (r.begin = /\B|\b/), o.beginRe = n(o.begin), r.end || r.endsWithParent || (r.end = /\B|\b/), + r.end && (o.endRe = n(o.end)), + o.terminatorEnd = d(o.end) || "", r.endsWithParent && s.terminatorEnd && (o.terminatorEnd += (r.end ? "|" : + "") + s.terminatorEnd)), + r.illegal && (o.illegalRe = n(r.illegal)), + r.contains || (r.contains = []), r.contains = [].concat(...r.contains.map((e => (e => (e.variants && !e + .cachedVariants && (e.cachedVariants = e.variants.map((n => i(e, { + variants: null + }, n)))), e.cachedVariants ? e.cachedVariants : Z(e) ? i(e, { + starts: e.starts ? i(e.starts) : null + }) : Object.isFrozen(e) ? i(e) : e))("self" === e ? r : e)))), r.contains.forEach((e => { + t(e, o) + })), r.starts && t(r.starts, s), o.matcher = (e => { + const n = new a; + return e.contains.forEach((e => n.addRule(e.begin, { + rule: e, + type: "begin" + }))), e.terminatorEnd && n.addRule(e.terminatorEnd, { + type: "end" + }), e.illegal && n.addRule(e.illegal, { + type: "illegal" + }), n + })(o), o + }(e) +} + +function Z(e) { + return !!e && (e.endsWithParent || Z(e.starts)) +} +class G extends Error { + constructor(e, n) { + super(e), this.name = "HTMLInjectionError", this.html = n + } +} +const W = a, + Q = i, + X = Symbol("nomatch"); +var V = (n => { + const a = Object.create(null), + i = Object.create(null), + r = []; + let s = !0; + const o = "Could not find the language '{}', did you forget to load/include a language module?", + l = { + disableAutodetect: !0, + name: "Plain text", + contains: [] + }; + let d = { + ignoreUnescapedHTML: !1, + throwUnescapedHTML: !1, + noHighlightRe: /^(no-?highlight)$/i, + languageDetectRe: /\blang(?:uage)?-([\w-]+)\b/i, + classPrefix: "hljs-", + cssSelector: "pre code", + languages: null, + __emitter: c + }; + + function _(e) { + return d.noHighlightRe.test(e) + } + + function h(e, n, t) { + let a = "", + i = ""; + "object" == typeof n ? (a = e, + t = n.ignoreIllegals, i = n.language) : (j("10.7.0", "highlight(lang, code, ...args) has been deprecated."), + j("10.7.0", + "Please use highlight(code, options) instead.\nhttps://github.com/highlightjs/highlight.js/issues/2277"), + i = e, a = n), void 0 === t && (t = !0); + const r = { + code: a, + language: i + }; + x("before:highlight", r); + const s = r.result ? r.result : f(r.language, r.code, t); + return s.code = r.code, x("after:highlight", s), s + } + + function f(e, n, i, r) { + const l = Object.create(null); + + function c() { + if (!k.keywords) return void M.addText(S); + let e = 0; + k.keywordPatternRe.lastIndex = 0; + let n = k.keywordPatternRe.exec(S), + t = ""; + for (; n;) { + t += S.substring(e, n.index); + const i = w.case_insensitive ? n[0].toLowerCase() : n[0], + r = (a = i, k.keywords[a]); + if (r) { + const [e, a] = r + ; + if (M.addText(t), t = "", l[i] = (l[i] || 0) + 1, l[i] <= 7 && (A += a), e.startsWith("_")) t += n[0]; + else { + const t = w.classNameAliases[e] || e; + M.addKeyword(n[0], t) + } + } else t += n[0]; + e = k.keywordPatternRe.lastIndex, n = k.keywordPatternRe.exec(S) + } + var a; + t += S.substring(e), M.addText(t) + } + + function g() { + null != k.subLanguage ? (() => { + if ("" === S) return; + let e = null; + if ("string" == typeof k.subLanguage) { + if (!a[k.subLanguage]) return void M.addText(S); + e = f(k.subLanguage, S, !0, x[k.subLanguage]), x[k.subLanguage] = e._top + } else e = E(S, k.subLanguage.length ? k.subLanguage : null); + k.relevance > 0 && (A += e.relevance), M.addSublanguage(e._emitter, e.language) + })() : c(), S = "" + } + + function u(e, n) { + let t = 1; + const a = n.length - 1; + for (; t <= a;) { + if (!e._emit[t]) { + t++; + continue + } + const a = w.classNameAliases[e[t]] || e[t], + i = n[t]; + a ? M.addKeyword(i, a) : (S = i, c(), S = ""), t++ + } + } + + function b(e, n) { + return e.scope && "string" == typeof e.scope && M.openNode(w.classNameAliases[e.scope] || e.scope), + e.beginScope && (e.beginScope._wrap ? (M.addKeyword(S, w.classNameAliases[e.beginScope._wrap] || e + .beginScope._wrap), + S = "") : e.beginScope._multi && (u(e.beginScope, n), S = "")), k = Object.create(e, { + parent: { + value: k + } + }), k + } + + function m(e, n, a) { + let i = ((e, n) => { + const t = e && e.exec(n); + return t && 0 === t.index + })(e.endRe, a); + if (i) { + if (e["on:end"]) { + const a = new t(e); + e["on:end"](n, a), a.isMatchIgnored && (i = !1) + } + if (i) { + for (; e.endsParent && e.parent;) e = e.parent; + return e + } + } + if (e.endsWithParent) return m(e.parent, n, a) + } + + function p(e) { + return 0 === k.matcher.regexIndex ? (S += e[0], 1) : (R = !0, 0) + } + + function _(e) { + const t = e[0], + a = n.substring(e.index), + i = m(k, e, a); + if (!i) return X; + const r = k; + k.endScope && k.endScope._wrap ? (g(), + M.addKeyword(t, k.endScope._wrap)) : k.endScope && k.endScope._multi ? (g(), + u(k.endScope, e)) : r.skip ? S += t : (r.returnEnd || r.excludeEnd || (S += t), + g(), r.excludeEnd && (S = t)); + do { + k.scope && M.closeNode(), k.skip || k.subLanguage || (A += k.relevance), k = k.parent + } while (k !== i.parent); + return i.starts && b(i.starts, e), r.returnEnd ? 0 : t.length + } + let h = {}; + + function y(a, r) { + const o = r && r[0]; + if (S += a, null == o) return g(), 0; + if ("begin" === h.type && "end" === r.type && h.index === r.index && "" === o) { + if (S += n.slice(r.index, r.index + 1), !s) { + const n = Error(`0 width match regex (${e})`); + throw n.languageName = e, n.badRule = h.rule, n + } + return 1 + } + if (h = r, "begin" === r.type) return (e => { + const n = e[0], + a = e.rule, + i = new t(a), + r = [a.__beforeBegin, a["on:begin"]]; + for (const t of r) + if (t && (t(e, i), i.isMatchIgnored)) return p(n); + return a.skip ? S += n : (a.excludeBegin && (S += n), + g(), a.returnBegin || a.excludeBegin || (S = n)), b(a, e), a.returnBegin ? 0 : n.length + })(r); + if ("illegal" === r.type && !i) { + const e = Error('Illegal lexeme "' + o + '" for mode "' + (k.scope || "") + '"'); + throw e.mode = k, e + } + if ("end" === r.type) { + const e = _(r); + if (e !== X) return e + } + if ("illegal" === r.type && "" === o) return 1; + if (T > 1e5 && T > 3 * r.index) throw Error("potential infinite loop, way more iterations than matches"); + return S += o, o.length + } + const w = v(e); + if (!w) throw F(o.replace("{}", e)), Error('Unknown language: "' + e + '"'); + const N = q(w); + let O = "", + k = r || N; + const x = {}, + M = new d.__emitter(d); + (() => { + const e = []; + for (let n = k; n !== w; n = n.parent) n.scope && e.unshift(n.scope); + e.forEach((e => M.openNode(e))) + })(); + let S = "", + A = 0, + C = 0, + T = 0, + R = !1; + try { + for (k.matcher.considerAll();;) { + T++, R ? R = !1 : k.matcher.considerAll(), k.matcher.lastIndex = C; + const e = k.matcher.exec(n); + if (!e) break; + const t = y(n.substring(C, e.index), e); + C = e.index + t + } + return y(n.substring(C)), M.closeAllNodes(), M.finalize(), O = M.toHTML(), { + language: e, + value: O, + relevance: A, + illegal: !1, + _emitter: M, + _top: k + } + } catch (t) { + if (t.message && t.message.includes("Illegal")) return { + language: e, + value: W(n), + illegal: !0, + relevance: 0, + _illegalBy: { + message: t.message, + index: C, + context: n.slice(C - 100, C + 100), + mode: t.mode, + resultSoFar: O + }, + _emitter: M + }; + if (s) return { + language: e, + value: W(n), + illegal: !1, + relevance: 0, + errorRaised: t, + _emitter: M, + _top: k + }; + throw t + } + } + + function E(e, n) { + n = n || d.languages || Object.keys(a); + const t = (e => { + const n = { + value: W(e), + illegal: !1, + relevance: 0, + _top: l, + _emitter: new d.__emitter(d) + }; + return n._emitter.addText(e), n + })(e), + i = n.filter(v).filter(k).map((n => f(n, e, !1))); + i.unshift(t); + const r = i.sort(((e, n) => { + if (e.relevance !== n.relevance) return n.relevance - e.relevance; + if (e.language && n.language) { + if (v(e.language).supersetOf === n.language) return 1; + if (v(n.language).supersetOf === e.language) return -1 + } + return 0 + })), + [s, o] = r, + c = s; + return c.secondBest = o, c + } + + function y(e) { + let n = null; + const t = (e => { + let n = e.className + " "; + n += e.parentNode ? e.parentNode.className : ""; + const t = d.languageDetectRe.exec(n); + if (t) { + const n = v(t[1]); + return n || (U(o.replace("{}", t[1])), + U("Falling back to no-highlight mode for this block.", e)), n ? t[1] : "no-highlight" + } + return n.split(/\s+/).find((e => _(e) || v(e))) + })(e); + if (_(t)) return; + if (x("before:highlightElement", { + el: e, + language: t + }), e.children.length > 0 && (d.ignoreUnescapedHTML || (console.warn( + "One of your code blocks includes unescaped HTML. This is a potentially serious security risk."), + console.warn("https://github.com/highlightjs/highlight.js/wiki/security"), + console.warn("The element with unescaped HTML:"), + console.warn(e)), d.throwUnescapedHTML)) throw new G("One of your code blocks includes unescaped HTML.", e + .innerHTML); + n = e; + const a = n.textContent, + r = t ? h(a, { + language: t, + ignoreIllegals: !0 + }) : E(a); + e.innerHTML = r.value, ((e, n, t) => { + const a = n && i[n] || t; + e.classList.add("hljs"), e.classList.add("language-" + a) + })(e, t, r.language), e.result = { + language: r.language, + re: r.relevance, + relevance: r.relevance + }, r.secondBest && (e.secondBest = { + language: r.secondBest.language, + relevance: r.secondBest.relevance + }), x("after:highlightElement", { + el: e, + result: r, + text: a + }) + } + let w = !1; + + function N() { + "loading" !== document.readyState ? document.querySelectorAll(d.cssSelector).forEach(y) : w = !0 + } + + function v(e) { + return e = (e || "").toLowerCase(), a[e] || a[i[e]] + } + + function O(e, { + languageName: n + }) { + "string" == typeof e && (e = [e]), e.forEach((e => { + i[e.toLowerCase()] = n + })) + } + + function k(e) { + const n = v(e); + return n && !n.disableAutodetect + } + + function x(e, n) { + const t = e; + r.forEach((e => { + e[t] && e[t](n) + })) + } + "undefined" != typeof window && window.addEventListener && window.addEventListener("DOMContentLoaded", (() => { + w && N() + }), !1), Object.assign(n, { + highlight: h, + highlightAuto: E, + highlightAll: N, + highlightElement: y, + highlightBlock: e => (j("10.7.0", "highlightBlock will be removed entirely in v12.0"), + j("10.7.0", "Please use highlightElement now."), y(e)), + configure: e => { + d = Q(d, e) + }, + initHighlighting: () => { + N(), j("10.6.0", "initHighlighting() deprecated. Use highlightAll() now.") + }, + initHighlightingOnLoad: () => { + N(), j("10.6.0", "initHighlightingOnLoad() deprecated. Use highlightAll() now.") + }, + registerLanguage: (e, t) => { + let i = null; + try { + i = t(n) + } catch (n) { + if (F("Language definition for '{}' could not be registered.".replace("{}", e)), + !s) throw n; + F(n), i = l + } + i.name || (i.name = e), a[e] = i, i.rawDefinition = t.bind(null, n), i.aliases && O(i.aliases, { + languageName: e + }) + }, + unregisterLanguage: e => { + delete a[e]; + for (const n of Object.keys(i)) i[n] === e && delete i[n] + }, + listLanguages: () => Object.keys(a), + getLanguage: v, + registerAliases: O, + autoDetection: k, + inherit: Q, + addPlugin: e => { + (e => { + e["before:highlightBlock"] && !e["before:highlightElement"] && (e["before:highlightElement"] = + n => { + e["before:highlightBlock"](Object.assign({ + block: n.el + }, n)) + }), e["after:highlightBlock"] && !e["after:highlightElement"] && (e["after:highlightElement"] = + n => { + e["after:highlightBlock"](Object.assign({ + block: n.el + }, n)) + }) + })(e), r.push(e) + } + }), n.debugMode = () => { + s = !1 + }, n.safeMode = () => { + s = !0 + }, n.versionString = "11.7.0", n.regex = { + concat: m, + lookahead: g, + either: p, + optional: b, + anyNumberOfTimes: u + }; + for (const n in M) "object" == typeof M[n] && e.exports(M[n]); + return Object.assign(n, M), n +})({}); +const J = e => ({ + IMPORTANT: { + scope: "meta", + begin: "!important" + }, + BLOCK_COMMENT: e.C_BLOCK_COMMENT_MODE, + HEXCOLOR: { + scope: "number", + begin: /#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/ + }, + FUNCTION_DISPATCH: { + className: "built_in", + begin: /[\w-]+(?=\()/ + }, + ATTRIBUTE_SELECTOR_MODE: { + scope: "selector-attr", + begin: /\[/, + end: /\]/, + illegal: "$", + contains: [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE] + }, + CSS_NUMBER_MODE: { + scope: "number", + begin: e.NUMBER_RE + + "(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?", + relevance: 0 + }, + CSS_VARIABLE: { + className: "attr", + begin: /--[A-Za-z][A-Za-z0-9_-]*/ + } + }), + Y = ["a", "abbr", "address", "article", "aside", "audio", "b", "blockquote", "body", "button", "canvas", "caption", + "cite", "code", "dd", "del", "details", "dfn", "div", "dl", "dt", "em", "fieldset", "figcaption", "figure", + "footer", "form", "h1", "h2", "h3", "h4", "h5", "h6", "header", "hgroup", "html", "i", "iframe", "img", "input", + "ins", "kbd", "label", "legend", "li", "main", "mark", "menu", "nav", "object", "ol", "p", "q", "quote", "samp", + "section", "span", "strong", "summary", "sup", "table", "tbody", "td", "textarea", "tfoot", "th", "thead", "time", + "tr", "ul", "var", "video" + ], + ee = ["any-hover", "any-pointer", "aspect-ratio", "color", "color-gamut", "color-index", "device-aspect-ratio", + "device-height", "device-width", "display-mode", "forced-colors", "grid", "height", "hover", "inverted-colors", + "monochrome", "orientation", "overflow-block", "overflow-inline", "pointer", "prefers-color-scheme", + "prefers-contrast", "prefers-reduced-motion", "prefers-reduced-transparency", "resolution", "scan", "scripting", + "update", "width", "min-width", "max-width", "min-height", "max-height" + ], + ne = ["active", "any-link", "blank", "checked", "current", "default", "defined", "dir", "disabled", "drop", "empty", + "enabled", "first", "first-child", "first-of-type", "fullscreen", "future", "focus", "focus-visible", + "focus-within", "has", "host", "host-context", "hover", "indeterminate", "in-range", "invalid", "is", "lang", + "last-child", "last-of-type", "left", "link", "local-link", "not", "nth-child", "nth-col", "nth-last-child", + "nth-last-col", "nth-last-of-type", "nth-of-type", "only-child", "only-of-type", "optional", "out-of-range", "past", + "placeholder-shown", "read-only", "read-write", "required", "right", "root", "scope", "target", "target-within", + "user-invalid", "valid", "visited", "where" + ], + te = ["after", "backdrop", "before", "cue", "cue-region", "first-letter", "first-line", "grammar-error", "marker", + "part", "placeholder", "selection", "slotted", "spelling-error" + ], + ae = ["align-content", "align-items", "align-self", "all", "animation", "animation-delay", "animation-direction", + "animation-duration", "animation-fill-mode", "animation-iteration-count", "animation-name", "animation-play-state", + "animation-timing-function", "backface-visibility", "background", "background-attachment", "background-blend-mode", + "background-clip", "background-color", "background-image", "background-origin", "background-position", + "background-repeat", "background-size", "block-size", "border", "border-block", "border-block-color", + "border-block-end", "border-block-end-color", "border-block-end-style", "border-block-end-width", + "border-block-start", "border-block-start-color", "border-block-start-style", "border-block-start-width", + "border-block-style", "border-block-width", "border-bottom", "border-bottom-color", "border-bottom-left-radius", + "border-bottom-right-radius", "border-bottom-style", "border-bottom-width", "border-collapse", "border-color", + "border-image", "border-image-outset", "border-image-repeat", "border-image-slice", "border-image-source", + "border-image-width", "border-inline", "border-inline-color", "border-inline-end", "border-inline-end-color", + "border-inline-end-style", "border-inline-end-width", "border-inline-start", "border-inline-start-color", + "border-inline-start-style", "border-inline-start-width", "border-inline-style", "border-inline-width", + "border-left", "border-left-color", "border-left-style", "border-left-width", "border-radius", "border-right", + "border-right-color", "border-right-style", "border-right-width", "border-spacing", "border-style", "border-top", + "border-top-color", "border-top-left-radius", "border-top-right-radius", "border-top-style", "border-top-width", + "border-width", "bottom", "box-decoration-break", "box-shadow", "box-sizing", "break-after", "break-before", + "break-inside", "caption-side", "caret-color", "clear", "clip", "clip-path", "clip-rule", "color", "column-count", + "column-fill", "column-gap", "column-rule", "column-rule-color", "column-rule-style", "column-rule-width", + "column-span", "column-width", "columns", "contain", "content", "content-visibility", "counter-increment", + "counter-reset", "cue", "cue-after", "cue-before", "cursor", "direction", "display", "empty-cells", "filter", + "flex", "flex-basis", "flex-direction", "flex-flow", "flex-grow", "flex-shrink", "flex-wrap", "float", "flow", + "font", "font-display", "font-family", "font-feature-settings", "font-kerning", "font-language-override", + "font-size", "font-size-adjust", "font-smoothing", "font-stretch", "font-style", "font-synthesis", "font-variant", + "font-variant-caps", "font-variant-east-asian", "font-variant-ligatures", "font-variant-numeric", + "font-variant-position", "font-variation-settings", "font-weight", "gap", "glyph-orientation-vertical", "grid", + "grid-area", "grid-auto-columns", "grid-auto-flow", "grid-auto-rows", "grid-column", "grid-column-end", + "grid-column-start", "grid-gap", "grid-row", "grid-row-end", "grid-row-start", "grid-template", + "grid-template-areas", "grid-template-columns", "grid-template-rows", "hanging-punctuation", "height", "hyphens", + "icon", "image-orientation", "image-rendering", "image-resolution", "ime-mode", "inline-size", "isolation", + "justify-content", "left", "letter-spacing", "line-break", "line-height", "list-style", "list-style-image", + "list-style-position", "list-style-type", "margin", "margin-block", "margin-block-end", "margin-block-start", + "margin-bottom", "margin-inline", "margin-inline-end", "margin-inline-start", "margin-left", "margin-right", + "margin-top", "marks", "mask", "mask-border", "mask-border-mode", "mask-border-outset", "mask-border-repeat", + "mask-border-slice", "mask-border-source", "mask-border-width", "mask-clip", "mask-composite", "mask-image", + "mask-mode", "mask-origin", "mask-position", "mask-repeat", "mask-size", "mask-type", "max-block-size", + "max-height", "max-inline-size", "max-width", "min-block-size", "min-height", "min-inline-size", "min-width", + "mix-blend-mode", "nav-down", "nav-index", "nav-left", "nav-right", "nav-up", "none", "normal", "object-fit", + "object-position", "opacity", "order", "orphans", "outline", "outline-color", "outline-offset", "outline-style", + "outline-width", "overflow", "overflow-wrap", "overflow-x", "overflow-y", "padding", "padding-block", + "padding-block-end", "padding-block-start", "padding-bottom", "padding-inline", "padding-inline-end", + "padding-inline-start", "padding-left", "padding-right", "padding-top", "page-break-after", "page-break-before", + "page-break-inside", "pause", "pause-after", "pause-before", "perspective", "perspective-origin", "pointer-events", + "position", "quotes", "resize", "rest", "rest-after", "rest-before", "right", "row-gap", "scroll-margin", + "scroll-margin-block", "scroll-margin-block-end", "scroll-margin-block-start", "scroll-margin-bottom", + "scroll-margin-inline", "scroll-margin-inline-end", "scroll-margin-inline-start", "scroll-margin-left", + "scroll-margin-right", "scroll-margin-top", "scroll-padding", "scroll-padding-block", "scroll-padding-block-end", + "scroll-padding-block-start", "scroll-padding-bottom", "scroll-padding-inline", "scroll-padding-inline-end", + "scroll-padding-inline-start", "scroll-padding-left", "scroll-padding-right", "scroll-padding-top", + "scroll-snap-align", "scroll-snap-stop", "scroll-snap-type", "scrollbar-color", "scrollbar-gutter", + "scrollbar-width", "shape-image-threshold", "shape-margin", "shape-outside", "speak", "speak-as", "src", "tab-size", + "table-layout", "text-align", "text-align-all", "text-align-last", "text-combine-upright", "text-decoration", + "text-decoration-color", "text-decoration-line", "text-decoration-style", "text-emphasis", "text-emphasis-color", + "text-emphasis-position", "text-emphasis-style", "text-indent", "text-justify", "text-orientation", "text-overflow", + "text-rendering", "text-shadow", "text-transform", "text-underline-position", "top", "transform", "transform-box", + "transform-origin", "transform-style", "transition", "transition-delay", "transition-duration", + "transition-property", "transition-timing-function", "unicode-bidi", "vertical-align", "visibility", + "voice-balance", "voice-duration", "voice-family", "voice-pitch", "voice-range", "voice-rate", "voice-stress", + "voice-volume", "white-space", "widows", "width", "will-change", "word-break", "word-spacing", "word-wrap", + "writing-mode", "z-index" + ].reverse(), + ie = ne.concat(te); +var re = "\\.([0-9](_*[0-9])*)", + se = "[0-9a-fA-F](_*[0-9a-fA-F])*", + oe = { + className: "number", + variants: [{ + begin: `(\\b([0-9](_*[0-9])*)((${re})|\\.)?|(${re}))[eE][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` + }, { + begin: `\\b([0-9](_*[0-9])*)((${re})[fFdD]?\\b|\\.([fFdD]\\b)?)` + }, { + begin: `(${re})[fFdD]?\\b` + }, { + begin: "\\b([0-9](_*[0-9])*)[fFdD]\\b" + }, { + begin: `\\b0[xX]((${se})\\.?|(${se})?\\.(${se}))[pP][+-]?([0-9](_*[0-9])*)[fFdD]?\\b` + }, { + begin: "\\b(0|[1-9](_*[0-9])*)[lL]?\\b" + }, { + begin: `\\b0[xX](${se})[lL]?\\b` + }, { + begin: "\\b0(_*[0-7])*[lL]?\\b" + }, { + begin: "\\b0[bB][01](_*[01])*[lL]?\\b" + }], + relevance: 0 + }; + +function le(e, n, t) { + return -1 === t ? "" : e.replace(n, (a => le(e, n, t - 1))) +} +const ce = "[A-Za-z$_][0-9A-Za-z$_]*", + de = ["as", "in", "of", "if", "for", "while", "finally", "var", "new", "function", "do", "return", "void", "else", + "break", "catch", "instanceof", "with", "throw", "case", "default", "try", "switch", "continue", "typeof", "delete", + "let", "yield", "const", "class", "debugger", "async", "await", "static", "import", "from", "export", "extends" + ], + ge = ["true", "false", "null", "undefined", "NaN", "Infinity"], + ue = ["Object", "Function", "Boolean", "Symbol", "Math", "Date", "Number", "BigInt", "String", "RegExp", "Array", + "Float32Array", "Float64Array", "Int8Array", "Uint8Array", "Uint8ClampedArray", "Int16Array", "Int32Array", + "Uint16Array", "Uint32Array", "BigInt64Array", "BigUint64Array", "Set", "Map", "WeakSet", "WeakMap", "ArrayBuffer", + "SharedArrayBuffer", "Atomics", "DataView", "JSON", "Promise", "Generator", "GeneratorFunction", "AsyncFunction", + "Reflect", "Proxy", "Intl", "WebAssembly" + ], + be = ["Error", "EvalError", "InternalError", "RangeError", "ReferenceError", "SyntaxError", "TypeError", "URIError"], + me = ["setInterval", "setTimeout", "clearInterval", "clearTimeout", "require", "exports", "eval", "isFinite", "isNaN", + "parseFloat", "parseInt", "decodeURI", "decodeURIComponent", "encodeURI", "encodeURIComponent", "escape", "unescape" + ], + pe = ["arguments", "this", "super", "console", "window", "document", "localStorage", "module", "global"], + _e = [].concat(me, ue, be); + +function he(e) { + const n = e.regex, + t = ce, + a = { + begin: /<[A-Za-z0-9\\._:-]+/, + end: /\/[A-Za-z0-9\\._:-]+>|\/>/, + isTrulyOpeningTag: (e, n) => { + const t = e[0].length + e.index, + a = e.input[t]; + if ("<" === a || "," === a) return void n.ignoreMatch(); + let i; + ">" === a && (((e, { + after: n + }) => { + const t = "", + k = { + match: [/const|var|let/, /\s+/, t, /\s*/, /=\s*/, /(async\s*)?/, n.lookahead(O)], + keywords: "async", + className: { + 1: "keyword", + 3: "title.function" + }, + contains: [_] + }; + return { + name: "Javascript", + aliases: ["js", "jsx", "mjs", "cjs"], + keywords: i, + exports: { + PARAMS_CONTAINS: p, + CLASS_REFERENCE: f + }, + illegal: /#(?![$_A-z])/, + contains: [e.SHEBANG({ + label: "shebang", + binary: "node", + relevance: 5 + }), { + label: "use_strict", + className: "meta", + relevance: 10, + begin: /^\s*['"]use (strict|asm)['"]/ + }, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, c, d, g, u, { + match: /\$\d+/ + }, o, f, { + className: "attr", + begin: t + n.lookahead(":"), + relevance: 0 + }, k, { + begin: "(" + e.RE_STARTERS_RE + "|\\b(case|return|throw)\\b)\\s*", + keywords: "return throw case", + relevance: 0, + contains: [u, e.REGEXP_MODE, { + className: "function", + begin: O, + returnBegin: !0, + end: "\\s*=>", + contains: [{ + className: "params", + variants: [{ + begin: e.UNDERSCORE_IDENT_RE, + relevance: 0 + }, { + className: null, + begin: /\(\s*\)/, + skip: !0 + }, { + begin: /\(/, + end: /\)/, + excludeBegin: !0, + excludeEnd: !0, + keywords: i, + contains: p + }] + }] + }, { + begin: /,/, + relevance: 0 + }, { + match: /\s+/, + relevance: 0 + }, { + variants: [{ + begin: "<>", + end: "" + }, { + match: /<[A-Za-z0-9\\._:-]+\s*\/>/ + }, { + begin: a.begin, + "on:begin": a.isTrulyOpeningTag, + end: a.end + }], + subLanguage: "xml", + contains: [{ + begin: a.begin, + end: a.end, + skip: !0, + contains: ["self"] + }] + }] + }, E, { + beginKeywords: "while if switch catch for" + }, { + begin: "\\b(?!function)" + e.UNDERSCORE_IDENT_RE + + "\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{", + returnBegin: !0, + label: "func.def", + contains: [_, e.inherit(e.TITLE_MODE, { + begin: t, + className: "title.function" + })] + }, { + match: /\.\.\./, + relevance: 0 + }, N, { + match: "\\$" + t, + relevance: 0 + }, { + match: [/\bconstructor(?=\s*\()/], + className: { + 1: "title.function" + }, + contains: [_] + }, y, { + relevance: 0, + match: /\b[A-Z][A-Z_0-9]+\b/, + className: "variable.constant" + }, h, v, { + match: /\$[(.]/ + }] + } +} +const fe = e => m(/\b/, e, /\w$/.test(e) ? /\b/ : /\B/), + Ee = ["Protocol", "Type"].map(fe), + ye = ["init", "self"].map(fe), + we = ["Any", "Self"], + Ne = ["actor", "any", "associatedtype", "async", "await", /as\?/, /as!/, "as", "break", "case", "catch", "class", + "continue", "convenience", "default", "defer", "deinit", "didSet", "distributed", "do", "dynamic", "else", "enum", + "extension", "fallthrough", /fileprivate\(set\)/, "fileprivate", "final", "for", "func", "get", "guard", "if", + "import", "indirect", "infix", /init\?/, /init!/, "inout", /internal\(set\)/, "internal", "in", "is", "isolated", + "nonisolated", "lazy", "let", "mutating", "nonmutating", /open\(set\)/, "open", "operator", "optional", "override", + "postfix", "precedencegroup", "prefix", /private\(set\)/, "private", "protocol", /public\(set\)/, "public", + "repeat", "required", "rethrows", "return", "set", "some", "static", "struct", "subscript", "super", "switch", + "throws", "throw", /try\?/, /try!/, "try", "typealias", /unowned\(safe\)/, /unowned\(unsafe\)/, "unowned", "var", + "weak", "where", "while", "willSet" + ], + ve = ["false", "nil", "true"], + Oe = ["assignment", "associativity", "higherThan", "left", "lowerThan", "none", "right"], + ke = ["#colorLiteral", "#column", "#dsohandle", "#else", "#elseif", "#endif", "#error", "#file", "#fileID", + "#fileLiteral", "#filePath", "#function", "#if", "#imageLiteral", "#keyPath", "#line", "#selector", + "#sourceLocation", "#warn_unqualified_access", "#warning" + ], + xe = ["abs", "all", "any", "assert", "assertionFailure", "debugPrint", "dump", "fatalError", "getVaList", + "isKnownUniquelyReferenced", "max", "min", "numericCast", "pointwiseMax", "pointwiseMin", "precondition", + "preconditionFailure", "print", "readLine", "repeatElement", "sequence", "stride", "swap", + "swift_unboxFromSwiftValueWithType", "transcode", "type", "unsafeBitCast", "unsafeDowncast", "withExtendedLifetime", + "withUnsafeMutablePointer", "withUnsafePointer", "withVaList", "withoutActuallyEscaping", "zip" + ], + Me = p(/[/=\-+!*%<>&|^~?]/, /[\u00A1-\u00A7]/, /[\u00A9\u00AB]/, /[\u00AC\u00AE]/, /[\u00B0\u00B1]/, + /[\u00B6\u00BB\u00BF\u00D7\u00F7]/, /[\u2016-\u2017]/, /[\u2020-\u2027]/, /[\u2030-\u203E]/, /[\u2041-\u2053]/, + /[\u2055-\u205E]/, /[\u2190-\u23FF]/, /[\u2500-\u2775]/, /[\u2794-\u2BFF]/, /[\u2E00-\u2E7F]/, /[\u3001-\u3003]/, + /[\u3008-\u3020]/, /[\u3030]/), + Se = p(Me, /[\u0300-\u036F]/, /[\u1DC0-\u1DFF]/, /[\u20D0-\u20FF]/, /[\uFE00-\uFE0F]/, /[\uFE20-\uFE2F]/), + Ae = m(Me, Se, "*"), + Ce = p(/[a-zA-Z_]/, /[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/, + /[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/, /[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/, + /[\u1E00-\u1FFF]/, /[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/, + /[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/, /[\u2C00-\u2DFF\u2E80-\u2FFF]/, + /[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/, /[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/, + /[\uFE47-\uFEFE\uFF00-\uFFFD]/), + Te = p(Ce, /\d/, /[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/), + Re = m(Ce, Te, "*"), + De = m(/[A-Z]/, Te, "*"), + Ie = ["autoclosure", m(/convention\(/, p("swift", "block", "c"), /\)/), "discardableResult", "dynamicCallable", + "dynamicMemberLookup", "escaping", "frozen", "GKInspectable", "IBAction", "IBDesignable", "IBInspectable", + "IBOutlet", "IBSegueAction", "inlinable", "main", "nonobjc", "NSApplicationMain", "NSCopying", "NSManaged", m( + /objc\(/, Re, /\)/), "objc", "objcMembers", "propertyWrapper", "requires_stored_property_inits", "resultBuilder", + "testable", "UIApplicationMain", "unknown", "usableFromInline" + ], + Le = ["iOS", "iOSApplicationExtension", "macOS", "macOSApplicationExtension", "macCatalyst", + "macCatalystApplicationExtension", "watchOS", "watchOSApplicationExtension", "tvOS", "tvOSApplicationExtension", + "swift" + ]; +var Be = Object.freeze({ + __proto__: null, + grmr_bash: e => { + const n = e.regex, + t = {}, + a = { + begin: /\$\{/, + end: /\}/, + contains: ["self", { + begin: /:-/, + contains: [t] + }] + }; + Object.assign(t, { + className: "variable", + variants: [{ + begin: n.concat(/\$[\w\d#@][\w\d_]*/, "(?![\\w\\d])(?![$])") + }, a] + }); + const i = { + className: "subst", + begin: /\$\(/, + end: /\)/, + contains: [e.BACKSLASH_ESCAPE] + }, + r = { + begin: /<<-?\s*(?=\w+)/, + starts: { + contains: [e.END_SAME_AS_BEGIN({ + begin: /(\w+)/, + end: /(\w+)/, + className: "string" + })] + } + }, + s = { + className: "string", + begin: /"/, + end: /"/, + contains: [e.BACKSLASH_ESCAPE, t, i] + }; + i.contains.push(s); + const o = { + begin: /\$?\(\(/, + end: /\)\)/, + contains: [{ + begin: /\d+#[0-9a-f]+/, + className: "number" + }, e.NUMBER_MODE, t] + }, + l = e.SHEBANG({ + binary: "(fish|bash|zsh|sh|csh|ksh|tcsh|dash|scsh)", + relevance: 10 + }), + c = { + className: "function", + begin: /\w[\w\d_]*\s*\(\s*\)\s*\{/, + returnBegin: !0, + contains: [e.inherit(e.TITLE_MODE, { + begin: /\w[\w\d_]*/ + })], + relevance: 0 + }; + return { + name: "Bash", + aliases: ["sh"], + keywords: { + $pattern: /\b[a-z][a-z0-9._-]+\b/, + keyword: ["if", "then", "else", "elif", "fi", "for", "while", "in", "do", "done", "case", "esac", + "function" + ], + literal: ["true", "false"], + built_in: ["break", "cd", "continue", "eval", "exec", "exit", "export", "getopts", "hash", "pwd", + "readonly", "return", "shift", "test", "times", "trap", "umask", "unset", "alias", "bind", "builtin", + "caller", "command", "declare", "echo", "enable", "help", "let", "local", "logout", "mapfile", + "printf", "read", "readarray", "source", "type", "typeset", "ulimit", "unalias", "set", "shopt", + "autoload", "bg", "bindkey", "bye", "cap", "chdir", "clone", "comparguments", "compcall", "compctl", + "compdescribe", "compfiles", "compgroups", "compquote", "comptags", "comptry", "compvalues", "dirs", + "disable", "disown", "echotc", "echoti", "emulate", "fc", "fg", "float", "functions", "getcap", + "getln", "history", "integer", "jobs", "kill", "limit", "log", "noglob", "popd", "print", "pushd", + "pushln", "rehash", "sched", "setcap", "setopt", "stat", "suspend", "ttyctl", "unfunction", "unhash", + "unlimit", "unsetopt", "vared", "wait", "whence", "where", "which", "zcompile", "zformat", "zftp", + "zle", "zmodload", "zparseopts", "zprof", "zpty", "zregexparse", "zsocket", "zstyle", "ztcp", "chcon", + "chgrp", "chown", "chmod", "cp", "dd", "df", "dir", "dircolors", "ln", "ls", "mkdir", "mkfifo", + "mknod", "mktemp", "mv", "realpath", "rm", "rmdir", "shred", "sync", "touch", "truncate", "vdir", + "b2sum", "base32", "base64", "cat", "cksum", "comm", "csplit", "cut", "expand", "fmt", "fold", "head", + "join", "md5sum", "nl", "numfmt", "od", "paste", "ptx", "pr", "sha1sum", "sha224sum", "sha256sum", + "sha384sum", "sha512sum", "shuf", "sort", "split", "sum", "tac", "tail", "tr", "tsort", "unexpand", + "uniq", "wc", "arch", "basename", "chroot", "date", "dirname", "du", "echo", "env", "expr", "factor", + "groups", "hostid", "id", "link", "logname", "nice", "nohup", "nproc", "pathchk", "pinky", "printenv", + "printf", "pwd", "readlink", "runcon", "seq", "sleep", "stat", "stdbuf", "stty", "tee", "test", + "timeout", "tty", "uname", "unlink", "uptime", "users", "who", "whoami", "yes" + ] + }, + contains: [l, e.SHEBANG(), c, o, e.HASH_COMMENT_MODE, r, { + match: /(\/[a-z._-]+)+/ + }, s, { + className: "", + begin: /\\"/ + }, { + className: "string", + begin: /'/, + end: /'/ + }, t] + } + }, + grmr_c: e => { + const n = e.regex, + t = e.COMMENT("//", "$", { + contains: [{ + begin: /\\\n/ + }] + }), + a = "[a-zA-Z_]\\w*::", + i = "(decltype\\(auto\\)|" + n.optional(a) + "[a-zA-Z_]\\w*" + n.optional("<[^<>]+>") + ")", + r = { + className: "type", + variants: [{ + begin: "\\b[a-z\\d_]*_t\\b" + }, { + match: /\batomic_[a-z]{3,6}\b/ + }] + }, + s = { + className: "string", + variants: [{ + begin: '(u8?|U|L)?"', + end: '"', + illegal: "\\n", + contains: [e.BACKSLASH_ESCAPE] + }, { + begin: "(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", + end: "'", + illegal: "." + }, e.END_SAME_AS_BEGIN({ + begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/, + end: /\)([^()\\ ]{0,16})"/ + })] + }, + o = { + className: "number", + variants: [{ + begin: "\\b(0b[01']+)" + }, { + begin: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" + }, { + begin: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" + }], + relevance: 0 + }, + l = { + className: "meta", + begin: /#\s*[a-z]+\b/, + end: /$/, + keywords: { + keyword: "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" + }, + contains: [{ + begin: /\\\n/, + relevance: 0 + }, e.inherit(s, { + className: "string" + }), { + className: "string", + begin: /<.*?>/ + }, t, e.C_BLOCK_COMMENT_MODE] + }, + c = { + className: "title", + begin: n.optional(a) + e.IDENT_RE, + relevance: 0 + }, + d = n.optional(a) + e.IDENT_RE + "\\s*\\(", + g = { + keyword: ["asm", "auto", "break", "case", "continue", "default", "do", "else", "enum", "extern", "for", + "fortran", "goto", "if", "inline", "register", "restrict", "return", "sizeof", "struct", "switch", + "typedef", "union", "volatile", "while", "_Alignas", "_Alignof", "_Atomic", "_Generic", "_Noreturn", + "_Static_assert", "_Thread_local", "alignas", "alignof", "noreturn", "static_assert", "thread_local", + "_Pragma" + ], + type: ["float", "double", "signed", "unsigned", "int", "short", "long", "char", "void", "_Bool", + "_Complex", "_Imaginary", "_Decimal32", "_Decimal64", "_Decimal128", "const", "static", "complex", + "bool", "imaginary" + ], + literal: "true false NULL", + built_in: "std string wstring cin cout cerr clog stdin stdout stderr stringstream istringstream ostringstream auto_ptr deque list queue stack vector map set pair bitset multiset multimap unordered_set unordered_map unordered_multiset unordered_multimap priority_queue make_pair array shared_ptr abort terminate abs acos asin atan2 atan calloc ceil cosh cos exit exp fabs floor fmod fprintf fputs free frexp fscanf future isalnum isalpha iscntrl isdigit isgraph islower isprint ispunct isspace isupper isxdigit tolower toupper labs ldexp log10 log malloc realloc memchr memcmp memcpy memset modf pow printf putchar puts scanf sinh sin snprintf sprintf sqrt sscanf strcat strchr strcmp strcpy strcspn strlen strncat strncmp strncpy strpbrk strrchr strspn strstr tanh tan vfprintf vprintf vsprintf endl initializer_list unique_ptr" + }, + u = [l, r, t, e.C_BLOCK_COMMENT_MODE, o, s], + b = { + variants: [{ + begin: /=/, + end: /;/ + }, { + begin: /\(/, + end: /\)/ + }, { + beginKeywords: "new throw return else", + end: /;/ + }], + keywords: g, + contains: u.concat([{ + begin: /\(/, + end: /\)/, + keywords: g, + contains: u.concat(["self"]), + relevance: 0 + }]), + relevance: 0 + }, + m = { + begin: "(" + i + "[\\*&\\s]+)+" + d, + returnBegin: !0, + end: /[{;=]/, + excludeEnd: !0, + keywords: g, + illegal: /[^\w\s\*&:<>.]/, + contains: [{ + begin: "decltype\\(auto\\)", + keywords: g, + relevance: 0 + }, { + begin: d, + returnBegin: !0, + contains: [e.inherit(c, { + className: "title.function" + })], + relevance: 0 + }, { + relevance: 0, + match: /,/ + }, { + className: "params", + begin: /\(/, + end: /\)/, + keywords: g, + relevance: 0, + contains: [t, e.C_BLOCK_COMMENT_MODE, s, o, r, { + begin: /\(/, + end: /\)/, + keywords: g, + relevance: 0, + contains: ["self", t, e.C_BLOCK_COMMENT_MODE, s, o, r] + }] + }, r, t, e.C_BLOCK_COMMENT_MODE, l] + }; + return { + name: "C", + aliases: ["h"], + keywords: g, + disableAutodetect: !0, + illegal: "=]/, + contains: [{ + beginKeywords: "final class struct" + }, e.TITLE_MODE] + }]), + exports: { + preprocessor: l, + strings: s, + keywords: g + } + } + }, + grmr_cpp: e => { + const n = e.regex, + t = e.COMMENT("//", "$", { + contains: [{ + begin: /\\\n/ + }] + }), + a = "[a-zA-Z_]\\w*::", + i = "(?!struct)(decltype\\(auto\\)|" + n.optional(a) + "[a-zA-Z_]\\w*" + n.optional("<[^<>]+>") + ")", + r = { + className: "type", + begin: "\\b[a-z\\d_]*_t\\b" + }, + s = { + className: "string", + variants: [{ + begin: '(u8?|U|L)?"', + end: '"', + illegal: "\\n", + contains: [e.BACKSLASH_ESCAPE] + }, { + begin: "(u8?|U|L)?'(\\\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4,8}|[0-7]{3}|\\S)|.)", + end: "'", + illegal: "." + }, e.END_SAME_AS_BEGIN({ + begin: /(?:u8?|U|L)?R"([^()\\ ]{0,16})\(/, + end: /\)([^()\\ ]{0,16})"/ + })] + }, + o = { + className: "number", + variants: [{ + begin: "\\b(0b[01']+)" + }, { + begin: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)((ll|LL|l|L)(u|U)?|(u|U)(ll|LL|l|L)?|f|F|b|B)" + }, { + begin: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" + }], + relevance: 0 + }, + l = { + className: "meta", + begin: /#\s*[a-z]+\b/, + end: /$/, + keywords: { + keyword: "if else elif endif define undef warning error line pragma _Pragma ifdef ifndef include" + }, + contains: [{ + begin: /\\\n/, + relevance: 0 + }, e.inherit(s, { + className: "string" + }), { + className: "string", + begin: /<.*?>/ + }, t, e.C_BLOCK_COMMENT_MODE] + }, + c = { + className: "title", + begin: n.optional(a) + e.IDENT_RE, + relevance: 0 + }, + d = n.optional(a) + e.IDENT_RE + "\\s*\\(", + g = { + type: ["bool", "char", "char16_t", "char32_t", "char8_t", "double", "float", "int", "long", "short", + "void", "wchar_t", "unsigned", "signed", "const", "static" + ], + keyword: ["alignas", "alignof", "and", "and_eq", "asm", "atomic_cancel", "atomic_commit", + "atomic_noexcept", "auto", "bitand", "bitor", "break", "case", "catch", "class", "co_await", + "co_return", "co_yield", "compl", "concept", "const_cast|10", "consteval", "constexpr", "constinit", + "continue", "decltype", "default", "delete", "do", "dynamic_cast|10", "else", "enum", "explicit", + "export", "extern", "false", "final", "for", "friend", "goto", "if", "import", "inline", "module", + "mutable", "namespace", "new", "noexcept", "not", "not_eq", "nullptr", "operator", "or", "or_eq", + "override", "private", "protected", "public", "reflexpr", "register", "reinterpret_cast|10", + "requires", "return", "sizeof", "static_assert", "static_cast|10", "struct", "switch", "synchronized", + "template", "this", "thread_local", "throw", "transaction_safe", "transaction_safe_dynamic", "true", + "try", "typedef", "typeid", "typename", "union", "using", "virtual", "volatile", "while", "xor", + "xor_eq" + ], + literal: ["NULL", "false", "nullopt", "nullptr", "true"], + built_in: ["_Pragma"], + _type_hints: ["any", "auto_ptr", "barrier", "binary_semaphore", "bitset", "complex", "condition_variable", + "condition_variable_any", "counting_semaphore", "deque", "false_type", "future", "imaginary", + "initializer_list", "istringstream", "jthread", "latch", "lock_guard", "multimap", "multiset", + "mutex", "optional", "ostringstream", "packaged_task", "pair", "promise", "priority_queue", "queue", + "recursive_mutex", "recursive_timed_mutex", "scoped_lock", "set", "shared_future", "shared_lock", + "shared_mutex", "shared_timed_mutex", "shared_ptr", "stack", "string_view", "stringstream", + "timed_mutex", "thread", "true_type", "tuple", "unique_lock", "unique_ptr", "unordered_map", + "unordered_multimap", "unordered_multiset", "unordered_set", "variant", "vector", "weak_ptr", + "wstring", "wstring_view" + ] + }, + u = { + className: "function.dispatch", + relevance: 0, + keywords: { + _hint: ["abort", "abs", "acos", "apply", "as_const", "asin", "atan", "atan2", "calloc", "ceil", "cerr", + "cin", "clog", "cos", "cosh", "cout", "declval", "endl", "exchange", "exit", "exp", "fabs", "floor", + "fmod", "forward", "fprintf", "fputs", "free", "frexp", "fscanf", "future", "invoke", "isalnum", + "isalpha", "iscntrl", "isdigit", "isgraph", "islower", "isprint", "ispunct", "isspace", "isupper", + "isxdigit", "labs", "launder", "ldexp", "log", "log10", "make_pair", "make_shared", + "make_shared_for_overwrite", "make_tuple", "make_unique", "malloc", "memchr", "memcmp", "memcpy", + "memset", "modf", "move", "pow", "printf", "putchar", "puts", "realloc", "scanf", "sin", "sinh", + "snprintf", "sprintf", "sqrt", "sscanf", "std", "stderr", "stdin", "stdout", "strcat", "strchr", + "strcmp", "strcpy", "strcspn", "strlen", "strncat", "strncmp", "strncpy", "strpbrk", "strrchr", + "strspn", "strstr", "swap", "tan", "tanh", "terminate", "to_underlying", "tolower", "toupper", + "vfprintf", "visit", "vprintf", "vsprintf" + ] + }, + begin: n.concat(/\b/, /(?!decltype)/, /(?!if)/, /(?!for)/, /(?!switch)/, /(?!while)/, e.IDENT_RE, n + .lookahead(/(<[^<>]+>|)\s*\(/)) + }, + b = [u, l, r, t, e.C_BLOCK_COMMENT_MODE, o, s], + m = { + variants: [{ + begin: /=/, + end: /;/ + }, { + begin: /\(/, + end: /\)/ + }, { + beginKeywords: "new throw return else", + end: /;/ + }], + keywords: g, + contains: b.concat([{ + begin: /\(/, + end: /\)/, + keywords: g, + contains: b.concat(["self"]), + relevance: 0 + }]), + relevance: 0 + }, + p = { + className: "function", + begin: "(" + i + "[\\*&\\s]+)+" + d, + returnBegin: !0, + end: /[{;=]/, + excludeEnd: !0, + keywords: g, + illegal: /[^\w\s\*&:<>.]/, + contains: [{ + begin: "decltype\\(auto\\)", + keywords: g, + relevance: 0 + }, { + begin: d, + returnBegin: !0, + contains: [c], + relevance: 0 + }, { + begin: /::/, + relevance: 0 + }, { + begin: /:/, + endsWithParent: !0, + contains: [s, o] + }, { + relevance: 0, + match: /,/ + }, { + className: "params", + begin: /\(/, + end: /\)/, + keywords: g, + relevance: 0, + contains: [t, e.C_BLOCK_COMMENT_MODE, s, o, r, { + begin: /\(/, + end: /\)/, + keywords: g, + relevance: 0, + contains: ["self", t, e.C_BLOCK_COMMENT_MODE, s, o, r] + }] + }, r, t, e.C_BLOCK_COMMENT_MODE, l] + }; + return { + name: "C++", + aliases: ["cc", "c++", "h++", "hpp", "hh", "hxx", "cxx"], + keywords: g, + illegal: "", + keywords: g, + contains: ["self", r] + }, { + begin: e.IDENT_RE + "::", + keywords: g + }, { + match: [/\b(?:enum(?:\s+(?:class|struct))?|class|struct|union)/, /\s+/, /\w+/], + className: { + 1: "keyword", + 3: "title.class" + } + }]) + } + }, + grmr_csharp: e => { + const n = { + keyword: ["abstract", "as", "base", "break", "case", "catch", "class", "const", "continue", "do", "else", + "event", "explicit", "extern", "finally", "fixed", "for", "foreach", "goto", "if", "implicit", "in", + "interface", "internal", "is", "lock", "namespace", "new", "operator", "out", "override", "params", + "private", "protected", "public", "readonly", "record", "ref", "return", "scoped", "sealed", "sizeof", + "stackalloc", "static", "struct", "switch", "this", "throw", "try", "typeof", "unchecked", "unsafe", + "using", "virtual", "void", "volatile", "while" + ].concat(["add", "alias", "and", "ascending", "async", "await", "by", "descending", "equals", "from", + "get", "global", "group", "init", "into", "join", "let", "nameof", "not", "notnull", "on", "or", + "orderby", "partial", "remove", "select", "set", "unmanaged", "value|0", "var", "when", "where", + "with", "yield" + ]), + built_in: ["bool", "byte", "char", "decimal", "delegate", "double", "dynamic", "enum", "float", "int", + "long", "nint", "nuint", "object", "sbyte", "short", "string", "ulong", "uint", "ushort" + ], + literal: ["default", "false", "null", "true"] + }, + t = e.inherit(e.TITLE_MODE, { + begin: "[a-zA-Z](\\.?\\w)*" + }), + a = { + className: "number", + variants: [{ + begin: "\\b(0b[01']+)" + }, { + begin: "(-?)\\b([\\d']+(\\.[\\d']*)?|\\.[\\d']+)(u|U|l|L|ul|UL|f|F|b|B)" + }, { + begin: "(-?)(\\b0[xX][a-fA-F0-9']+|(\\b[\\d']+(\\.[\\d']*)?|\\.[\\d']+)([eE][-+]?[\\d']+)?)" + }], + relevance: 0 + }, + i = { + className: "string", + begin: '@"', + end: '"', + contains: [{ + begin: '""' + }] + }, + r = e.inherit(i, { + illegal: /\n/ + }), + s = { + className: "subst", + begin: /\{/, + end: /\}/, + keywords: n + }, + o = e.inherit(s, { + illegal: /\n/ + }), + l = { + className: "string", + begin: /\$"/, + end: '"', + illegal: /\n/, + contains: [{ + begin: /\{\{/ + }, { + begin: /\}\}/ + }, e.BACKSLASH_ESCAPE, o] + }, + c = { + className: "string", + begin: /\$@"/, + end: '"', + contains: [{ + begin: /\{\{/ + }, { + begin: /\}\}/ + }, { + begin: '""' + }, s] + }, + d = e.inherit(c, { + illegal: /\n/, + contains: [{ + begin: /\{\{/ + }, { + begin: /\}\}/ + }, { + begin: '""' + }, o] + }); + s.contains = [c, l, i, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, a, e.C_BLOCK_COMMENT_MODE], + o.contains = [d, l, r, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, a, e.inherit(e.C_BLOCK_COMMENT_MODE, { + illegal: /\n/ + })]; + const g = { + variants: [c, l, i, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE] + }, + u = { + begin: "<", + end: ">", + contains: [{ + beginKeywords: "in out" + }, t] + }, + b = e.IDENT_RE + "(<" + e.IDENT_RE + "(\\s*,\\s*" + e.IDENT_RE + ")*>)?(\\[\\])?", + m = { + begin: "@" + e.IDENT_RE, + relevance: 0 + }; + return { + name: "C#", + aliases: ["cs", "c#"], + keywords: n, + illegal: /::/, + contains: [e.COMMENT("///", "$", { + returnBegin: !0, + contains: [{ + className: "doctag", + variants: [{ + begin: "///", + relevance: 0 + }, { + begin: "\x3c!--|--\x3e" + }, { + begin: "" + }] + }] + }), e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, { + className: "meta", + begin: "#", + end: "$", + keywords: { + keyword: "if else elif endif define undef warning error line region endregion pragma checksum" + } + }, g, a, { + beginKeywords: "class interface", + relevance: 0, + end: /[{;=]/, + illegal: /[^\s:,]/, + contains: [{ + beginKeywords: "where class" + }, t, u, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, { + beginKeywords: "namespace", + relevance: 0, + end: /[{;=]/, + illegal: /[^\s:]/, + contains: [t, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, { + beginKeywords: "record", + relevance: 0, + end: /[{;=]/, + illegal: /[^\s:]/, + contains: [t, u, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, { + className: "meta", + begin: "^\\s*\\[(?=[\\w])", + excludeBegin: !0, + end: "\\]", + excludeEnd: !0, + contains: [{ + className: "string", + begin: /"/, + end: /"/ + }] + }, { + beginKeywords: "new return throw await else", + relevance: 0 + }, { + className: "function", + begin: "(" + b + "\\s+)+" + e.IDENT_RE + "\\s*(<[^=]+>\\s*)?\\(", + returnBegin: !0, + end: /\s*[{;=]/, + excludeEnd: !0, + keywords: n, + contains: [{ + beginKeywords: "public private protected static internal protected abstract async extern override unsafe virtual new sealed partial", + relevance: 0 + }, { + begin: e.IDENT_RE + "\\s*(<[^=]+>\\s*)?\\(", + returnBegin: !0, + contains: [e.TITLE_MODE, u], + relevance: 0 + }, { + match: /\(\)/ + }, { + className: "params", + begin: /\(/, + end: /\)/, + excludeBegin: !0, + excludeEnd: !0, + keywords: n, + relevance: 0, + contains: [g, a, e.C_BLOCK_COMMENT_MODE] + }, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, m] + } + }, + grmr_css: e => { + const n = e.regex, + t = J(e), + a = [e.APOS_STRING_MODE, e.QUOTE_STRING_MODE]; + return { + name: "CSS", + case_insensitive: !0, + illegal: /[=|'\$]/, + keywords: { + keyframePosition: "from to" + }, + classNameAliases: { + keyframePosition: "selector-tag" + }, + contains: [t.BLOCK_COMMENT, { + begin: /-(webkit|moz|ms|o)-(?=[a-z])/ + }, t.CSS_NUMBER_MODE, { + className: "selector-id", + begin: /#[A-Za-z0-9_-]+/, + relevance: 0 + }, { + className: "selector-class", + begin: "\\.[a-zA-Z-][a-zA-Z0-9_-]*", + relevance: 0 + }, t.ATTRIBUTE_SELECTOR_MODE, { + className: "selector-pseudo", + variants: [{ + begin: ":(" + ne.join("|") + ")" + }, { + begin: ":(:)?(" + te.join("|") + ")" + }] + }, t.CSS_VARIABLE, { + className: "attribute", + begin: "\\b(" + ae.join("|") + ")\\b" + }, { + begin: /:/, + end: /[;}{]/, + contains: [t.BLOCK_COMMENT, t.HEXCOLOR, t.IMPORTANT, t.CSS_NUMBER_MODE, ...a, { + begin: /(url|data-uri)\(/, + end: /\)/, + relevance: 0, + keywords: { + built_in: "url data-uri" + }, + contains: [...a, { + className: "string", + begin: /[^)]/, + endsWithParent: !0, + excludeEnd: !0 + }] + }, t.FUNCTION_DISPATCH] + }, { + begin: n.lookahead(/@/), + end: "[{;]", + relevance: 0, + illegal: /:/, + contains: [{ + className: "keyword", + begin: /@-?\w[\w]*(-\w+)*/ + }, { + begin: /\s/, + endsWithParent: !0, + excludeEnd: !0, + relevance: 0, + keywords: { + $pattern: /[a-z-]+/, + keyword: "and or not only", + attribute: ee.join(" ") + }, + contains: [{ + begin: /[a-z-]+(?=:)/, + className: "attribute" + }, ...a, t.CSS_NUMBER_MODE] + }] + }, { + className: "selector-tag", + begin: "\\b(" + Y.join("|") + ")\\b" + }] + } + }, + grmr_diff: e => { + const n = e.regex; + return { + name: "Diff", + aliases: ["patch"], + contains: [{ + className: "meta", + relevance: 10, + match: n.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/, /^\*\*\* +\d+,\d+ +\*\*\*\*$/, /^--- +\d+,\d+ +----$/) + }, { + className: "comment", + variants: [{ + begin: n.either(/Index: /, /^index/, /={3,}/, /^-{3}/, /^\*{3} /, /^\+{3}/, /^diff --git/), + end: /$/ + }, { + match: /^\*{15}$/ + }] + }, { + className: "addition", + begin: /^\+/, + end: /$/ + }, { + className: "deletion", + begin: /^-/, + end: /$/ + }, { + className: "addition", + begin: /^!/, + end: /$/ + }] + } + }, + grmr_go: e => { + const n = { + keyword: ["break", "case", "chan", "const", "continue", "default", "defer", "else", "fallthrough", "for", + "func", "go", "goto", "if", "import", "interface", "map", "package", "range", "return", "select", + "struct", "switch", "type", "var" + ], + type: ["bool", "byte", "complex64", "complex128", "error", "float32", "float64", "int8", "int16", "int32", + "int64", "string", "uint8", "uint16", "uint32", "uint64", "int", "uint", "uintptr", "rune" + ], + literal: ["true", "false", "iota", "nil"], + built_in: ["append", "cap", "close", "complex", "copy", "imag", "len", "make", "new", "panic", "print", + "println", "real", "recover", "delete" + ] + }; + return { + name: "Go", + aliases: ["golang"], + keywords: n, + illegal: " { + const n = e.regex; + return { + name: "GraphQL", + aliases: ["gql"], + case_insensitive: !0, + disableAutodetect: !1, + keywords: { + keyword: ["query", "mutation", "subscription", "type", "input", "schema", "directive", "interface", + "union", "scalar", "fragment", "enum", "on" + ], + literal: ["true", "false", "null"] + }, + contains: [e.HASH_COMMENT_MODE, e.QUOTE_STRING_MODE, e.NUMBER_MODE, { + scope: "punctuation", + match: /[.]{3}/, + relevance: 0 + }, { + scope: "punctuation", + begin: /[\!\(\)\:\=\[\]\{\|\}]{1}/, + relevance: 0 + }, { + scope: "variable", + begin: /\$/, + end: /\W/, + excludeEnd: !0, + relevance: 0 + }, { + scope: "meta", + match: /@\w+/, + excludeEnd: !0 + }, { + scope: "symbol", + begin: n.concat(/[_A-Za-z][_0-9A-Za-z]*/, n.lookahead(/\s*:/)), + relevance: 0 + }], + illegal: [/[;<']/, /BEGIN/] + } + }, + grmr_ini: e => { + const n = e.regex, + t = { + className: "number", + relevance: 0, + variants: [{ + begin: /([+-]+)?[\d]+_[\d_]+/ + }, { + begin: e.NUMBER_RE + }] + }, + a = e.COMMENT(); + a.variants = [{ + begin: /;/, + end: /$/ + }, { + begin: /#/, + end: /$/ + }]; + const i = { + className: "variable", + variants: [{ + begin: /\$[\w\d"][\w\d_]*/ + }, { + begin: /\$\{(.*?)\}/ + }] + }, + r = { + className: "literal", + begin: /\bon|off|true|false|yes|no\b/ + }, + s = { + className: "string", + contains: [e.BACKSLASH_ESCAPE], + variants: [{ + begin: "'''", + end: "'''", + relevance: 10 + }, { + begin: '"""', + end: '"""', + relevance: 10 + }, { + begin: '"', + end: '"' + }, { + begin: "'", + end: "'" + }] + }, + o = { + begin: /\[/, + end: /\]/, + contains: [a, r, i, s, t, "self"], + relevance: 0 + }, + l = n.either(/[A-Za-z0-9_-]+/, /"(\\"|[^"])*"/, /'[^']*'/); + return { + name: "TOML, also INI", + aliases: ["toml"], + case_insensitive: !0, + illegal: /\S/, + contains: [a, { + className: "section", + begin: /\[+/, + end: /\]+/ + }, { + begin: n.concat(l, "(\\s*\\.\\s*", l, ")*", n.lookahead(/\s*=\s*[^#\s]/)), + className: "attr", + starts: { + end: /$/, + contains: [a, o, r, i, s, t] + } + }] + } + }, + grmr_java: e => { + const n = e.regex, + t = "[\xc0-\u02b8a-zA-Z_$][\xc0-\u02b8a-zA-Z_$0-9]*", + a = t + le("(?:<" + t + "~~~(?:\\s*,\\s*" + t + "~~~)*>)?", /~~~/g, 2), + i = { + keyword: ["synchronized", "abstract", "private", "var", "static", "if", "const ", "for", "while", + "strictfp", "finally", "protected", "import", "native", "final", "void", "enum", "else", "break", + "transient", "catch", "instanceof", "volatile", "case", "assert", "package", "default", "public", + "try", "switch", "continue", "throws", "protected", "public", "private", "module", "requires", + "exports", "do", "sealed", "yield", "permits" + ], + literal: ["false", "true", "null"], + type: ["char", "boolean", "long", "float", "int", "byte", "short", "double"], + built_in: ["super", "this"] + }, + r = { + className: "meta", + begin: "@" + t, + contains: [{ + begin: /\(/, + end: /\)/, + contains: ["self"] + }] + }, + s = { + className: "params", + begin: /\(/, + end: /\)/, + keywords: i, + relevance: 0, + contains: [e.C_BLOCK_COMMENT_MODE], + endsParent: !0 + }; + return { + name: "Java", + aliases: ["jsp"], + keywords: i, + illegal: /<\/|#/, + contains: [e.COMMENT("/\\*\\*", "\\*/", { + relevance: 0, + contains: [{ + begin: /\w+@/, + relevance: 0 + }, { + className: "doctag", + begin: "@[A-Za-z]+" + }] + }), { + begin: /import java\.[a-z]+\./, + keywords: "import", + relevance: 2 + }, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, { + begin: /"""/, + end: /"""/, + className: "string", + contains: [e.BACKSLASH_ESCAPE] + }, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, { + match: [/\b(?:class|interface|enum|extends|implements|new)/, /\s+/, t], + className: { + 1: "keyword", + 3: "title.class" + } + }, { + match: /non-sealed/, + scope: "keyword" + }, { + begin: [n.concat(/(?!else)/, t), /\s+/, t, /\s+/, /=(?!=)/], + className: { + 1: "type", + 3: "variable", + 5: "operator" + } + }, { + begin: [/record/, /\s+/, t], + className: { + 1: "keyword", + 3: "title.class" + }, + contains: [s, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, { + beginKeywords: "new throw return else", + relevance: 0 + }, { + begin: ["(?:" + a + "\\s+)", e.UNDERSCORE_IDENT_RE, /\s*(?=\()/], + className: { + 2: "title.function" + }, + keywords: i, + contains: [{ + className: "params", + begin: /\(/, + end: /\)/, + keywords: i, + relevance: 0, + contains: [r, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, oe, e.C_BLOCK_COMMENT_MODE] + }, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, oe, r] + } + }, + grmr_javascript: he, + grmr_json: e => { + const n = ["true", "false", "null"], + t = { + scope: "literal", + beginKeywords: n.join(" ") + }; + return { + name: "JSON", + keywords: { + literal: n + }, + contains: [{ + className: "attr", + begin: /"(\\.|[^\\"\r\n])*"(?=\s*:)/, + relevance: 1.01 + }, { + match: /[{}[\],:]/, + className: "punctuation", + relevance: 0 + }, e.QUOTE_STRING_MODE, t, e.C_NUMBER_MODE, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE], + illegal: "\\S" + } + }, + grmr_kotlin: e => { + const n = { + keyword: "abstract as val var vararg get set class object open private protected public noinline crossinline dynamic final enum if else do while for when throw try catch finally import package is in fun override companion reified inline lateinit init interface annotation data sealed internal infix operator out by constructor super tailrec where const inner suspend typealias external expect actual", + built_in: "Byte Short Char Int Long Boolean Float Double Void Unit Nothing", + literal: "true false null" + }, + t = { + className: "symbol", + begin: e.UNDERSCORE_IDENT_RE + "@" + }, + a = { + className: "subst", + begin: /\$\{/, + end: /\}/, + contains: [e.C_NUMBER_MODE] + }, + i = { + className: "variable", + begin: "\\$" + e.UNDERSCORE_IDENT_RE + }, + r = { + className: "string", + variants: [{ + begin: '"""', + end: '"""(?=[^"])', + contains: [i, a] + }, { + begin: "'", + end: "'", + illegal: /\n/, + contains: [e.BACKSLASH_ESCAPE] + }, { + begin: '"', + end: '"', + illegal: /\n/, + contains: [e.BACKSLASH_ESCAPE, i, a] + }] + }; + a.contains.push(r); + const s = { + className: "meta", + begin: "@(?:file|property|field|get|set|receiver|param|setparam|delegate)\\s*:(?:\\s*" + e + .UNDERSCORE_IDENT_RE + ")?" + }, + o = { + className: "meta", + begin: "@" + e.UNDERSCORE_IDENT_RE, + contains: [{ + begin: /\(/, + end: /\)/, + contains: [e.inherit(r, { + className: "string" + }), "self"] + }] + }, + l = oe, + c = e.COMMENT("/\\*", "\\*/", { + contains: [e.C_BLOCK_COMMENT_MODE] + }), + d = { + variants: [{ + className: "type", + begin: e.UNDERSCORE_IDENT_RE + }, { + begin: /\(/, + end: /\)/, + contains: [] + }] + }, + g = d; + return g.variants[1].contains = [d], d.variants[1].contains = [g], { + name: "Kotlin", + aliases: ["kt", "kts"], + keywords: n, + contains: [e.COMMENT("/\\*\\*", "\\*/", { + relevance: 0, + contains: [{ + className: "doctag", + begin: "@[A-Za-z]+" + }] + }), e.C_LINE_COMMENT_MODE, c, { + className: "keyword", + begin: /\b(break|continue|return|this)\b/, + starts: { + contains: [{ + className: "symbol", + begin: /@\w+/ + }] + } + }, t, s, o, { + className: "function", + beginKeywords: "fun", + end: "[(]|$", + returnBegin: !0, + excludeEnd: !0, + keywords: n, + relevance: 5, + contains: [{ + begin: e.UNDERSCORE_IDENT_RE + "\\s*\\(", + returnBegin: !0, + relevance: 0, + contains: [e.UNDERSCORE_TITLE_MODE] + }, { + className: "type", + begin: //, + keywords: "reified", + relevance: 0 + }, { + className: "params", + begin: /\(/, + end: /\)/, + endsParent: !0, + keywords: n, + relevance: 0, + contains: [{ + begin: /:/, + end: /[=,\/]/, + endsWithParent: !0, + contains: [d, e.C_LINE_COMMENT_MODE, c], + relevance: 0 + }, e.C_LINE_COMMENT_MODE, c, s, o, r, e.C_NUMBER_MODE] + }, c] + }, { + begin: [/class|interface|trait/, /\s+/, e.UNDERSCORE_IDENT_RE], + beginScope: { + 3: "title.class" + }, + keywords: "class interface trait", + end: /[:\{(]|$/, + excludeEnd: !0, + illegal: "extends implements", + contains: [{ + beginKeywords: "public protected internal private constructor" + }, e.UNDERSCORE_TITLE_MODE, { + className: "type", + begin: //, + excludeBegin: !0, + excludeEnd: !0, + relevance: 0 + }, { + className: "type", + begin: /[,:]\s*/, + end: /[<\(,){\s]|$/, + excludeBegin: !0, + returnEnd: !0 + }, s, o] + }, r, { + className: "meta", + begin: "^#!/usr/bin/env", + end: "$", + illegal: "\n" + }, l] + } + }, + grmr_less: e => { + const n = J(e), + t = ie, + a = "([\\w-]+|@\\{[\\w-]+\\})", + i = [], + r = [], + s = e => ({ + className: "string", + begin: "~?" + e + ".*?" + e + }), + o = (e, n, t) => ({ + className: e, + begin: n, + relevance: t + }), + l = { + $pattern: /[a-z-]+/, + keyword: "and or not only", + attribute: ee.join(" ") + }, + c = { + begin: "\\(", + end: "\\)", + contains: r, + keywords: l, + relevance: 0 + }; + r.push(e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, s("'"), s('"'), n.CSS_NUMBER_MODE, { + begin: "(url|data-uri)\\(", + starts: { + className: "string", + end: "[\\)\\n]", + excludeEnd: !0 + } + }, n.HEXCOLOR, c, o("variable", "@@?[\\w-]+", 10), o("variable", "@\\{[\\w-]+\\}"), o("built_in", + "~?`[^`]*?`"), { + className: "attribute", + begin: "[\\w-]+\\s*:", + end: ":", + returnBegin: !0, + excludeEnd: !0 + }, n.IMPORTANT, { + beginKeywords: "and not" + }, n.FUNCTION_DISPATCH); + const d = r.concat({ + begin: /\{/, + end: /\}/, + contains: i + }), + g = { + beginKeywords: "when", + endsWithParent: !0, + contains: [{ + beginKeywords: "and not" + }].concat(r) + }, + u = { + begin: a + "\\s*:", + returnBegin: !0, + end: /[;}]/, + relevance: 0, + contains: [{ + begin: /-(webkit|moz|ms|o)-/ + }, n.CSS_VARIABLE, { + className: "attribute", + begin: "\\b(" + ae.join("|") + ")\\b", + end: /(?=:)/, + starts: { + endsWithParent: !0, + illegal: "[<=$]", + relevance: 0, + contains: r + } + }] + }, + b = { + className: "keyword", + begin: "@(import|media|charset|font-face|(-[a-z]+-)?keyframes|supports|document|namespace|page|viewport|host)\\b", + starts: { + end: "[;{}]", + keywords: l, + returnEnd: !0, + contains: r, + relevance: 0 + } + }, + m = { + className: "variable", + variants: [{ + begin: "@[\\w-]+\\s*:", + relevance: 15 + }, { + begin: "@[\\w-]+" + }], + starts: { + end: "[;}]", + returnEnd: !0, + contains: d + } + }, + p = { + variants: [{ + begin: "[\\.#:&\\[>]", + end: "[;{}]" + }, { + begin: a, + end: /\{/ + }], + returnBegin: !0, + returnEnd: !0, + illegal: "[<='$\"]", + relevance: 0, + contains: [e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, g, o("keyword", "all\\b"), o("variable", + "@\\{[\\w-]+\\}"), { + begin: "\\b(" + Y.join("|") + ")\\b", + className: "selector-tag" + }, n.CSS_NUMBER_MODE, o("selector-tag", a, 0), o("selector-id", "#" + a), o("selector-class", "\\." + + a, 0), o("selector-tag", "&", 0), n.ATTRIBUTE_SELECTOR_MODE, { + className: "selector-pseudo", + begin: ":(" + ne.join("|") + ")" + }, { + className: "selector-pseudo", + begin: ":(:)?(" + te.join("|") + ")" + }, { + begin: /\(/, + end: /\)/, + relevance: 0, + contains: d + }, { + begin: "!important" + }, n.FUNCTION_DISPATCH] + }, + _ = { + begin: `[\\w-]+:(:)?(${t.join("|")})`, + returnBegin: !0, + contains: [p] + }; + return i.push(e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, b, m, _, u, p, g, n.FUNCTION_DISPATCH), { + name: "Less", + case_insensitive: !0, + illegal: "[=>'/<($\"]", + contains: i + } + }, + grmr_lua: e => { + const n = "\\[=*\\[", + t = "\\]=*\\]", + a = { + begin: n, + end: t, + contains: ["self"] + }, + i = [e.COMMENT("--(?!\\[=*\\[)", "$"), e.COMMENT("--\\[=*\\[", t, { + contains: [a], + relevance: 10 + })]; + return { + name: "Lua", + keywords: { + $pattern: e.UNDERSCORE_IDENT_RE, + literal: "true false nil", + keyword: "and break do else elseif end for goto if in local not or repeat return then until while", + built_in: "_G _ENV _VERSION __index __newindex __mode __call __metatable __tostring __len __gc __add __sub __mul __div __mod __pow __concat __unm __eq __lt __le assert collectgarbage dofile error getfenv getmetatable ipairs load loadfile loadstring module next pairs pcall print rawequal rawget rawset require select setfenv setmetatable tonumber tostring type unpack xpcall arg self coroutine resume yield status wrap create running debug getupvalue debug sethook getmetatable gethook setmetatable setlocal traceback setfenv getinfo setupvalue getlocal getregistry getfenv io lines write close flush open output type read stderr stdin input stdout popen tmpfile math log max acos huge ldexp pi cos tanh pow deg tan cosh sinh random randomseed frexp ceil floor rad abs sqrt modf asin min mod fmod log10 atan2 exp sin atan os exit setlocale date getenv difftime remove time clock tmpname rename execute package preload loadlib loaded loaders cpath config path seeall string sub upper len gfind rep find match char dump gmatch reverse byte format gsub lower table setn insert getn foreachi maxn foreach concat sort remove" + }, + contains: i.concat([{ + className: "function", + beginKeywords: "function", + end: "\\)", + contains: [e.inherit(e.TITLE_MODE, { + begin: "([_a-zA-Z]\\w*\\.)*([_a-zA-Z]\\w*:)?[_a-zA-Z]\\w*" + }), { + className: "params", + begin: "\\(", + endsWithParent: !0, + contains: i + }].concat(i) + }, e.C_NUMBER_MODE, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE, { + className: "string", + begin: n, + end: t, + contains: [a], + relevance: 5 + }]) + } + }, + grmr_makefile: e => { + const n = { + className: "variable", + variants: [{ + begin: "\\$\\(" + e.UNDERSCORE_IDENT_RE + "\\)", + contains: [e.BACKSLASH_ESCAPE] + }, { + begin: /\$[@% { + const n = e.regex, + t = n.concat( + /(?:[A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])/, + n.optional( + /(?:[\x2D\.0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])*:/ + ), + /(?:[\x2D\.0-9A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16F1-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF40\uDF42-\uDF49\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])*/ + ), + a = { + className: "symbol", + begin: /&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/ + }, + i = { + begin: /\s/, + contains: [{ + className: "keyword", + begin: /#?[a-z_][a-z1-9_-]+/, + illegal: /\n/ + }] + }, + r = e.inherit(i, { + begin: /\(/, + end: /\)/ + }), + s = e.inherit(e.APOS_STRING_MODE, { + className: "string" + }), + o = e.inherit(e.QUOTE_STRING_MODE, { + className: "string" + }), + l = { + endsWithParent: !0, + illegal: /`]+/ + }] + }] + }] + }; + return { + name: "HTML, XML", + aliases: ["html", "xhtml", "rss", "atom", "xjb", "xsd", "xsl", "plist", "wsf", "svg"], + case_insensitive: !0, + unicodeRegex: !0, + contains: [{ + className: "meta", + begin: //, + relevance: 10, + contains: [i, o, s, r, { + begin: /\[/, + end: /\]/, + contains: [{ + className: "meta", + begin: //, + contains: [i, r, o, s] + }] + }] + }, e.COMMENT(//, { + relevance: 10 + }), { + begin: //, + relevance: 10 + }, a, { + className: "meta", + end: /\?>/, + variants: [{ + begin: /<\?xml/, + relevance: 10, + contains: [o] + }, { + begin: /<\?[a-z][a-z0-9]+/ + }] + }, { + className: "tag", + begin: /)/, + end: />/, + keywords: { + name: "style" + }, + contains: [l], + starts: { + end: /<\/style>/, + returnEnd: !0, + subLanguage: ["css", "xml"] + } + }, { + className: "tag", + begin: /)/, + end: />/, + keywords: { + name: "script" + }, + contains: [l], + starts: { + end: /<\/script>/, + returnEnd: !0, + subLanguage: ["javascript", "handlebars", "xml"] + } + }, { + className: "tag", + begin: /<>|<\/>/ + }, { + className: "tag", + begin: n.concat(//, />/, /\s/)))), + end: /\/?>/, + contains: [{ + className: "name", + begin: t, + relevance: 0, + starts: l + }] + }, { + className: "tag", + begin: n.concat(/<\//, n.lookahead(n.concat(t, />/))), + contains: [{ + className: "name", + begin: t, + relevance: 0 + }, { + begin: />/, + relevance: 0, + endsParent: !0 + }] + }] + } + }, + grmr_markdown: e => { + const n = { + begin: /<\/?[A-Za-z_]/, + end: ">", + subLanguage: "xml", + relevance: 0 + }, + t = { + variants: [{ + begin: /\[.+?\]\[.*?\]/, + relevance: 0 + }, { + begin: /\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/, + relevance: 2 + }, { + begin: e.regex.concat(/\[.+?\]\(/, /[A-Za-z][A-Za-z0-9+.-]*/, /:\/\/.*?\)/), + relevance: 2 + }, { + begin: /\[.+?\]\([./?&#].*?\)/, + relevance: 1 + }, { + begin: /\[.*?\]\(.*?\)/, + relevance: 0 + }], + returnBegin: !0, + contains: [{ + match: /\[(?=\])/ + }, { + className: "string", + relevance: 0, + begin: "\\[", + end: "\\]", + excludeBegin: !0, + returnEnd: !0 + }, { + className: "link", + relevance: 0, + begin: "\\]\\(", + end: "\\)", + excludeBegin: !0, + excludeEnd: !0 + }, { + className: "symbol", + relevance: 0, + begin: "\\]\\[", + end: "\\]", + excludeBegin: !0, + excludeEnd: !0 + }] + }, + a = { + className: "strong", + contains: [], + variants: [{ + begin: /_{2}(?!\s)/, + end: /_{2}/ + }, { + begin: /\*{2}(?!\s)/, + end: /\*{2}/ + }] + }, + i = { + className: "emphasis", + contains: [], + variants: [{ + begin: /\*(?![*\s])/, + end: /\*/ + }, { + begin: /_(?![_\s])/, + end: /_/, + relevance: 0 + }] + }, + r = e.inherit(a, { + contains: [] + }), + s = e.inherit(i, { + contains: [] + }); + a.contains.push(s), i.contains.push(r); + let o = [n, t]; + return [a, i, r, s].forEach((e => { + e.contains = e.contains.concat(o) + })), o = o.concat(a, i), { + name: "Markdown", + aliases: ["md", "mkdown", "mkd"], + contains: [{ + className: "section", + variants: [{ + begin: "^#{1,6}", + end: "$", + contains: o + }, { + begin: "(?=^.+?\\n[=-]{2,}$)", + contains: [{ + begin: "^[=-]*$" + }, { + begin: "^", + end: "\\n", + contains: o + }] + }] + }, n, { + className: "bullet", + begin: "^[ \t]*([*+-]|(\\d+\\.))(?=\\s+)", + end: "\\s+", + excludeEnd: !0 + }, a, i, { + className: "quote", + begin: "^>\\s+", + contains: o, + end: "$" + }, { + className: "code", + variants: [{ + begin: "(`{3,})[^`](.|\\n)*?\\1`*[ ]*" + }, { + begin: "(~{3,})[^~](.|\\n)*?\\1~*[ ]*" + }, { + begin: "```", + end: "```+[ ]*$" + }, { + begin: "~~~", + end: "~~~+[ ]*$" + }, { + begin: "`.+?`" + }, { + begin: "(?=^( {4}|\\t))", + contains: [{ + begin: "^( {4}|\\t)", + end: "(\\n)$" + }], + relevance: 0 + }] + }, { + begin: "^[-\\*]{3,}", + end: "$" + }, t, { + begin: /^\[[^\n]+\]:/, + returnBegin: !0, + contains: [{ + className: "symbol", + begin: /\[/, + end: /\]/, + excludeBegin: !0, + excludeEnd: !0 + }, { + className: "link", + begin: /:\s*/, + end: /$/, + excludeBegin: !0 + }] + }] + } + }, + grmr_objectivec: e => { + const n = /[a-zA-Z@][a-zA-Z0-9_]*/, + t = { + $pattern: n, + keyword: ["@interface", "@class", "@protocol", "@implementation"] + }; + return { + name: "Objective-C", + aliases: ["mm", "objc", "obj-c", "obj-c++", "objective-c++"], + keywords: { + "variable.language": ["this", "super"], + $pattern: n, + keyword: ["while", "export", "sizeof", "typedef", "const", "struct", "for", "union", "volatile", "static", + "mutable", "if", "do", "return", "goto", "enum", "else", "break", "extern", "asm", "case", "default", + "register", "explicit", "typename", "switch", "continue", "inline", "readonly", "assign", "readwrite", + "self", "@synchronized", "id", "typeof", "nonatomic", "IBOutlet", "IBAction", "strong", "weak", + "copy", "in", "out", "inout", "bycopy", "byref", "oneway", "__strong", "__weak", "__block", + "__autoreleasing", "@private", "@protected", "@public", "@try", "@property", "@end", "@throw", + "@catch", "@finally", "@autoreleasepool", "@synthesize", "@dynamic", "@selector", "@optional", + "@required", "@encode", "@package", "@import", "@defs", "@compatibility_alias", "__bridge", + "__bridge_transfer", "__bridge_retained", "__bridge_retain", "__covariant", "__contravariant", + "__kindof", "_Nonnull", "_Nullable", "_Null_unspecified", "__FUNCTION__", "__PRETTY_FUNCTION__", + "__attribute__", "getter", "setter", "retain", "unsafe_unretained", "nonnull", "nullable", + "null_unspecified", "null_resettable", "class", "instancetype", "NS_DESIGNATED_INITIALIZER", + "NS_UNAVAILABLE", "NS_REQUIRES_SUPER", "NS_RETURNS_INNER_POINTER", "NS_INLINE", "NS_AVAILABLE", + "NS_DEPRECATED", "NS_ENUM", "NS_OPTIONS", "NS_SWIFT_UNAVAILABLE", "NS_ASSUME_NONNULL_BEGIN", + "NS_ASSUME_NONNULL_END", "NS_REFINED_FOR_SWIFT", "NS_SWIFT_NAME", "NS_SWIFT_NOTHROW", "NS_DURING", + "NS_HANDLER", "NS_ENDHANDLER", "NS_VALUERETURN", "NS_VOIDRETURN" + ], + literal: ["false", "true", "FALSE", "TRUE", "nil", "YES", "NO", "NULL"], + built_in: ["dispatch_once_t", "dispatch_queue_t", "dispatch_sync", "dispatch_async", "dispatch_once"], + type: ["int", "float", "char", "unsigned", "signed", "short", "long", "double", "wchar_t", "unichar", + "void", "bool", "BOOL", "id|0", "_Bool" + ] + }, + illegal: "/, + end: /$/, + illegal: "\\n" + }, e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE] + }, { + className: "class", + begin: "(" + t.keyword.join("|") + ")\\b", + end: /(\{|$)/, + excludeEnd: !0, + keywords: t, + contains: [e.UNDERSCORE_TITLE_MODE] + }, { + begin: "\\." + e.UNDERSCORE_IDENT_RE, + relevance: 0 + } + ] + } + }, + grmr_perl: e => { + const n = e.regex, + t = /[dualxmsipngr]{0,12}/, + a = { + $pattern: /[\w.]+/, + keyword: "abs accept alarm and atan2 bind binmode bless break caller chdir chmod chomp chop chown chr chroot close closedir connect continue cos crypt dbmclose dbmopen defined delete die do dump each else elsif endgrent endhostent endnetent endprotoent endpwent endservent eof eval exec exists exit exp fcntl fileno flock for foreach fork format formline getc getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getpeername getpgrp getpriority getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getsockname getsockopt given glob gmtime goto grep gt hex if index int ioctl join keys kill last lc lcfirst length link listen local localtime log lstat lt ma map mkdir msgctl msgget msgrcv msgsnd my ne next no not oct open opendir or ord our pack package pipe pop pos print printf prototype push q|0 qq quotemeta qw qx rand read readdir readline readlink readpipe recv redo ref rename require reset return reverse rewinddir rindex rmdir say scalar seek seekdir select semctl semget semop send setgrent sethostent setnetent setpgrp setpriority setprotoent setpwent setservent setsockopt shift shmctl shmget shmread shmwrite shutdown sin sleep socket socketpair sort splice split sprintf sqrt srand stat state study sub substr symlink syscall sysopen sysread sysseek system syswrite tell telldir tie tied time times tr truncate uc ucfirst umask undef unless unlink unpack unshift untie until use utime values vec wait waitpid wantarray warn when while write x|0 xor y|0" + }, + i = { + className: "subst", + begin: "[$@]\\{", + end: "\\}", + keywords: a + }, + r = { + begin: /->\{/, + end: /\}/ + }, + s = { + variants: [{ + begin: /\$\d/ + }, { + begin: n.concat(/[$%@](\^\w\b|#\w+(::\w+)*|\{\w+\}|\w+(::\w*)*)/, "(?![A-Za-z])(?![@$%])") + }, { + begin: /[$%@][^\s\w{]/, + relevance: 0 + }] + }, + o = [e.BACKSLASH_ESCAPE, i, s], + l = [/!/, /\//, /\|/, /\?/, /'/, /"/, /#/], + c = (e, a, i = "\\1") => { + const r = "\\1" === i ? i : n.concat(i, a); + return n.concat(n.concat("(?:", e, ")"), a, /(?:\\.|[^\\\/])*?/, r, /(?:\\.|[^\\\/])*?/, i, t) + }, + d = (e, a, i) => n.concat(n.concat("(?:", e, ")"), a, /(?:\\.|[^\\\/])*?/, i, t), + g = [s, e.HASH_COMMENT_MODE, e.COMMENT(/^=\w/, /=cut/, { + endsWithParent: !0 + }), r, { + className: "string", + contains: o, + variants: [{ + begin: "q[qwxr]?\\s*\\(", + end: "\\)", + relevance: 5 + }, { + begin: "q[qwxr]?\\s*\\[", + end: "\\]", + relevance: 5 + }, { + begin: "q[qwxr]?\\s*\\{", + end: "\\}", + relevance: 5 + }, { + begin: "q[qwxr]?\\s*\\|", + end: "\\|", + relevance: 5 + }, { + begin: "q[qwxr]?\\s*<", + end: ">", + relevance: 5 + }, { + begin: "qw\\s+q", + end: "q", + relevance: 5 + }, { + begin: "'", + end: "'", + contains: [e.BACKSLASH_ESCAPE] + }, { + begin: '"', + end: '"' + }, { + begin: "`", + end: "`", + contains: [e.BACKSLASH_ESCAPE] + }, { + begin: /\{\w+\}/, + relevance: 0 + }, { + begin: "-?\\w+\\s*=>", + relevance: 0 + }] + }, { + className: "number", + begin: "(\\b0[0-7_]+)|(\\b0x[0-9a-fA-F_]+)|(\\b[1-9][0-9_]*(\\.[0-9_]+)?)|[0_]\\b", + relevance: 0 + }, { + begin: "(\\/\\/|" + e.RE_STARTERS_RE + "|\\b(split|return|print|reverse|grep)\\b)\\s*", + keywords: "split return print reverse grep", + relevance: 0, + contains: [e.HASH_COMMENT_MODE, { + className: "regexp", + variants: [{ + begin: c("s|tr|y", n.either(...l, { + capture: !0 + })) + }, { + begin: c("s|tr|y", "\\(", "\\)") + }, { + begin: c("s|tr|y", "\\[", "\\]") + }, { + begin: c("s|tr|y", "\\{", "\\}") + }], + relevance: 2 + }, { + className: "regexp", + variants: [{ + begin: /(m|qr)\/\//, + relevance: 0 + }, { + begin: d("(?:m|qr)?", /\//, /\//) + }, { + begin: d("m|qr", n.either(...l, { + capture: !0 + }), /\1/) + }, { + begin: d("m|qr", /\(/, /\)/) + }, { + begin: d("m|qr", /\[/, /\]/) + }, { + begin: d("m|qr", /\{/, /\}/) + }] + }] + }, { + className: "function", + beginKeywords: "sub", + end: "(\\s*\\(.*?\\))?[;{]", + excludeEnd: !0, + relevance: 5, + contains: [e.TITLE_MODE] + }, { + begin: "-\\w\\b", + relevance: 0 + }, { + begin: "^__DATA__$", + end: "^__END__$", + subLanguage: "mojolicious", + contains: [{ + begin: "^@@.*", + end: "$", + className: "comment" + }] + }]; + return i.contains = g, r.contains = g, { + name: "Perl", + aliases: ["pl", "pm"], + keywords: a, + contains: g + } + }, + grmr_php: e => { + const n = e.regex, + t = /(?![A-Za-z0-9])(?![$])/, + a = n.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/, t), + i = n.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/, t), + r = { + scope: "variable", + match: "\\$+" + a + }, + s = { + scope: "subst", + variants: [{ + begin: /\$\w+/ + }, { + begin: /\{\$/, + end: /\}/ + }] + }, + o = e.inherit(e.APOS_STRING_MODE, { + illegal: null + }), + l = "[ \t\n]", + c = { + scope: "string", + variants: [e.inherit(e.QUOTE_STRING_MODE, { + illegal: null, + contains: e.QUOTE_STRING_MODE.contains.concat(s) + }), o, e.END_SAME_AS_BEGIN({ + begin: /<<<[ \t]*(\w+)\n/, + end: /[ \t]*(\w+)\b/, + contains: e.QUOTE_STRING_MODE.contains.concat(s) + })] + }, + d = { + scope: "number", + variants: [{ + begin: "\\b0[bB][01]+(?:_[01]+)*\\b" + }, { + begin: "\\b0[oO][0-7]+(?:_[0-7]+)*\\b" + }, { + begin: "\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b" + }, { + begin: "(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?" + }], + relevance: 0 + }, + g = ["false", "null", "true"], + u = ["__CLASS__", "__DIR__", "__FILE__", "__FUNCTION__", "__COMPILER_HALT_OFFSET__", "__LINE__", + "__METHOD__", "__NAMESPACE__", "__TRAIT__", "die", "echo", "exit", "include", "include_once", "print", + "require", "require_once", "array", "abstract", "and", "as", "binary", "bool", "boolean", "break", + "callable", "case", "catch", "class", "clone", "const", "continue", "declare", "default", "do", "double", + "else", "elseif", "empty", "enddeclare", "endfor", "endforeach", "endif", "endswitch", "endwhile", "enum", + "eval", "extends", "final", "finally", "float", "for", "foreach", "from", "global", "goto", "if", + "implements", "instanceof", "insteadof", "int", "integer", "interface", "isset", "iterable", "list", + "match|0", "mixed", "new", "never", "object", "or", "private", "protected", "public", "readonly", "real", + "return", "string", "switch", "throw", "trait", "try", "unset", "use", "var", "void", "while", "xor", + "yield" + ], + b = ["Error|0", "AppendIterator", "ArgumentCountError", "ArithmeticError", "ArrayIterator", "ArrayObject", + "AssertionError", "BadFunctionCallException", "BadMethodCallException", "CachingIterator", + "CallbackFilterIterator", "CompileError", "Countable", "DirectoryIterator", "DivisionByZeroError", + "DomainException", "EmptyIterator", "ErrorException", "Exception", "FilesystemIterator", "FilterIterator", + "GlobIterator", "InfiniteIterator", "InvalidArgumentException", "IteratorIterator", "LengthException", + "LimitIterator", "LogicException", "MultipleIterator", "NoRewindIterator", "OutOfBoundsException", + "OutOfRangeException", "OuterIterator", "OverflowException", "ParentIterator", "ParseError", + "RangeException", "RecursiveArrayIterator", "RecursiveCachingIterator", "RecursiveCallbackFilterIterator", + "RecursiveDirectoryIterator", "RecursiveFilterIterator", "RecursiveIterator", "RecursiveIteratorIterator", + "RecursiveRegexIterator", "RecursiveTreeIterator", "RegexIterator", "RuntimeException", + "SeekableIterator", "SplDoublyLinkedList", "SplFileInfo", "SplFileObject", "SplFixedArray", "SplHeap", + "SplMaxHeap", "SplMinHeap", "SplObjectStorage", "SplObserver", "SplPriorityQueue", "SplQueue", "SplStack", + "SplSubject", "SplTempFileObject", "TypeError", "UnderflowException", "UnexpectedValueException", + "UnhandledMatchError", "ArrayAccess", "BackedEnum", "Closure", "Fiber", "Generator", "Iterator", + "IteratorAggregate", "Serializable", "Stringable", "Throwable", "Traversable", "UnitEnum", + "WeakReference", "WeakMap", "Directory", "__PHP_Incomplete_Class", "parent", "php_user_filter", "self", + "static", "stdClass" + ], + m = { + keyword: u, + literal: (e => { + const n = []; + return e.forEach((e => { + n.push(e), e.toLowerCase() === e ? n.push(e.toUpperCase()) : n.push(e.toLowerCase()) + })), n + })(g), + built_in: b + }, + p = e => e.map((e => e.replace(/\|\d+$/, ""))), + _ = { + variants: [{ + match: [/new/, n.concat(l, "+"), n.concat("(?!", p(b).join("\\b|"), "\\b)"), i], + scope: { + 1: "keyword", + 4: "title.class" + } + }] + }, + h = n.concat(a, "\\b(?!\\()"), + f = { + variants: [{ + match: [n.concat(/::/, n.lookahead(/(?!class\b)/)), h], + scope: { + 2: "variable.constant" + } + }, { + match: [/::/, /class/], + scope: { + 2: "variable.language" + } + }, { + match: [i, n.concat(/::/, n.lookahead(/(?!class\b)/)), h], + scope: { + 1: "title.class", + 3: "variable.constant" + } + }, { + match: [i, n.concat("::", n.lookahead(/(?!class\b)/))], + scope: { + 1: "title.class" + } + }, { + match: [i, /::/, /class/], + scope: { + 1: "title.class", + 3: "variable.language" + } + }] + }, + E = { + scope: "attr", + match: n.concat(a, n.lookahead(":"), n.lookahead(/(?!::)/)) + }, + y = { + relevance: 0, + begin: /\(/, + end: /\)/, + keywords: m, + contains: [E, r, f, e.C_BLOCK_COMMENT_MODE, c, d, _] + }, + w = { + relevance: 0, + match: [/\b/, n.concat("(?!fn\\b|function\\b|", p(u).join("\\b|"), "|", p(b).join("\\b|"), "\\b)"), a, n + .concat(l, "*"), n.lookahead(/(?=\()/) + ], + scope: { + 3: "title.function.invoke" + }, + contains: [y] + }; + y.contains.push(w); + const N = [E, f, e.C_BLOCK_COMMENT_MODE, c, d, _]; + return { + case_insensitive: !1, + keywords: m, + contains: [{ + begin: n.concat(/#\[\s*/, i), + beginScope: "meta", + end: /]/, + endScope: "meta", + keywords: { + literal: g, + keyword: ["new", "array"] + }, + contains: [{ + begin: /\[/, + end: /]/, + keywords: { + literal: g, + keyword: ["new", "array"] + }, + contains: ["self", ...N] + }, ...N, { + scope: "meta", + match: i + }] + }, e.HASH_COMMENT_MODE, e.COMMENT("//", "$"), e.COMMENT("/\\*", "\\*/", { + contains: [{ + scope: "doctag", + match: "@[A-Za-z]+" + }] + }), { + match: /__halt_compiler\(\);/, + keywords: "__halt_compiler", + starts: { + scope: "comment", + end: e.MATCH_NOTHING_RE, + contains: [{ + match: /\?>/, + scope: "meta", + endsParent: !0 + }] + } + }, { + scope: "meta", + variants: [{ + begin: /<\?php/, + relevance: 10 + }, { + begin: /<\?=/ + }, { + begin: /<\?/, + relevance: .1 + }, { + begin: /\?>/ + }] + }, { + scope: "variable.language", + match: /\$this\b/ + }, r, w, f, { + match: [/const/, /\s/, a], + scope: { + 1: "keyword", + 3: "variable.constant" + } + }, _, { + scope: "function", + relevance: 0, + beginKeywords: "fn function", + end: /[;{]/, + excludeEnd: !0, + illegal: "[$%\\[]", + contains: [{ + beginKeywords: "use" + }, e.UNDERSCORE_TITLE_MODE, { + begin: "=>", + endsParent: !0 + }, { + scope: "params", + begin: "\\(", + end: "\\)", + excludeBegin: !0, + excludeEnd: !0, + keywords: m, + contains: ["self", r, f, e.C_BLOCK_COMMENT_MODE, c, d] + }] + }, { + scope: "class", + variants: [{ + beginKeywords: "enum", + illegal: /[($"]/ + }, { + beginKeywords: "class interface trait", + illegal: /[:($"]/ + }], + relevance: 0, + end: /\{/, + excludeEnd: !0, + contains: [{ + beginKeywords: "extends implements" + }, e.UNDERSCORE_TITLE_MODE] + }, { + beginKeywords: "namespace", + relevance: 0, + end: ";", + illegal: /[.']/, + contains: [e.inherit(e.UNDERSCORE_TITLE_MODE, { + scope: "title.class" + })] + }, { + beginKeywords: "use", + relevance: 0, + end: ";", + contains: [{ + match: /\b(as|const|function)\b/, + scope: "keyword" + }, e.UNDERSCORE_TITLE_MODE] + }, c, d] + } + }, + grmr_php_template: e => ({ + name: "PHP template", + subLanguage: "xml", + contains: [{ + begin: /<\?(php|=)?/, + end: /\?>/, + subLanguage: "php", + contains: [{ + begin: "/\\*", + end: "\\*/", + skip: !0 + }, { + begin: 'b"', + end: '"', + skip: !0 + }, { + begin: "b'", + end: "'", + skip: !0 + }, e.inherit(e.APOS_STRING_MODE, { + illegal: null, + className: null, + contains: null, + skip: !0 + }), e.inherit(e.QUOTE_STRING_MODE, { + illegal: null, + className: null, + contains: null, + skip: !0 + })] + }] + }), + grmr_plaintext: e => ({ + name: "Plain text", + aliases: ["text", "txt"], + disableAutodetect: !0 + }), + grmr_python: e => { + const n = e.regex, + t = /(?:[A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037B-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1878\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFF9D\uFFA0-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD23\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF1C\uDF27\uDF30-\uDF45\uDF70-\uDF81\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE3F\uDE40\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDEB8\uDF00-\uDF1A\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCDF\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDEE0-\uDEF2\uDF02\uDF04-\uDF10\uDF12-\uDF33\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC41-\uDC46]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE70-\uDEBE\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC30-\uDC6D\uDD00-\uDD2C\uDD37-\uDD3D\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB]|\uD839[\uDCD0-\uDCEB\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDD00-\uDD43\uDD4B]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF])(?:[0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037B-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05EF-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u07FD\u0800-\u082D\u0840-\u085B\u0860-\u086A\u0870-\u0887\u0889-\u088E\u0898-\u08E1\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u09FC\u09FE\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9-\u0AFF\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B55-\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3C-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C5D\u0C60-\u0C63\u0C66-\u0C6F\u0C80-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDD\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1-\u0CF3\u0D00-\u0D0C\u0D0E-\u0D10\u0D12-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D54-\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D81-\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECE\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1715\u171F-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u180F-\u1819\u1820-\u1878\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1ABF-\u1ACE\u1B00-\u1B4C\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CD0-\u1CD2\u1CD4-\u1CFA\u1D00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099\u309A\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u31A0-\u31BF\u31F0-\u31FF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA827\uA82C\uA840-\uA873\uA880-\uA8C5\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFC5D\uFC64-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDF9\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE71\uFE73\uFE77\uFE79\uFE7B\uFE7D\uFE7F-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF2D-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDD00-\uDD27\uDD30-\uDD39\uDE80-\uDEA9\uDEAB\uDEAC\uDEB0\uDEB1\uDEFD-\uDF1C\uDF27\uDF30-\uDF50\uDF70-\uDF85\uDFB0-\uDFC4\uDFE0-\uDFF6]|\uD804[\uDC00-\uDC46\uDC66-\uDC75\uDC7F-\uDCBA\uDCC2\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD44-\uDD47\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDC9-\uDDCC\uDDCE-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE3E-\uDE41\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3B-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC00-\uDC4A\uDC50-\uDC59\uDC5E-\uDC61\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF1D-\uDF2B\uDF30-\uDF39\uDF40-\uDF46]|\uD806[\uDC00-\uDC3A\uDCA0-\uDCE9\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD35\uDD37\uDD38\uDD3B-\uDD43\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD7\uDDDA-\uDDE1\uDDE3\uDDE4\uDE00-\uDE3E\uDE47\uDE50-\uDE99\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC36\uDC38-\uDC40\uDC50-\uDC59\uDC72-\uDC8F\uDC92-\uDCA7\uDCA9-\uDCB6\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD36\uDD3A\uDD3C\uDD3D\uDD3F-\uDD47\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD8E\uDD90\uDD91\uDD93-\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF6\uDF00-\uDF10\uDF12-\uDF3A\uDF3E-\uDF42\uDF50-\uDF59\uDFB0]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883\uD885-\uD887][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2F\uDC40-\uDC55]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE7F\uDF00-\uDF4A\uDF4F-\uDF87\uDF8F-\uDF9F\uDFE0\uDFE1\uDFE3\uDFE4\uDFF0\uDFF1]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD32\uDD50-\uDD52\uDD55\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD833[\uDF00-\uDF2D\uDF30-\uDF46]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD837[\uDF00-\uDF1E\uDF25-\uDF2A]|\uD838[\uDC00-\uDC06\uDC08-\uDC18\uDC1B-\uDC21\uDC23\uDC24\uDC26-\uDC2A\uDC30-\uDC6D\uDC8F\uDD00-\uDD2C\uDD30-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAE\uDEC0-\uDEF9]|\uD839[\uDCD0-\uDCF9\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6\uDD00-\uDD4B\uDD50-\uDD59]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF39\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A\uDF50-\uDFFF]|\uD888[\uDC00-\uDFAF]|\uDB40[\uDD00-\uDDEF])*/, + a = ["and", "as", "assert", "async", "await", "break", "case", "class", "continue", "def", "del", "elif", + "else", "except", "finally", "for", "from", "global", "if", "import", "in", "is", "lambda", "match", + "nonlocal|10", "not", "or", "pass", "raise", "return", "try", "while", "with", "yield" + ], + i = { + $pattern: /[A-Za-z]\w+|__\w+__/, + keyword: a, + built_in: ["__import__", "abs", "all", "any", "ascii", "bin", "bool", "breakpoint", "bytearray", "bytes", + "callable", "chr", "classmethod", "compile", "complex", "delattr", "dict", "dir", "divmod", + "enumerate", "eval", "exec", "filter", "float", "format", "frozenset", "getattr", "globals", + "hasattr", "hash", "help", "hex", "id", "input", "int", "isinstance", "issubclass", "iter", "len", + "list", "locals", "map", "max", "memoryview", "min", "next", "object", "oct", "open", "ord", "pow", + "print", "property", "range", "repr", "reversed", "round", "set", "setattr", "slice", "sorted", + "staticmethod", "str", "sum", "super", "tuple", "type", "vars", "zip" + ], + literal: ["__debug__", "Ellipsis", "False", "None", "NotImplemented", "True"], + type: ["Any", "Callable", "Coroutine", "Dict", "List", "Literal", "Generic", "Optional", "Sequence", + "Set", "Tuple", "Type", "Union" + ] + }, + r = { + className: "meta", + begin: /^(>>>|\.\.\.) / + }, + s = { + className: "subst", + begin: /\{/, + end: /\}/, + keywords: i, + illegal: /#/ + }, + o = { + begin: /\{\{/, + relevance: 0 + }, + l = { + className: "string", + contains: [e.BACKSLASH_ESCAPE], + variants: [{ + begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/, + end: /'''/, + contains: [e.BACKSLASH_ESCAPE, r], + relevance: 10 + }, { + begin: /([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/, + end: /"""/, + contains: [e.BACKSLASH_ESCAPE, r], + relevance: 10 + }, { + begin: /([fF][rR]|[rR][fF]|[fF])'''/, + end: /'''/, + contains: [e.BACKSLASH_ESCAPE, r, o, s] + }, { + begin: /([fF][rR]|[rR][fF]|[fF])"""/, + end: /"""/, + contains: [e.BACKSLASH_ESCAPE, r, o, s] + }, { + begin: /([uU]|[rR])'/, + end: /'/, + relevance: 10 + }, { + begin: /([uU]|[rR])"/, + end: /"/, + relevance: 10 + }, { + begin: /([bB]|[bB][rR]|[rR][bB])'/, + end: /'/ + }, { + begin: /([bB]|[bB][rR]|[rR][bB])"/, + end: /"/ + }, { + begin: /([fF][rR]|[rR][fF]|[fF])'/, + end: /'/, + contains: [e.BACKSLASH_ESCAPE, o, s] + }, { + begin: /([fF][rR]|[rR][fF]|[fF])"/, + end: /"/, + contains: [e.BACKSLASH_ESCAPE, o, s] + }, e.APOS_STRING_MODE, e.QUOTE_STRING_MODE] + }, + c = "[0-9](_?[0-9])*", + d = `(\\b(${c}))?\\.(${c})|\\b(${c})\\.`, + g = "\\b|" + a.join("|"), + u = { + className: "number", + relevance: 0, + variants: [{ + begin: `(\\b(${c})|(${d}))[eE][+-]?(${c})[jJ]?(?=${g})` + }, { + begin: `(${d})[jJ]?` + }, { + begin: `\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${g})` + }, { + begin: `\\b0[bB](_?[01])+[lL]?(?=${g})` + }, { + begin: `\\b0[oO](_?[0-7])+[lL]?(?=${g})` + }, { + begin: `\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${g})` + }, { + begin: `\\b(${c})[jJ](?=${g})` + }] + }, + b = { + className: "comment", + begin: n.lookahead(/# type:/), + end: /$/, + keywords: i, + contains: [{ + begin: /# type:/ + }, { + begin: /#/, + end: /\b\B/, + endsWithParent: !0 + }] + }, + m = { + className: "params", + variants: [{ + className: "", + begin: /\(\s*\)/, + skip: !0 + }, { + begin: /\(/, + end: /\)/, + excludeBegin: !0, + excludeEnd: !0, + keywords: i, + contains: ["self", r, u, l, e.HASH_COMMENT_MODE] + }] + }; + return s.contains = [l, u, r], { + name: "Python", + aliases: ["py", "gyp", "ipython"], + unicodeRegex: !0, + keywords: i, + illegal: /(<\/|->|\?)|=>/, + contains: [r, u, { + begin: /\bself\b/ + }, { + beginKeywords: "if", + relevance: 0 + }, l, b, e.HASH_COMMENT_MODE, { + match: [/\bdef/, /\s+/, t], + scope: { + 1: "keyword", + 3: "title.function" + }, + contains: [m] + }, { + variants: [{ + match: [/\bclass/, /\s+/, t, /\s*/, /\(\s*/, t, /\s*\)/] + }, { + match: [/\bclass/, /\s+/, t] + }], + scope: { + 1: "keyword", + 3: "title.class", + 6: "title.class.inherited" + } + }, { + className: "meta", + begin: /^[\t ]*@/, + end: /(?=#)|$/, + contains: [u, m, l] + }] + } + }, + grmr_python_repl: e => ({ + aliases: ["pycon"], + contains: [{ + className: "meta.prompt", + starts: { + end: / |$/, + starts: { + end: "$", + subLanguage: "python" + } + }, + variants: [{ + begin: /^>>>(?=[ ]|$)/ + }, { + begin: /^\.\.\.(?=[ ]|$)/ + }] + }] + }), + grmr_r: e => { + const n = e.regex, + t = /(?:(?:[a-zA-Z]|\.[._a-zA-Z])[._a-zA-Z0-9]*)|\.(?!\d)/, + a = n.either(/0[xX][0-9a-fA-F]+\.[0-9a-fA-F]*[pP][+-]?\d+i?/, /0[xX][0-9a-fA-F]+(?:[pP][+-]?\d+)?[Li]?/, + /(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?[Li]?/), + i = /[=!<>:]=|\|\||&&|:::?|<-|<<-|->>|->|\|>|[-+*\/?!$&|:<=>@^~]|\*\*/, + r = n.either(/[()]/, /[{}]/, /\[\[/, /[[\]]/, /\\/, /,/); + return { + name: "R", + keywords: { + $pattern: t, + keyword: "function if in break next repeat else for while", + literal: "NULL NA TRUE FALSE Inf NaN NA_integer_|10 NA_real_|10 NA_character_|10 NA_complex_|10", + built_in: "LETTERS letters month.abb month.name pi T F abs acos acosh all any anyNA Arg as.call as.character as.complex as.double as.environment as.integer as.logical as.null.default as.numeric as.raw asin asinh atan atanh attr attributes baseenv browser c call ceiling class Conj cos cosh cospi cummax cummin cumprod cumsum digamma dim dimnames emptyenv exp expression floor forceAndCall gamma gc.time globalenv Im interactive invisible is.array is.atomic is.call is.character is.complex is.double is.environment is.expression is.finite is.function is.infinite is.integer is.language is.list is.logical is.matrix is.na is.name is.nan is.null is.numeric is.object is.pairlist is.raw is.recursive is.single is.symbol lazyLoadDBfetch length lgamma list log max min missing Mod names nargs nzchar oldClass on.exit pos.to.env proc.time prod quote range Re rep retracemem return round seq_along seq_len seq.int sign signif sin sinh sinpi sqrt standardGeneric substitute sum switch tan tanh tanpi tracemem trigamma trunc unclass untracemem UseMethod xtfrm" + }, + contains: [e.COMMENT(/#'/, /$/, { + contains: [{ + scope: "doctag", + match: /@examples/, + starts: { + end: n.lookahead(n.either(/\n^#'\s*(?=@[a-zA-Z]+)/, /\n^(?!#')/)), + endsParent: !0 + } + }, { + scope: "doctag", + begin: "@param", + end: /$/, + contains: [{ + scope: "variable", + variants: [{ + match: t + }, { + match: /`(?:\\.|[^`\\])+`/ + }], + endsParent: !0 + }] + }, { + scope: "doctag", + match: /@[a-zA-Z]+/ + }, { + scope: "keyword", + match: /\\[a-zA-Z]+/ + }] + }), e.HASH_COMMENT_MODE, { + scope: "string", + contains: [e.BACKSLASH_ESCAPE], + variants: [e.END_SAME_AS_BEGIN({ + begin: /[rR]"(-*)\(/, + end: /\)(-*)"/ + }), e.END_SAME_AS_BEGIN({ + begin: /[rR]"(-*)\{/, + end: /\}(-*)"/ + }), e.END_SAME_AS_BEGIN({ + begin: /[rR]"(-*)\[/, + end: /\](-*)"/ + }), e.END_SAME_AS_BEGIN({ + begin: /[rR]'(-*)\(/, + end: /\)(-*)'/ + }), e.END_SAME_AS_BEGIN({ + begin: /[rR]'(-*)\{/, + end: /\}(-*)'/ + }), e.END_SAME_AS_BEGIN({ + begin: /[rR]'(-*)\[/, + end: /\](-*)'/ + }), { + begin: '"', + end: '"', + relevance: 0 + }, { + begin: "'", + end: "'", + relevance: 0 + }] + }, { + relevance: 0, + variants: [{ + scope: { + 1: "operator", + 2: "number" + }, + match: [i, a] + }, { + scope: { + 1: "operator", + 2: "number" + }, + match: [/%[^%]*%/, a] + }, { + scope: { + 1: "punctuation", + 2: "number" + }, + match: [r, a] + }, { + scope: { + 2: "number" + }, + match: [/[^a-zA-Z0-9._]|^/, a] + }] + }, { + scope: { + 3: "operator" + }, + match: [t, /\s+/, /<-/, /\s+/] + }, { + scope: "operator", + relevance: 0, + variants: [{ + match: i + }, { + match: /%[^%]*%/ + }] + }, { + scope: "punctuation", + relevance: 0, + match: r + }, { + begin: "`", + end: "`", + contains: [{ + begin: /\\./ + }] + }] + } + }, + grmr_ruby: e => { + const n = e.regex, + t = "([a-zA-Z_]\\w*[!?=]?|[-+~]@|<<|>>|=~|===?|<=>|[<>]=?|\\*\\*|[-/+%^&*~`|]|\\[\\]=?)", + a = n.either(/\b([A-Z]+[a-z0-9]+)+/, /\b([A-Z]+[a-z0-9]+)+[A-Z]+/), + i = n.concat(a, /(::\w+)*/), + r = { + "variable.constant": ["__FILE__", "__LINE__", "__ENCODING__"], + "variable.language": ["self", "super"], + keyword: ["alias", "and", "begin", "BEGIN", "break", "case", "class", "defined", "do", "else", "elsif", + "end", "END", "ensure", "for", "if", "in", "module", "next", "not", "or", "redo", "require", "rescue", + "retry", "return", "then", "undef", "unless", "until", "when", "while", "yield", "include", "extend", + "prepend", "public", "private", "protected", "raise", "throw" + ], + built_in: ["proc", "lambda", "attr_accessor", "attr_reader", "attr_writer", "define_method", + "private_constant", "module_function" + ], + literal: ["true", "false", "nil"] + }, + s = { + className: "doctag", + begin: "@[A-Za-z]+" + }, + o = { + begin: "#<", + end: ">" + }, + l = [e.COMMENT("#", "$", { + contains: [s] + }), e.COMMENT("^=begin", "^=end", { + contains: [s], + relevance: 10 + }), e.COMMENT("^__END__", e.MATCH_NOTHING_RE)], + c = { + className: "subst", + begin: /#\{/, + end: /\}/, + keywords: r + }, + d = { + className: "string", + contains: [e.BACKSLASH_ESCAPE, c], + variants: [{ + begin: /'/, + end: /'/ + }, { + begin: /"/, + end: /"/ + }, { + begin: /`/, + end: /`/ + }, { + begin: /%[qQwWx]?\(/, + end: /\)/ + }, { + begin: /%[qQwWx]?\[/, + end: /\]/ + }, { + begin: /%[qQwWx]?\{/, + end: /\}/ + }, { + begin: /%[qQwWx]?/ + }, { + begin: /%[qQwWx]?\//, + end: /\// + }, { + begin: /%[qQwWx]?%/, + end: /%/ + }, { + begin: /%[qQwWx]?-/, + end: /-/ + }, { + begin: /%[qQwWx]?\|/, + end: /\|/ + }, { + begin: /\B\?(\\\d{1,3})/ + }, { + begin: /\B\?(\\x[A-Fa-f0-9]{1,2})/ + }, { + begin: /\B\?(\\u\{?[A-Fa-f0-9]{1,6}\}?)/ + }, { + begin: /\B\?(\\M-\\C-|\\M-\\c|\\c\\M-|\\M-|\\C-\\M-)[\x20-\x7e]/ + }, { + begin: /\B\?\\(c|C-)[\x20-\x7e]/ + }, { + begin: /\B\?\\?\S/ + }, { + begin: n.concat(/<<[-~]?'?/, n.lookahead(/(\w+)(?=\W)[^\n]*\n(?:[^\n]*\n)*?\s*\1\b/)), + contains: [e.END_SAME_AS_BEGIN({ + begin: /(\w+)/, + end: /(\w+)/, + contains: [e.BACKSLASH_ESCAPE, c] + })] + }] + }, + g = "[0-9](_?[0-9])*", + u = { + className: "number", + relevance: 0, + variants: [{ + begin: `\\b([1-9](_?[0-9])*|0)(\\.(${g}))?([eE][+-]?(${g})|r)?i?\\b` + }, { + begin: "\\b0[dD][0-9](_?[0-9])*r?i?\\b" + }, { + begin: "\\b0[bB][0-1](_?[0-1])*r?i?\\b" + }, { + begin: "\\b0[oO][0-7](_?[0-7])*r?i?\\b" + }, { + begin: "\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*r?i?\\b" + }, { + begin: "\\b0(_?[0-7])+r?i?\\b" + }] + }, + b = { + variants: [{ + match: /\(\)/ + }, { + className: "params", + begin: /\(/, + end: /(?=\))/, + excludeBegin: !0, + endsParent: !0, + keywords: r + }] + }, + m = [d, { + variants: [{ + match: [/class\s+/, i, /\s+<\s+/, i] + }, { + match: [/\b(class|module)\s+/, i] + }], + scope: { + 2: "title.class", + 4: "title.class.inherited" + }, + keywords: r + }, { + match: [/(include|extend)\s+/, i], + scope: { + 2: "title.class" + }, + keywords: r + }, { + relevance: 0, + match: [i, /\.new[. (]/], + scope: { + 1: "title.class" + } + }, { + relevance: 0, + match: /\b[A-Z][A-Z_0-9]+\b/, + className: "variable.constant" + }, { + relevance: 0, + match: a, + scope: "title.class" + }, { + match: [/def/, /\s+/, t], + scope: { + 1: "keyword", + 3: "title.function" + }, + contains: [b] + }, { + begin: e.IDENT_RE + "::" + }, { + className: "symbol", + begin: e.UNDERSCORE_IDENT_RE + "(!|\\?)?:", + relevance: 0 + }, { + className: "symbol", + begin: ":(?!\\s)", + contains: [d, { + begin: t + }], + relevance: 0 + }, u, { + className: "variable", + begin: "(\\$\\W)|((\\$|@@?)(\\w+))(?=[^@$?])(?![A-Za-z])(?![@$?'])" + }, { + className: "params", + begin: /\|/, + end: /\|/, + excludeBegin: !0, + excludeEnd: !0, + relevance: 0, + keywords: r + }, { + begin: "(" + e.RE_STARTERS_RE + "|unless)\\s*", + keywords: "unless", + contains: [{ + className: "regexp", + contains: [e.BACKSLASH_ESCAPE, c], + illegal: /\n/, + variants: [{ + begin: "/", + end: "/[a-z]*" + }, { + begin: /%r\{/, + end: /\}[a-z]*/ + }, { + begin: "%r\\(", + end: "\\)[a-z]*" + }, { + begin: "%r!", + end: "![a-z]*" + }, { + begin: "%r\\[", + end: "\\][a-z]*" + }] + }].concat(o, l), + relevance: 0 + }].concat(o, l); + c.contains = m, b.contains = m; + const p = [{ + begin: /^\s*=>/, + starts: { + end: "$", + contains: m + } + }, { + className: "meta.prompt", + begin: "^([>?]>|[\\w#]+\\(\\w+\\):\\d+:\\d+[>*]|(\\w+-)?\\d+\\.\\d+\\.\\d+(p\\d+)?[^\\d][^>]+>)(?=[ ])", + starts: { + end: "$", + keywords: r, + contains: m + } + }]; + return l.unshift(o), { + name: "Ruby", + aliases: ["rb", "gemspec", "podspec", "thor", "irb"], + keywords: r, + illegal: /\/\*/, + contains: [e.SHEBANG({ + binary: "ruby" + })].concat(p).concat(l).concat(m) + } + }, + grmr_rust: e => { + const n = e.regex, + t = { + className: "title.function.invoke", + relevance: 0, + begin: n.concat(/\b/, /(?!let\b)/, e.IDENT_RE, n.lookahead(/\s*\(/)) + }, + a = "([ui](8|16|32|64|128|size)|f(32|64))?", + i = ["drop ", "Copy", "Send", "Sized", "Sync", "Drop", "Fn", "FnMut", "FnOnce", "ToOwned", "Clone", "Debug", + "PartialEq", "PartialOrd", "Eq", "Ord", "AsRef", "AsMut", "Into", "From", "Default", "Iterator", "Extend", + "IntoIterator", "DoubleEndedIterator", "ExactSizeIterator", "SliceConcatExt", "ToString", "assert!", + "assert_eq!", "bitflags!", "bytes!", "cfg!", "col!", "concat!", "concat_idents!", "debug_assert!", + "debug_assert_eq!", "env!", "panic!", "file!", "format!", "format_args!", "include_bytes!", + "include_str!", "line!", "local_data_key!", "module_path!", "option_env!", "print!", "println!", + "select!", "stringify!", "try!", "unimplemented!", "unreachable!", "vec!", "write!", "writeln!", + "macro_rules!", "assert_ne!", "debug_assert_ne!" + ], + r = ["i8", "i16", "i32", "i64", "i128", "isize", "u8", "u16", "u32", "u64", "u128", "usize", "f32", "f64", + "str", "char", "bool", "Box", "Option", "Result", "String", "Vec" + ]; + return { + name: "Rust", + aliases: ["rs"], + keywords: { + $pattern: e.IDENT_RE + "!?", + type: r, + keyword: ["abstract", "as", "async", "await", "become", "box", "break", "const", "continue", "crate", + "do", "dyn", "else", "enum", "extern", "false", "final", "fn", "for", "if", "impl", "in", "let", + "loop", "macro", "match", "mod", "move", "mut", "override", "priv", "pub", "ref", "return", "self", + "Self", "static", "struct", "super", "trait", "true", "try", "type", "typeof", "unsafe", "unsized", + "use", "virtual", "where", "while", "yield" + ], + literal: ["true", "false", "Some", "None", "Ok", "Err"], + built_in: i + }, + illegal: "" + }, t] + } + }, + grmr_scss: e => { + const n = J(e), + t = te, + a = ne, + i = "@[a-z-]+", + r = { + className: "variable", + begin: "(\\$[a-zA-Z-][a-zA-Z0-9_-]*)\\b", + relevance: 0 + }; + return { + name: "SCSS", + case_insensitive: !0, + illegal: "[=/|']", + contains: [e.C_LINE_COMMENT_MODE, e.C_BLOCK_COMMENT_MODE, n.CSS_NUMBER_MODE, { + className: "selector-id", + begin: "#[A-Za-z0-9_-]+", + relevance: 0 + }, { + className: "selector-class", + begin: "\\.[A-Za-z0-9_-]+", + relevance: 0 + }, n.ATTRIBUTE_SELECTOR_MODE, { + className: "selector-tag", + begin: "\\b(" + Y.join("|") + ")\\b", + relevance: 0 + }, { + className: "selector-pseudo", + begin: ":(" + a.join("|") + ")" + }, { + className: "selector-pseudo", + begin: ":(:)?(" + t.join("|") + ")" + }, r, { + begin: /\(/, + end: /\)/, + contains: [n.CSS_NUMBER_MODE] + }, n.CSS_VARIABLE, { + className: "attribute", + begin: "\\b(" + ae.join("|") + ")\\b" + }, { + begin: "\\b(whitespace|wait|w-resize|visible|vertical-text|vertical-ideographic|uppercase|upper-roman|upper-alpha|underline|transparent|top|thin|thick|text|text-top|text-bottom|tb-rl|table-header-group|table-footer-group|sw-resize|super|strict|static|square|solid|small-caps|separate|se-resize|scroll|s-resize|rtl|row-resize|ridge|right|repeat|repeat-y|repeat-x|relative|progress|pointer|overline|outside|outset|oblique|nowrap|not-allowed|normal|none|nw-resize|no-repeat|no-drop|newspaper|ne-resize|n-resize|move|middle|medium|ltr|lr-tb|lowercase|lower-roman|lower-alpha|loose|list-item|line|line-through|line-edge|lighter|left|keep-all|justify|italic|inter-word|inter-ideograph|inside|inset|inline|inline-block|inherit|inactive|ideograph-space|ideograph-parenthesis|ideograph-numeric|ideograph-alpha|horizontal|hidden|help|hand|groove|fixed|ellipsis|e-resize|double|dotted|distribute|distribute-space|distribute-letter|distribute-all-lines|disc|disabled|default|decimal|dashed|crosshair|collapse|col-resize|circle|char|center|capitalize|break-word|break-all|bottom|both|bolder|bold|block|bidi-override|below|baseline|auto|always|all-scroll|absolute|table|table-cell)\\b" + }, { + begin: /:/, + end: /[;}{]/, + relevance: 0, + contains: [n.BLOCK_COMMENT, r, n.HEXCOLOR, n.CSS_NUMBER_MODE, e.QUOTE_STRING_MODE, e.APOS_STRING_MODE, + n.IMPORTANT, n.FUNCTION_DISPATCH + ] + }, { + begin: "@(page|font-face)", + keywords: { + $pattern: i, + keyword: "@page @font-face" + } + }, { + begin: "@", + end: "[{;]", + returnBegin: !0, + keywords: { + $pattern: /[a-z-]+/, + keyword: "and or not only", + attribute: ee.join(" ") + }, + contains: [{ + begin: i, + className: "keyword" + }, { + begin: /[a-z-]+(?=:)/, + className: "attribute" + }, r, e.QUOTE_STRING_MODE, e.APOS_STRING_MODE, n.HEXCOLOR, n.CSS_NUMBER_MODE] + }, n.FUNCTION_DISPATCH] + } + }, + grmr_shell: e => ({ + name: "Shell Session", + aliases: ["console", "shellsession"], + contains: [{ + className: "meta.prompt", + begin: /^\s{0,3}[/~\w\d[\]()@-]*[>%$#][ ]?/, + starts: { + end: /[^\\](?=\s*$)/, + subLanguage: "bash" + } + }] + }), + grmr_sql: e => { + const n = e.regex, + t = e.COMMENT("--", "$"), + a = ["true", "false", "unknown"], + i = ["bigint", "binary", "blob", "boolean", "char", "character", "clob", "date", "dec", "decfloat", + "decimal", "float", "int", "integer", "interval", "nchar", "nclob", "national", "numeric", "real", "row", + "smallint", "time", "timestamp", "varchar", "varying", "varbinary" + ], + r = ["abs", "acos", "array_agg", "asin", "atan", "avg", "cast", "ceil", "ceiling", "coalesce", "corr", + "cos", "cosh", "count", "covar_pop", "covar_samp", "cume_dist", "dense_rank", "deref", "element", "exp", + "extract", "first_value", "floor", "json_array", "json_arrayagg", "json_exists", "json_object", + "json_objectagg", "json_query", "json_table", "json_table_primitive", "json_value", "lag", "last_value", + "lead", "listagg", "ln", "log", "log10", "lower", "max", "min", "mod", "nth_value", "ntile", "nullif", + "percent_rank", "percentile_cont", "percentile_disc", "position", "position_regex", "power", "rank", + "regr_avgx", "regr_avgy", "regr_count", "regr_intercept", "regr_r2", "regr_slope", "regr_sxx", "regr_sxy", + "regr_syy", "row_number", "sin", "sinh", "sqrt", "stddev_pop", "stddev_samp", "substring", + "substring_regex", "sum", "tan", "tanh", "translate", "translate_regex", "treat", "trim", "trim_array", + "unnest", "upper", "value_of", "var_pop", "var_samp", "width_bucket" + ], + s = ["create table", "insert into", "primary key", "foreign key", "not null", "alter table", + "add constraint", "grouping sets", "on overflow", "character set", "respect nulls", "ignore nulls", + "nulls first", "nulls last", "depth first", "breadth first" + ], + o = r, + l = ["abs", "acos", "all", "allocate", "alter", "and", "any", "are", "array", "array_agg", + "array_max_cardinality", "as", "asensitive", "asin", "asymmetric", "at", "atan", "atomic", + "authorization", "avg", "begin", "begin_frame", "begin_partition", "between", "bigint", "binary", "blob", + "boolean", "both", "by", "call", "called", "cardinality", "cascaded", "case", "cast", "ceil", "ceiling", + "char", "char_length", "character", "character_length", "check", "classifier", "clob", "close", + "coalesce", "collate", "collect", "column", "commit", "condition", "connect", "constraint", "contains", + "convert", "copy", "corr", "corresponding", "cos", "cosh", "count", "covar_pop", "covar_samp", "create", + "cross", "cube", "cume_dist", "current", "current_catalog", "current_date", + "current_default_transform_group", "current_path", "current_role", "current_row", "current_schema", + "current_time", "current_timestamp", "current_path", "current_role", "current_transform_group_for_type", + "current_user", "cursor", "cycle", "date", "day", "deallocate", "dec", "decimal", "decfloat", "declare", + "default", "define", "delete", "dense_rank", "deref", "describe", "deterministic", "disconnect", + "distinct", "double", "drop", "dynamic", "each", "element", "else", "empty", "end", "end_frame", + "end_partition", "end-exec", "equals", "escape", "every", "except", "exec", "execute", "exists", "exp", + "external", "extract", "false", "fetch", "filter", "first_value", "float", "floor", "for", "foreign", + "frame_row", "free", "from", "full", "function", "fusion", "get", "global", "grant", "group", "grouping", + "groups", "having", "hold", "hour", "identity", "in", "indicator", "initial", "inner", "inout", + "insensitive", "insert", "int", "integer", "intersect", "intersection", "interval", "into", "is", "join", + "json_array", "json_arrayagg", "json_exists", "json_object", "json_objectagg", "json_query", "json_table", + "json_table_primitive", "json_value", "lag", "language", "large", "last_value", "lateral", "lead", + "leading", "left", "like", "like_regex", "listagg", "ln", "local", "localtime", "localtimestamp", "log", + "log10", "lower", "match", "match_number", "match_recognize", "matches", "max", "member", "merge", + "method", "min", "minute", "mod", "modifies", "module", "month", "multiset", "national", "natural", + "nchar", "nclob", "new", "no", "none", "normalize", "not", "nth_value", "ntile", "null", "nullif", + "numeric", "octet_length", "occurrences_regex", "of", "offset", "old", "omit", "on", "one", "only", + "open", "or", "order", "out", "outer", "over", "overlaps", "overlay", "parameter", "partition", "pattern", + "per", "percent", "percent_rank", "percentile_cont", "percentile_disc", "period", "portion", "position", + "position_regex", "power", "precedes", "precision", "prepare", "primary", "procedure", "ptf", "range", + "rank", "reads", "real", "recursive", "ref", "references", "referencing", "regr_avgx", "regr_avgy", + "regr_count", "regr_intercept", "regr_r2", "regr_slope", "regr_sxx", "regr_sxy", "regr_syy", "release", + "result", "return", "returns", "revoke", "right", "rollback", "rollup", "row", "row_number", "rows", + "running", "savepoint", "scope", "scroll", "search", "second", "seek", "select", "sensitive", + "session_user", "set", "show", "similar", "sin", "sinh", "skip", "smallint", "some", "specific", + "specifictype", "sql", "sqlexception", "sqlstate", "sqlwarning", "sqrt", "start", "static", "stddev_pop", + "stddev_samp", "submultiset", "subset", "substring", "substring_regex", "succeeds", "sum", "symmetric", + "system", "system_time", "system_user", "table", "tablesample", "tan", "tanh", "then", "time", + "timestamp", "timezone_hour", "timezone_minute", "to", "trailing", "translate", "translate_regex", + "translation", "treat", "trigger", "trim", "trim_array", "true", "truncate", "uescape", "union", "unique", + "unknown", "unnest", "update", "upper", "user", "using", "value", "values", "value_of", "var_pop", + "var_samp", "varbinary", "varchar", "varying", "versioning", "when", "whenever", "where", "width_bucket", + "window", "with", "within", "without", "year", "add", "asc", "collation", "desc", "final", "first", + "last", "view" + ].filter((e => !r.includes(e))), + c = { + begin: n.concat(/\b/, n.either(...o), /\s*\(/), + relevance: 0, + keywords: { + built_in: o + } + }; + return { + name: "SQL", + case_insensitive: !0, + illegal: /[{}]|<\//, + keywords: { + $pattern: /\b[\w\.]+/, + keyword: ((e, { + exceptions: n, + when: t + } = {}) => { + const a = t; + return n = n || [], e.map((e => e.match(/\|\d+$/) || n.includes(e) ? e : a(e) ? e + "|0" : e)) + })(l, { + when: e => e.length < 3 + }), + literal: a, + type: i, + built_in: ["current_catalog", "current_date", "current_default_transform_group", "current_path", + "current_role", "current_schema", "current_transform_group_for_type", "current_user", "session_user", + "system_time", "system_user", "current_time", "localtime", "current_timestamp", "localtimestamp" + ] + }, + contains: [{ + begin: n.either(...s), + relevance: 0, + keywords: { + $pattern: /[\w\.]+/, + keyword: l.concat(s), + literal: a, + type: i + } + }, { + className: "type", + begin: n.either("double precision", "large object", "with timezone", "without timezone") + }, c, { + className: "variable", + begin: /@[a-z0-9]+/ + }, { + className: "string", + variants: [{ + begin: /'/, + end: /'/, + contains: [{ + begin: /''/ + }] + }] + }, { + begin: /"/, + end: /"/, + contains: [{ + begin: /""/ + }] + }, e.C_NUMBER_MODE, e.C_BLOCK_COMMENT_MODE, t, { + className: "operator", + begin: /[-+*/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?/, + relevance: 0 + }] + } + }, + grmr_swift: e => { + const n = { + match: /\s+/, + relevance: 0 + }, + t = e.COMMENT("/\\*", "\\*/", { + contains: ["self"] + }), + a = [e.C_LINE_COMMENT_MODE, t], + i = { + match: [/\./, p(...Ee, ...ye)], + className: { + 2: "keyword" + } + }, + r = { + match: m(/\./, p(...Ne)), + relevance: 0 + }, + s = Ne.filter((e => "string" == typeof e)).concat(["_|0"]), + o = { + variants: [{ + className: "keyword", + match: p(...Ne.filter((e => "string" != typeof e)).concat(we).map(fe), ...ye) + }] + }, + l = { + $pattern: p(/\b\w+/, /#\w+/), + keyword: s.concat(ke), + literal: ve + }, + c = [i, r, o], + d = [{ + match: m(/\./, p(...xe)), + relevance: 0 + }, { + className: "built_in", + match: m(/\b/, p(...xe), /(?=\()/) + }], + u = { + match: /->/, + relevance: 0 + }, + b = [u, { + className: "operator", + relevance: 0, + variants: [{ + match: Ae + }, { + match: `\\.(\\.|${Se})+` + }] + }], + _ = "([0-9a-fA-F]_*)+", + h = { + className: "number", + relevance: 0, + variants: [{ + match: "\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b" + }, { + match: `\\b0x(${_})(\\.(${_}))?([pP][+-]?(([0-9]_*)+))?\\b` + }, { + match: /\b0o([0-7]_*)+\b/ + }, { + match: /\b0b([01]_*)+\b/ + }] + }, + f = (e = "") => ({ + className: "subst", + variants: [{ + match: m(/\\/, e, /[0\\tnr"']/) + }, { + match: m(/\\/, e, /u\{[0-9a-fA-F]{1,8}\}/) + }] + }), + E = (e = "") => ({ + className: "subst", + match: m(/\\/, e, /[\t ]*(?:[\r\n]|\r\n)/) + }), + y = (e = "") => ({ + className: "subst", + label: "interpol", + begin: m(/\\/, e, /\(/), + end: /\)/ + }), + w = (e = "") => ({ + begin: m(e, /"""/), + end: m(/"""/, e), + contains: [f(e), E(e), y(e)] + }), + N = (e = "") => ({ + begin: m(e, /"/), + end: m(/"/, e), + contains: [f(e), y(e)] + }), + v = { + className: "string", + variants: [w(), w("#"), w("##"), w("###"), N(), N("#"), N("##"), N("###")] + }, + O = { + match: m(/`/, Re, /`/) + }, + k = [O, { + className: "variable", + match: /\$\d+/ + }, { + className: "variable", + match: `\\$${Te}+` + }], + x = [{ + match: /(@|#(un)?)available/, + className: "keyword", + starts: { + contains: [{ + begin: /\(/, + end: /\)/, + keywords: Le, + contains: [...b, h, v] + }] + } + }, { + className: "keyword", + match: m(/@/, p(...Ie)) + }, { + className: "meta", + match: m(/@/, Re) + }], + M = { + match: g(/\b[A-Z]/), + relevance: 0, + contains: [{ + className: "type", + match: m(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/, Te, "+") + }, { + className: "type", + match: De, + relevance: 0 + }, { + match: /[?!]+/, + relevance: 0 + }, { + match: /\.\.\./, + relevance: 0 + }, { + match: m(/\s+&\s+/, g(De)), + relevance: 0 + }] + }, + S = { + begin: //, + keywords: l, + contains: [...a, ...c, ...x, u, M] + }; + M.contains.push(S); + const A = { + begin: /\(/, + end: /\)/, + relevance: 0, + keywords: l, + contains: ["self", { + match: m(Re, /\s*:/), + keywords: "_|0", + relevance: 0 + }, ...a, ...c, ...d, ...b, h, v, ...k, ...x, M] + }, + C = { + begin: //, + contains: [...a, M] + }, + T = { + begin: /\(/, + end: /\)/, + keywords: l, + contains: [{ + begin: p(g(m(Re, /\s*:/)), g(m(Re, /\s+/, Re, /\s*:/))), + end: /:/, + relevance: 0, + contains: [{ + className: "keyword", + match: /\b_\b/ + }, { + className: "params", + match: Re + }] + }, ...a, ...c, ...b, h, v, ...x, M, A], + endsParent: !0, + illegal: /["']/ + }, + R = { + match: [/func/, /\s+/, p(O.match, Re, Ae)], + className: { + 1: "keyword", + 3: "title.function" + }, + contains: [C, T, n], + illegal: [/\[/, /%/] + }, + D = { + match: [/\b(?:subscript|init[?!]?)/, /\s*(?=[<(])/], + className: { + 1: "keyword" + }, + contains: [C, T, n], + illegal: /\[|%/ + }, + I = { + match: [/operator/, /\s+/, Ae], + className: { + 1: "keyword", + 3: "title" + } + }, + L = { + begin: [/precedencegroup/, /\s+/, De], + className: { + 1: "keyword", + 3: "title" + }, + contains: [M], + keywords: [...Oe, ...ve], + end: /}/ + }; + for (const e of v.variants) { + const n = e.contains.find((e => "interpol" === e.label)); + n.keywords = l; + const t = [...c, ...d, ...b, h, v, ...k]; + n.contains = [...t, { + begin: /\(/, + end: /\)/, + contains: ["self", ...t] + }] + } + return { + name: "Swift", + keywords: l, + contains: [...a, R, D, { + beginKeywords: "struct protocol class extension enum actor", + end: "\\{", + excludeEnd: !0, + keywords: l, + contains: [e.inherit(e.TITLE_MODE, { + className: "title.class", + begin: /[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/ + }), ...c] + }, I, L, { + beginKeywords: "import", + end: /$/, + contains: [...a], + relevance: 0 + }, ...c, ...d, ...b, h, v, ...k, ...x, M, A] + } + }, + grmr_typescript: e => { + const n = he(e), + t = ["any", "void", "number", "boolean", "string", "object", "never", "symbol", "bigint", "unknown"], + a = { + beginKeywords: "namespace", + end: /\{/, + excludeEnd: !0, + contains: [n.exports.CLASS_REFERENCE] + }, + i = { + beginKeywords: "interface", + end: /\{/, + excludeEnd: !0, + keywords: { + keyword: "interface extends", + built_in: t + }, + contains: [n.exports.CLASS_REFERENCE] + }, + r = { + $pattern: ce, + keyword: de.concat(["type", "namespace", "interface", "public", "private", "protected", "implements", + "declare", "abstract", "readonly", "enum", "override" + ]), + literal: ge, + built_in: _e.concat(t), + "variable.language": pe + }, + s = { + className: "meta", + begin: "@[A-Za-z$_][0-9A-Za-z$_]*" + }, + o = (e, n, t) => { + const a = e.contains.findIndex((e => e.label === n)); + if (-1 === a) throw Error("can not find mode to replace"); + e.contains.splice(a, 1, t) + }; + return Object.assign(n.keywords, r), + n.exports.PARAMS_CONTAINS.push(s), n.contains = n.contains.concat([s, a, i]), + o(n, "shebang", e.SHEBANG()), o(n, "use_strict", { + className: "meta", + relevance: 10, + begin: /^\s*['"]use strict['"]/ + }), n.contains.find((e => "func.def" === e.label)).relevance = 0, Object.assign(n, { + name: "TypeScript", + aliases: ["ts", "tsx"] + }), n + }, + grmr_vbnet: e => { + const n = e.regex, + t = /\d{1,2}\/\d{1,2}\/\d{4}/, + a = /\d{4}-\d{1,2}-\d{1,2}/, + i = /(\d|1[012])(:\d+){0,2} *(AM|PM)/, + r = /\d{1,2}(:\d{1,2}){1,2}/, + s = { + className: "literal", + variants: [{ + begin: n.concat(/# */, n.either(a, t), / *#/) + }, { + begin: n.concat(/# */, r, / *#/) + }, { + begin: n.concat(/# */, i, / *#/) + }, { + begin: n.concat(/# */, n.either(a, t), / +/, n.either(i, r), / *#/) + }] + }, + o = e.COMMENT(/'''/, /$/, { + contains: [{ + className: "doctag", + begin: /<\/?/, + end: />/ + }] + }), + l = e.COMMENT(null, /$/, { + variants: [{ + begin: /'/ + }, { + begin: /([\t ]|^)REM(?=\s)/ + }] + }); + return { + name: "Visual Basic .NET", + aliases: ["vb"], + case_insensitive: !0, + classNameAliases: { + label: "symbol" + }, + keywords: { + keyword: "addhandler alias aggregate ansi as async assembly auto binary by byref byval call case catch class compare const continue custom declare default delegate dim distinct do each equals else elseif end enum erase error event exit explicit finally for friend from function get global goto group handles if implements imports in inherits interface into iterator join key let lib loop me mid module mustinherit mustoverride mybase myclass namespace narrowing new next notinheritable notoverridable of off on operator option optional order overloads overridable overrides paramarray partial preserve private property protected public raiseevent readonly redim removehandler resume return select set shadows shared skip static step stop structure strict sub synclock take text then throw to try unicode until using when where while widening with withevents writeonly yield", + built_in: "addressof and andalso await directcast gettype getxmlnamespace is isfalse isnot istrue like mod nameof new not or orelse trycast typeof xor cbool cbyte cchar cdate cdbl cdec cint clng cobj csbyte cshort csng cstr cuint culng cushort", + type: "boolean byte char date decimal double integer long object sbyte short single string uinteger ulong ushort", + literal: "true false nothing" + }, + illegal: "//|\\{|\\}|endif|gosub|variant|wend|^\\$ ", + contains: [{ + className: "string", + begin: /"(""|[^/n])"C\b/ + }, { + className: "string", + begin: /"/, + end: /"/, + illegal: /\n/, + contains: [{ + begin: /""/ + }] + }, s, { + className: "number", + relevance: 0, + variants: [{ + begin: /\b\d[\d_]*((\.[\d_]+(E[+-]?[\d_]+)?)|(E[+-]?[\d_]+))[RFD@!#]?/ + }, { + begin: /\b\d[\d_]*((U?[SIL])|[%&])?/ + }, { + begin: /&H[\dA-F_]+((U?[SIL])|[%&])?/ + }, { + begin: /&O[0-7_]+((U?[SIL])|[%&])?/ + }, { + begin: /&B[01_]+((U?[SIL])|[%&])?/ + }] + }, { + className: "label", + begin: /^\w+:/ + }, o, l, { + className: "meta", + begin: /[\t ]*#(const|disable|else|elseif|enable|end|externalsource|if|region)\b/, + end: /$/, + keywords: { + keyword: "const disable else elseif enable end externalsource if region then" + }, + contains: [l] + }] + } + }, + grmr_wasm: e => { + e.regex; + const n = e.COMMENT(/\(;/, /;\)/); + return n.contains.push("self"), { + name: "WebAssembly", + keywords: { + $pattern: /[\w.]+/, + keyword: ["anyfunc", "block", "br", "br_if", "br_table", "call", "call_indirect", "data", "drop", + "elem", "else", "end", "export", "func", "global.get", "global.set", "local.get", "local.set", + "local.tee", "get_global", "get_local", "global", "if", "import", "local", "loop", "memory", + "memory.grow", "memory.size", "module", "mut", "nop", "offset", "param", "result", "return", + "select", "set_global", "set_local", "start", "table", "tee_local", "then", "type", "unreachable" + ] + }, + contains: [e.COMMENT(/;;/, /$/), n, { + match: [/(?:offset|align)/, /\s*/, /=/], + className: { + 1: "keyword", + 3: "operator" + } + }, { + className: "variable", + begin: /\$[\w_]+/ + }, { + match: /(\((?!;)|\))+/, + className: "punctuation", + relevance: 0 + }, { + begin: [/(?:func|call|call_indirect)/, /\s+/, /\$[^\s)]+/], + className: { + 1: "keyword", + 3: "title.function" + } + }, e.QUOTE_STRING_MODE, { + match: /(i32|i64|f32|f64)(?!\.)/, + className: "type" + }, { + className: "keyword", + match: /\b(f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|nearest|neg?|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|store(?:8|16|32)?|sqrt|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))\b/ + }, { + className: "number", + relevance: 0, + match: /[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/ + }] + } + }, + grmr_yaml: e => { + const n = "true false yes no null", + t = "[\\w#;/?:@&=+$,.~*'()[\\]]+", + a = { + className: "string", + relevance: 0, + variants: [{ + begin: /'/, + end: /'/ + }, { + begin: /"/, + end: /"/ + }, { + begin: /\S+/ + }], + contains: [e.BACKSLASH_ESCAPE, { + className: "template-variable", + variants: [{ + begin: /\{\{/, + end: /\}\}/ + }, { + begin: /%\{/, + end: /\}/ + }] + }] + }, + i = e.inherit(a, { + variants: [{ + begin: /'/, + end: /'/ + }, { + begin: /"/, + end: /"/ + }, { + begin: /[^\s,{}[\]]+/ + }] + }), + r = { + end: ",", + endsWithParent: !0, + excludeEnd: !0, + keywords: n, + relevance: 0 + }, + s = { + begin: /\{/, + end: /\}/, + contains: [r], + illegal: "\\n", + relevance: 0 + }, + o = { + begin: "\\[", + end: "\\]", + contains: [r], + illegal: "\\n", + relevance: 0 + }, + l = [{ + className: "attr", + variants: [{ + begin: "\\w[\\w :\\/.-]*:(?=[ \t]|$)" + }, { + begin: '"\\w[\\w :\\/.-]*":(?=[ \t]|$)' + }, { + begin: "'\\w[\\w :\\/.-]*':(?=[ \t]|$)" + }] + }, { + className: "meta", + begin: "^---\\s*$", + relevance: 10 + }, { + className: "string", + begin: "[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*" + }, { + begin: "<%[%=-]?", + end: "[%-]?%>", + subLanguage: "ruby", + excludeBegin: !0, + excludeEnd: !0, + relevance: 0 + }, { + className: "type", + begin: "!\\w+!" + t + }, { + className: "type", + begin: "!<" + t + ">" + }, { + className: "type", + begin: "!" + t + }, { + className: "type", + begin: "!!" + t + }, { + className: "meta", + begin: "&" + e.UNDERSCORE_IDENT_RE + "$" + }, { + className: "meta", + begin: "\\*" + e.UNDERSCORE_IDENT_RE + "$" + }, { + className: "bullet", + begin: "-(?=[ ]|$)", + relevance: 0 + }, e.HASH_COMMENT_MODE, { + beginKeywords: n, + keywords: { + literal: n + } + }, { + className: "number", + begin: "\\b[0-9]{4}(-[0-9][0-9]){0,2}([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?(\\.[0-9]*)?([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?\\b" + }, { + className: "number", + begin: e.C_NUMBER_RE + "\\b", + relevance: 0 + }, s, o, a], + c = [...l]; + return c.pop(), c.push(i), r.contains = c, { + name: "YAML", + case_insensitive: !0, + aliases: ["yml"], + contains: l + } + } +}); +const $e = V; +for (const e of Object.keys(Be)) { + const n = e.replace("grmr_", "").replace("_", "-"); + $e.registerLanguage(n, Be[e]) +} +export { + $e as + default +}; \ No newline at end of file diff --git a/src/components/ua-markdown/lib/html-parser.js b/src/components/ua-markdown/lib/html-parser.js new file mode 100644 index 0000000..0d28a40 --- /dev/null +++ b/src/components/ua-markdown/lib/html-parser.js @@ -0,0 +1,352 @@ +/* + * HTML5 Parser By Sam Blowes + * + * Designed for HTML5 documents + * + * Original code by John Resig (ejohn.org) + * http://ejohn.org/blog/pure-javascript-html-parser/ + * Original code by Erik Arvidsson, Mozilla Public License + * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js + * + * ---------------------------------------------------------------------------- + * License + * ---------------------------------------------------------------------------- + * + * This code is triple licensed using Apache Software License 2.0, + * Mozilla Public License or GNU Public License + * + * //////////////////////////////////////////////////////////////////////////// + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy + * of the License at http://www.apache.org/licenses/LICENSE-2.0 + * + * //////////////////////////////////////////////////////////////////////////// + * + * The contents of this file are subject to the Mozilla Public License + * Version 1.1 (the "License"); you may not use this file except in + * compliance with the License. You may obtain a copy of the License at + * http://www.mozilla.org/MPL/ + * + * Software distributed under the License is distributed on an "AS IS" + * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the + * License for the specific language governing rights and limitations + * under the License. + * + * The Original Code is Simple HTML Parser. + * + * The Initial Developer of the Original Code is Erik Arvidsson. + * Portions created by Erik Arvidssson are Copyright (C) 2004. All Rights + * Reserved. + * + * //////////////////////////////////////////////////////////////////////////// + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * ---------------------------------------------------------------------------- + * Usage + * ---------------------------------------------------------------------------- + * + * // Use like so: + * HTMLParser(htmlString, { + * start: function(tag, attrs, unary) {}, + * end: function(tag) {}, + * chars: function(text) {}, + * comment: function(text) {} + * }); + * + * // or to get an XML string: + * HTMLtoXML(htmlString); + * + * // or to get an XML DOM Document + * HTMLtoDOM(htmlString); + * + * // or to inject into an existing document/DOM node + * HTMLtoDOM(htmlString, document); + * HTMLtoDOM(htmlString, document.body); + * + */ +// Regular Expressions for parsing tags and attributes +var startTag = /^<([-A-Za-z0-9_]+)((?:\s+[a-zA-Z_:][-a-zA-Z0-9_:.]*(?:\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|[^>\s]+))?)*)\s*(\/?)>/; +var endTag = /^<\/([-A-Za-z0-9_]+)[^>]*>/; +var attr = /([a-zA-Z_:][-a-zA-Z0-9_:.]*)(?:\s*=\s*(?:(?:"((?:\\.|[^"])*)")|(?:'((?:\\.|[^'])*)')|([^>\s]+)))?/g; // Empty Elements - HTML 5 + +var empty = makeMap('area,base,basefont,br,col,frame,hr,img,input,link,meta,param,embed,command,keygen,source,track,wbr'); // Block Elements - HTML 5 +// fixed by xxx 将 ins 标签从块级名单中移除 + +var block = makeMap('a,address,article,applet,aside,audio,blockquote,button,canvas,center,dd,del,dir,div,dl,dt,fieldset,figcaption,figure,footer,form,frameset,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,isindex,li,map,menu,noframes,noscript,object,ol,output,p,pre,section,script,table,tbody,td,tfoot,th,thead,tr,ul,video'); // Inline Elements - HTML 5 + +var inline = makeMap('abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,textarea,tt,u,var'); // Elements that you can, intentionally, leave open +// (and which close themselves) + +var closeSelf = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr'); // Attributes that have their values filled in disabled="disabled" + +var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected'); // Special Elements (can contain anything) + +var special = makeMap('script,style'); +function HTMLParser(html, handler) { + var index; + var chars; + var match; + var stack = []; + var last = html; + + stack.last = function () { + return this[this.length - 1]; + }; + + while (html) { + chars = true; // Make sure we're not in a script or style element + + if (!stack.last() || !special[stack.last()]) { + // Comment + if (html.indexOf(''); + + if (index >= 0) { + if (handler.comment) { + handler.comment(html.substring(4, index)); + } + + html = html.substring(index + 3); + chars = false; + } // end tag + + } else if (html.indexOf(']*>'), function (all, text) { + text = text.replace(/|/g, '$1$2'); + + if (handler.chars) { + handler.chars(text); + } + + return ''; + }); + parseEndTag('', stack.last()); + } + + if (html == last) { + throw 'Parse Error: ' + html; + } + + last = html; + } // Clean up any remaining tags + + + parseEndTag(); + + function parseStartTag(tag, tagName, rest, unary) { + tagName = tagName.toLowerCase(); + + if (block[tagName]) { + while (stack.last() && inline[stack.last()]) { + parseEndTag('', stack.last()); + } + } + + if (closeSelf[tagName] && stack.last() == tagName) { + parseEndTag('', tagName); + } + + unary = empty[tagName] || !!unary; + + if (!unary) { + stack.push(tagName); + } + + if (handler.start) { + var attrs = []; + rest.replace(attr, function (match, name) { + var value = arguments[2] ? arguments[2] : arguments[3] ? arguments[3] : arguments[4] ? arguments[4] : fillAttrs[name] ? name : ''; + attrs.push({ + name: name, + value: value, + escaped: value.replace(/(^|[^\\])"/g, '$1\\\"') // " + + }); + }); + + if (handler.start) { + handler.start(tagName, attrs, unary); + } + } + } + + function parseEndTag(tag, tagName) { + // If no tag name is provided, clean shop + if (!tagName) { + var pos = 0; + } // Find the closest opened tag of the same type + else { + for (var pos = stack.length - 1; pos >= 0; pos--) { + if (stack[pos] == tagName) { + break; + } + } + } + + if (pos >= 0) { + // Close all the open elements, up the stack + for (var i = stack.length - 1; i >= pos; i--) { + if (handler.end) { + handler.end(stack[i]); + } + } // Remove the open elements from the stack + + + stack.length = pos; + } + } +} + +function makeMap(str) { + var obj = {}; + var items = str.split(','); + + for (var i = 0; i < items.length; i++) { + obj[items[i]] = true; + } + + return obj; +} + +function removeDOCTYPE(html) { + return html.replace(/<\?xml.*\?>\n/, '').replace(/\n/, '').replace(/\n/, ''); +} + +function parseAttrs(attrs) { + return attrs.reduce(function (pre, attr) { + var value = attr.value; + var name = attr.name; + + if (pre[name]) { + pre[name] = pre[name] + " " + value; + } else { + pre[name] = value; + } + + return pre; + }, {}); +} + +function parseHtml(html) { + html = removeDOCTYPE(html); + var stacks = []; + var results = { + node: 'root', + children: [] + }; + HTMLParser(html, { + start: function start(tag, attrs, unary) { + var node = { + name: tag + }; + + if (attrs.length !== 0) { + node.attrs = parseAttrs(attrs); + } + + if (unary) { + var parent = stacks[0] || results; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } else { + stacks.unshift(node); + } + }, + end: function end(tag) { + var node = stacks.shift(); + if (node.name !== tag) console.error('invalid state: mismatch end tag'); + + if (stacks.length === 0) { + results.children.push(node); + } else { + var parent = stacks[0]; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } + }, + chars: function chars(text) { + var node = { + type: 'text', + text: text + }; + + if (stacks.length === 0) { + results.children.push(node); + } else { + var parent = stacks[0]; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } + }, + comment: function comment(text) { + var node = { + node: 'comment', + text: text + }; + var parent = stacks[0]; + + if (!parent.children) { + parent.children = []; + } + + parent.children.push(node); + } + }); + return results.children; +} + +export default parseHtml; \ No newline at end of file diff --git a/src/components/ua-markdown/lib/markdown-it.min.js b/src/components/ua-markdown/lib/markdown-it.min.js new file mode 100644 index 0000000..ab490d7 --- /dev/null +++ b/src/components/ua-markdown/lib/markdown-it.min.js @@ -0,0 +1,2 @@ +function e(e){if(e.__esModule)return e;var r=Object.defineProperty({},"__esModule",{value:!0});return Object.keys(e).forEach((function(t){var n=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,n.get?n:{enumerable:!0,get:function(){return e[t]}})})),r}var r={},t={Aacute:"Á",aacute:"á",Abreve:"Ă",abreve:"ă",ac:"∾",acd:"∿",acE:"∾̳",Acirc:"Â",acirc:"â",acute:"´",Acy:"А",acy:"а",AElig:"Æ",aelig:"æ",af:"⁡",Afr:"𝔄",afr:"𝔞",Agrave:"À",agrave:"à",alefsym:"ℵ",aleph:"ℵ",Alpha:"Α",alpha:"α",Amacr:"Ā",amacr:"ā",amalg:"⨿",amp:"&",AMP:"&",andand:"⩕",And:"⩓",and:"∧",andd:"⩜",andslope:"⩘",andv:"⩚",ang:"∠",ange:"⦤",angle:"∠",angmsdaa:"⦨",angmsdab:"⦩",angmsdac:"⦪",angmsdad:"⦫",angmsdae:"⦬",angmsdaf:"⦭",angmsdag:"⦮",angmsdah:"⦯",angmsd:"∡",angrt:"∟",angrtvb:"⊾",angrtvbd:"⦝",angsph:"∢",angst:"Å",angzarr:"⍼",Aogon:"Ą",aogon:"ą",Aopf:"𝔸",aopf:"𝕒",apacir:"⩯",ap:"≈",apE:"⩰",ape:"≊",apid:"≋",apos:"'",ApplyFunction:"⁡",approx:"≈",approxeq:"≊",Aring:"Å",aring:"å",Ascr:"𝒜",ascr:"𝒶",Assign:"≔",ast:"*",asymp:"≈",asympeq:"≍",Atilde:"Ã",atilde:"ã",Auml:"Ä",auml:"ä",awconint:"∳",awint:"⨑",backcong:"≌",backepsilon:"϶",backprime:"‵",backsim:"∽",backsimeq:"⋍",Backslash:"∖",Barv:"⫧",barvee:"⊽",barwed:"⌅",Barwed:"⌆",barwedge:"⌅",bbrk:"⎵",bbrktbrk:"⎶",bcong:"≌",Bcy:"Б",bcy:"б",bdquo:"„",becaus:"∵",because:"∵",Because:"∵",bemptyv:"⦰",bepsi:"϶",bernou:"ℬ",Bernoullis:"ℬ",Beta:"Β",beta:"β",beth:"ℶ",between:"≬",Bfr:"𝔅",bfr:"𝔟",bigcap:"⋂",bigcirc:"◯",bigcup:"⋃",bigodot:"⨀",bigoplus:"⨁",bigotimes:"⨂",bigsqcup:"⨆",bigstar:"★",bigtriangledown:"▽",bigtriangleup:"△",biguplus:"⨄",bigvee:"⋁",bigwedge:"⋀",bkarow:"⤍",blacklozenge:"⧫",blacksquare:"▪",blacktriangle:"▴",blacktriangledown:"▾",blacktriangleleft:"◂",blacktriangleright:"▸",blank:"␣",blk12:"▒",blk14:"░",blk34:"▓",block:"█",bne:"=⃥",bnequiv:"≡⃥",bNot:"⫭",bnot:"⌐",Bopf:"𝔹",bopf:"𝕓",bot:"⊥",bottom:"⊥",bowtie:"⋈",boxbox:"⧉",boxdl:"┐",boxdL:"╕",boxDl:"╖",boxDL:"╗",boxdr:"┌",boxdR:"╒",boxDr:"╓",boxDR:"╔",boxh:"─",boxH:"═",boxhd:"┬",boxHd:"╤",boxhD:"╥",boxHD:"╦",boxhu:"┴",boxHu:"╧",boxhU:"╨",boxHU:"╩",boxminus:"⊟",boxplus:"⊞",boxtimes:"⊠",boxul:"┘",boxuL:"╛",boxUl:"╜",boxUL:"╝",boxur:"└",boxuR:"╘",boxUr:"╙",boxUR:"╚",boxv:"│",boxV:"║",boxvh:"┼",boxvH:"╪",boxVh:"╫",boxVH:"╬",boxvl:"┤",boxvL:"╡",boxVl:"╢",boxVL:"╣",boxvr:"├",boxvR:"╞",boxVr:"╟",boxVR:"╠",bprime:"‵",breve:"˘",Breve:"˘",brvbar:"¦",bscr:"𝒷",Bscr:"ℬ",bsemi:"⁏",bsim:"∽",bsime:"⋍",bsolb:"⧅",bsol:"\\",bsolhsub:"⟈",bull:"•",bullet:"•",bump:"≎",bumpE:"⪮",bumpe:"≏",Bumpeq:"≎",bumpeq:"≏",Cacute:"Ć",cacute:"ć",capand:"⩄",capbrcup:"⩉",capcap:"⩋",cap:"∩",Cap:"⋒",capcup:"⩇",capdot:"⩀",CapitalDifferentialD:"ⅅ",caps:"∩︀",caret:"⁁",caron:"ˇ",Cayleys:"ℭ",ccaps:"⩍",Ccaron:"Č",ccaron:"č",Ccedil:"Ç",ccedil:"ç",Ccirc:"Ĉ",ccirc:"ĉ",Cconint:"∰",ccups:"⩌",ccupssm:"⩐",Cdot:"Ċ",cdot:"ċ",cedil:"¸",Cedilla:"¸",cemptyv:"⦲",cent:"¢",centerdot:"·",CenterDot:"·",cfr:"𝔠",Cfr:"ℭ",CHcy:"Ч",chcy:"ч",check:"✓",checkmark:"✓",Chi:"Χ",chi:"χ",circ:"ˆ",circeq:"≗",circlearrowleft:"↺",circlearrowright:"↻",circledast:"⊛",circledcirc:"⊚",circleddash:"⊝",CircleDot:"⊙",circledR:"®",circledS:"Ⓢ",CircleMinus:"⊖",CirclePlus:"⊕",CircleTimes:"⊗",cir:"○",cirE:"⧃",cire:"≗",cirfnint:"⨐",cirmid:"⫯",cirscir:"⧂",ClockwiseContourIntegral:"∲",CloseCurlyDoubleQuote:"”",CloseCurlyQuote:"’",clubs:"♣",clubsuit:"♣",colon:":",Colon:"∷",Colone:"⩴",colone:"≔",coloneq:"≔",comma:",",commat:"@",comp:"∁",compfn:"∘",complement:"∁",complexes:"ℂ",cong:"≅",congdot:"⩭",Congruent:"≡",conint:"∮",Conint:"∯",ContourIntegral:"∮",copf:"𝕔",Copf:"ℂ",coprod:"∐",Coproduct:"∐",copy:"©",COPY:"©",copysr:"℗",CounterClockwiseContourIntegral:"∳",crarr:"↵",cross:"✗",Cross:"⨯",Cscr:"𝒞",cscr:"𝒸",csub:"⫏",csube:"⫑",csup:"⫐",csupe:"⫒",ctdot:"⋯",cudarrl:"⤸",cudarrr:"⤵",cuepr:"⋞",cuesc:"⋟",cularr:"↶",cularrp:"⤽",cupbrcap:"⩈",cupcap:"⩆",CupCap:"≍",cup:"∪",Cup:"⋓",cupcup:"⩊",cupdot:"⊍",cupor:"⩅",cups:"∪︀",curarr:"↷",curarrm:"⤼",curlyeqprec:"⋞",curlyeqsucc:"⋟",curlyvee:"⋎",curlywedge:"⋏",curren:"¤",curvearrowleft:"↶",curvearrowright:"↷",cuvee:"⋎",cuwed:"⋏",cwconint:"∲",cwint:"∱",cylcty:"⌭",dagger:"†",Dagger:"‡",daleth:"ℸ",darr:"↓",Darr:"↡",dArr:"⇓",dash:"‐",Dashv:"⫤",dashv:"⊣",dbkarow:"⤏",dblac:"˝",Dcaron:"Ď",dcaron:"ď",Dcy:"Д",dcy:"д",ddagger:"‡",ddarr:"⇊",DD:"ⅅ",dd:"ⅆ",DDotrahd:"⤑",ddotseq:"⩷",deg:"°",Del:"∇",Delta:"Δ",delta:"δ",demptyv:"⦱",dfisht:"⥿",Dfr:"𝔇",dfr:"𝔡",dHar:"⥥",dharl:"⇃",dharr:"⇂",DiacriticalAcute:"´",DiacriticalDot:"˙",DiacriticalDoubleAcute:"˝",DiacriticalGrave:"`",DiacriticalTilde:"˜",diam:"⋄",diamond:"⋄",Diamond:"⋄",diamondsuit:"♦",diams:"♦",die:"¨",DifferentialD:"ⅆ",digamma:"ϝ",disin:"⋲",div:"÷",divide:"÷",divideontimes:"⋇",divonx:"⋇",DJcy:"Ђ",djcy:"ђ",dlcorn:"⌞",dlcrop:"⌍",dollar:"$",Dopf:"𝔻",dopf:"𝕕",Dot:"¨",dot:"˙",DotDot:"⃜",doteq:"≐",doteqdot:"≑",DotEqual:"≐",dotminus:"∸",dotplus:"∔",dotsquare:"⊡",doublebarwedge:"⌆",DoubleContourIntegral:"∯",DoubleDot:"¨",DoubleDownArrow:"⇓",DoubleLeftArrow:"⇐",DoubleLeftRightArrow:"⇔",DoubleLeftTee:"⫤",DoubleLongLeftArrow:"⟸",DoubleLongLeftRightArrow:"⟺",DoubleLongRightArrow:"⟹",DoubleRightArrow:"⇒",DoubleRightTee:"⊨",DoubleUpArrow:"⇑",DoubleUpDownArrow:"⇕",DoubleVerticalBar:"∥",DownArrowBar:"⤓",downarrow:"↓",DownArrow:"↓",Downarrow:"⇓",DownArrowUpArrow:"⇵",DownBreve:"̑",downdownarrows:"⇊",downharpoonleft:"⇃",downharpoonright:"⇂",DownLeftRightVector:"⥐",DownLeftTeeVector:"⥞",DownLeftVectorBar:"⥖",DownLeftVector:"↽",DownRightTeeVector:"⥟",DownRightVectorBar:"⥗",DownRightVector:"⇁",DownTeeArrow:"↧",DownTee:"⊤",drbkarow:"⤐",drcorn:"⌟",drcrop:"⌌",Dscr:"𝒟",dscr:"𝒹",DScy:"Ѕ",dscy:"ѕ",dsol:"⧶",Dstrok:"Đ",dstrok:"đ",dtdot:"⋱",dtri:"▿",dtrif:"▾",duarr:"⇵",duhar:"⥯",dwangle:"⦦",DZcy:"Џ",dzcy:"џ",dzigrarr:"⟿",Eacute:"É",eacute:"é",easter:"⩮",Ecaron:"Ě",ecaron:"ě",Ecirc:"Ê",ecirc:"ê",ecir:"≖",ecolon:"≕",Ecy:"Э",ecy:"э",eDDot:"⩷",Edot:"Ė",edot:"ė",eDot:"≑",ee:"ⅇ",efDot:"≒",Efr:"𝔈",efr:"𝔢",eg:"⪚",Egrave:"È",egrave:"è",egs:"⪖",egsdot:"⪘",el:"⪙",Element:"∈",elinters:"⏧",ell:"ℓ",els:"⪕",elsdot:"⪗",Emacr:"Ē",emacr:"ē",empty:"∅",emptyset:"∅",EmptySmallSquare:"◻",emptyv:"∅",EmptyVerySmallSquare:"▫",emsp13:" ",emsp14:" ",emsp:" ",ENG:"Ŋ",eng:"ŋ",ensp:" ",Eogon:"Ę",eogon:"ę",Eopf:"𝔼",eopf:"𝕖",epar:"⋕",eparsl:"⧣",eplus:"⩱",epsi:"ε",Epsilon:"Ε",epsilon:"ε",epsiv:"ϵ",eqcirc:"≖",eqcolon:"≕",eqsim:"≂",eqslantgtr:"⪖",eqslantless:"⪕",Equal:"⩵",equals:"=",EqualTilde:"≂",equest:"≟",Equilibrium:"⇌",equiv:"≡",equivDD:"⩸",eqvparsl:"⧥",erarr:"⥱",erDot:"≓",escr:"ℯ",Escr:"ℰ",esdot:"≐",Esim:"⩳",esim:"≂",Eta:"Η",eta:"η",ETH:"Ð",eth:"ð",Euml:"Ë",euml:"ë",euro:"€",excl:"!",exist:"∃",Exists:"∃",expectation:"ℰ",exponentiale:"ⅇ",ExponentialE:"ⅇ",fallingdotseq:"≒",Fcy:"Ф",fcy:"ф",female:"♀",ffilig:"ffi",fflig:"ff",ffllig:"ffl",Ffr:"𝔉",ffr:"𝔣",filig:"fi",FilledSmallSquare:"◼",FilledVerySmallSquare:"▪",fjlig:"fj",flat:"♭",fllig:"fl",fltns:"▱",fnof:"ƒ",Fopf:"𝔽",fopf:"𝕗",forall:"∀",ForAll:"∀",fork:"⋔",forkv:"⫙",Fouriertrf:"ℱ",fpartint:"⨍",frac12:"½",frac13:"⅓",frac14:"¼",frac15:"⅕",frac16:"⅙",frac18:"⅛",frac23:"⅔",frac25:"⅖",frac34:"¾",frac35:"⅗",frac38:"⅜",frac45:"⅘",frac56:"⅚",frac58:"⅝",frac78:"⅞",frasl:"⁄",frown:"⌢",fscr:"𝒻",Fscr:"ℱ",gacute:"ǵ",Gamma:"Γ",gamma:"γ",Gammad:"Ϝ",gammad:"ϝ",gap:"⪆",Gbreve:"Ğ",gbreve:"ğ",Gcedil:"Ģ",Gcirc:"Ĝ",gcirc:"ĝ",Gcy:"Г",gcy:"г",Gdot:"Ġ",gdot:"ġ",ge:"≥",gE:"≧",gEl:"⪌",gel:"⋛",geq:"≥",geqq:"≧",geqslant:"⩾",gescc:"⪩",ges:"⩾",gesdot:"⪀",gesdoto:"⪂",gesdotol:"⪄",gesl:"⋛︀",gesles:"⪔",Gfr:"𝔊",gfr:"𝔤",gg:"≫",Gg:"⋙",ggg:"⋙",gimel:"ℷ",GJcy:"Ѓ",gjcy:"ѓ",gla:"⪥",gl:"≷",glE:"⪒",glj:"⪤",gnap:"⪊",gnapprox:"⪊",gne:"⪈",gnE:"≩",gneq:"⪈",gneqq:"≩",gnsim:"⋧",Gopf:"𝔾",gopf:"𝕘",grave:"`",GreaterEqual:"≥",GreaterEqualLess:"⋛",GreaterFullEqual:"≧",GreaterGreater:"⪢",GreaterLess:"≷",GreaterSlantEqual:"⩾",GreaterTilde:"≳",Gscr:"𝒢",gscr:"ℊ",gsim:"≳",gsime:"⪎",gsiml:"⪐",gtcc:"⪧",gtcir:"⩺",gt:">",GT:">",Gt:"≫",gtdot:"⋗",gtlPar:"⦕",gtquest:"⩼",gtrapprox:"⪆",gtrarr:"⥸",gtrdot:"⋗",gtreqless:"⋛",gtreqqless:"⪌",gtrless:"≷",gtrsim:"≳",gvertneqq:"≩︀",gvnE:"≩︀",Hacek:"ˇ",hairsp:" ",half:"½",hamilt:"ℋ",HARDcy:"Ъ",hardcy:"ъ",harrcir:"⥈",harr:"↔",hArr:"⇔",harrw:"↭",Hat:"^",hbar:"ℏ",Hcirc:"Ĥ",hcirc:"ĥ",hearts:"♥",heartsuit:"♥",hellip:"…",hercon:"⊹",hfr:"𝔥",Hfr:"ℌ",HilbertSpace:"ℋ",hksearow:"⤥",hkswarow:"⤦",hoarr:"⇿",homtht:"∻",hookleftarrow:"↩",hookrightarrow:"↪",hopf:"𝕙",Hopf:"ℍ",horbar:"―",HorizontalLine:"─",hscr:"𝒽",Hscr:"ℋ",hslash:"ℏ",Hstrok:"Ħ",hstrok:"ħ",HumpDownHump:"≎",HumpEqual:"≏",hybull:"⁃",hyphen:"‐",Iacute:"Í",iacute:"í",ic:"⁣",Icirc:"Î",icirc:"î",Icy:"И",icy:"и",Idot:"İ",IEcy:"Е",iecy:"е",iexcl:"¡",iff:"⇔",ifr:"𝔦",Ifr:"ℑ",Igrave:"Ì",igrave:"ì",ii:"ⅈ",iiiint:"⨌",iiint:"∭",iinfin:"⧜",iiota:"℩",IJlig:"IJ",ijlig:"ij",Imacr:"Ī",imacr:"ī",image:"ℑ",ImaginaryI:"ⅈ",imagline:"ℐ",imagpart:"ℑ",imath:"ı",Im:"ℑ",imof:"⊷",imped:"Ƶ",Implies:"⇒",incare:"℅",in:"∈",infin:"∞",infintie:"⧝",inodot:"ı",intcal:"⊺",int:"∫",Int:"∬",integers:"ℤ",Integral:"∫",intercal:"⊺",Intersection:"⋂",intlarhk:"⨗",intprod:"⨼",InvisibleComma:"⁣",InvisibleTimes:"⁢",IOcy:"Ё",iocy:"ё",Iogon:"Į",iogon:"į",Iopf:"𝕀",iopf:"𝕚",Iota:"Ι",iota:"ι",iprod:"⨼",iquest:"¿",iscr:"𝒾",Iscr:"ℐ",isin:"∈",isindot:"⋵",isinE:"⋹",isins:"⋴",isinsv:"⋳",isinv:"∈",it:"⁢",Itilde:"Ĩ",itilde:"ĩ",Iukcy:"І",iukcy:"і",Iuml:"Ï",iuml:"ï",Jcirc:"Ĵ",jcirc:"ĵ",Jcy:"Й",jcy:"й",Jfr:"𝔍",jfr:"𝔧",jmath:"ȷ",Jopf:"𝕁",jopf:"𝕛",Jscr:"𝒥",jscr:"𝒿",Jsercy:"Ј",jsercy:"ј",Jukcy:"Є",jukcy:"є",Kappa:"Κ",kappa:"κ",kappav:"ϰ",Kcedil:"Ķ",kcedil:"ķ",Kcy:"К",kcy:"к",Kfr:"𝔎",kfr:"𝔨",kgreen:"ĸ",KHcy:"Х",khcy:"х",KJcy:"Ќ",kjcy:"ќ",Kopf:"𝕂",kopf:"𝕜",Kscr:"𝒦",kscr:"𝓀",lAarr:"⇚",Lacute:"Ĺ",lacute:"ĺ",laemptyv:"⦴",lagran:"ℒ",Lambda:"Λ",lambda:"λ",lang:"⟨",Lang:"⟪",langd:"⦑",langle:"⟨",lap:"⪅",Laplacetrf:"ℒ",laquo:"«",larrb:"⇤",larrbfs:"⤟",larr:"←",Larr:"↞",lArr:"⇐",larrfs:"⤝",larrhk:"↩",larrlp:"↫",larrpl:"⤹",larrsim:"⥳",larrtl:"↢",latail:"⤙",lAtail:"⤛",lat:"⪫",late:"⪭",lates:"⪭︀",lbarr:"⤌",lBarr:"⤎",lbbrk:"❲",lbrace:"{",lbrack:"[",lbrke:"⦋",lbrksld:"⦏",lbrkslu:"⦍",Lcaron:"Ľ",lcaron:"ľ",Lcedil:"Ļ",lcedil:"ļ",lceil:"⌈",lcub:"{",Lcy:"Л",lcy:"л",ldca:"⤶",ldquo:"“",ldquor:"„",ldrdhar:"⥧",ldrushar:"⥋",ldsh:"↲",le:"≤",lE:"≦",LeftAngleBracket:"⟨",LeftArrowBar:"⇤",leftarrow:"←",LeftArrow:"←",Leftarrow:"⇐",LeftArrowRightArrow:"⇆",leftarrowtail:"↢",LeftCeiling:"⌈",LeftDoubleBracket:"⟦",LeftDownTeeVector:"⥡",LeftDownVectorBar:"⥙",LeftDownVector:"⇃",LeftFloor:"⌊",leftharpoondown:"↽",leftharpoonup:"↼",leftleftarrows:"⇇",leftrightarrow:"↔",LeftRightArrow:"↔",Leftrightarrow:"⇔",leftrightarrows:"⇆",leftrightharpoons:"⇋",leftrightsquigarrow:"↭",LeftRightVector:"⥎",LeftTeeArrow:"↤",LeftTee:"⊣",LeftTeeVector:"⥚",leftthreetimes:"⋋",LeftTriangleBar:"⧏",LeftTriangle:"⊲",LeftTriangleEqual:"⊴",LeftUpDownVector:"⥑",LeftUpTeeVector:"⥠",LeftUpVectorBar:"⥘",LeftUpVector:"↿",LeftVectorBar:"⥒",LeftVector:"↼",lEg:"⪋",leg:"⋚",leq:"≤",leqq:"≦",leqslant:"⩽",lescc:"⪨",les:"⩽",lesdot:"⩿",lesdoto:"⪁",lesdotor:"⪃",lesg:"⋚︀",lesges:"⪓",lessapprox:"⪅",lessdot:"⋖",lesseqgtr:"⋚",lesseqqgtr:"⪋",LessEqualGreater:"⋚",LessFullEqual:"≦",LessGreater:"≶",lessgtr:"≶",LessLess:"⪡",lesssim:"≲",LessSlantEqual:"⩽",LessTilde:"≲",lfisht:"⥼",lfloor:"⌊",Lfr:"𝔏",lfr:"𝔩",lg:"≶",lgE:"⪑",lHar:"⥢",lhard:"↽",lharu:"↼",lharul:"⥪",lhblk:"▄",LJcy:"Љ",ljcy:"љ",llarr:"⇇",ll:"≪",Ll:"⋘",llcorner:"⌞",Lleftarrow:"⇚",llhard:"⥫",lltri:"◺",Lmidot:"Ŀ",lmidot:"ŀ",lmoustache:"⎰",lmoust:"⎰",lnap:"⪉",lnapprox:"⪉",lne:"⪇",lnE:"≨",lneq:"⪇",lneqq:"≨",lnsim:"⋦",loang:"⟬",loarr:"⇽",lobrk:"⟦",longleftarrow:"⟵",LongLeftArrow:"⟵",Longleftarrow:"⟸",longleftrightarrow:"⟷",LongLeftRightArrow:"⟷",Longleftrightarrow:"⟺",longmapsto:"⟼",longrightarrow:"⟶",LongRightArrow:"⟶",Longrightarrow:"⟹",looparrowleft:"↫",looparrowright:"↬",lopar:"⦅",Lopf:"𝕃",lopf:"𝕝",loplus:"⨭",lotimes:"⨴",lowast:"∗",lowbar:"_",LowerLeftArrow:"↙",LowerRightArrow:"↘",loz:"◊",lozenge:"◊",lozf:"⧫",lpar:"(",lparlt:"⦓",lrarr:"⇆",lrcorner:"⌟",lrhar:"⇋",lrhard:"⥭",lrm:"‎",lrtri:"⊿",lsaquo:"‹",lscr:"𝓁",Lscr:"ℒ",lsh:"↰",Lsh:"↰",lsim:"≲",lsime:"⪍",lsimg:"⪏",lsqb:"[",lsquo:"‘",lsquor:"‚",Lstrok:"Ł",lstrok:"ł",ltcc:"⪦",ltcir:"⩹",lt:"<",LT:"<",Lt:"≪",ltdot:"⋖",lthree:"⋋",ltimes:"⋉",ltlarr:"⥶",ltquest:"⩻",ltri:"◃",ltrie:"⊴",ltrif:"◂",ltrPar:"⦖",lurdshar:"⥊",luruhar:"⥦",lvertneqq:"≨︀",lvnE:"≨︀",macr:"¯",male:"♂",malt:"✠",maltese:"✠",Map:"⤅",map:"↦",mapsto:"↦",mapstodown:"↧",mapstoleft:"↤",mapstoup:"↥",marker:"▮",mcomma:"⨩",Mcy:"М",mcy:"м",mdash:"—",mDDot:"∺",measuredangle:"∡",MediumSpace:" ",Mellintrf:"ℳ",Mfr:"𝔐",mfr:"𝔪",mho:"℧",micro:"µ",midast:"*",midcir:"⫰",mid:"∣",middot:"·",minusb:"⊟",minus:"−",minusd:"∸",minusdu:"⨪",MinusPlus:"∓",mlcp:"⫛",mldr:"…",mnplus:"∓",models:"⊧",Mopf:"𝕄",mopf:"𝕞",mp:"∓",mscr:"𝓂",Mscr:"ℳ",mstpos:"∾",Mu:"Μ",mu:"μ",multimap:"⊸",mumap:"⊸",nabla:"∇",Nacute:"Ń",nacute:"ń",nang:"∠⃒",nap:"≉",napE:"⩰̸",napid:"≋̸",napos:"ʼn",napprox:"≉",natural:"♮",naturals:"ℕ",natur:"♮",nbsp:" ",nbump:"≎̸",nbumpe:"≏̸",ncap:"⩃",Ncaron:"Ň",ncaron:"ň",Ncedil:"Ņ",ncedil:"ņ",ncong:"≇",ncongdot:"⩭̸",ncup:"⩂",Ncy:"Н",ncy:"н",ndash:"–",nearhk:"⤤",nearr:"↗",neArr:"⇗",nearrow:"↗",ne:"≠",nedot:"≐̸",NegativeMediumSpace:"​",NegativeThickSpace:"​",NegativeThinSpace:"​",NegativeVeryThinSpace:"​",nequiv:"≢",nesear:"⤨",nesim:"≂̸",NestedGreaterGreater:"≫",NestedLessLess:"≪",NewLine:"\n",nexist:"∄",nexists:"∄",Nfr:"𝔑",nfr:"𝔫",ngE:"≧̸",nge:"≱",ngeq:"≱",ngeqq:"≧̸",ngeqslant:"⩾̸",nges:"⩾̸",nGg:"⋙̸",ngsim:"≵",nGt:"≫⃒",ngt:"≯",ngtr:"≯",nGtv:"≫̸",nharr:"↮",nhArr:"⇎",nhpar:"⫲",ni:"∋",nis:"⋼",nisd:"⋺",niv:"∋",NJcy:"Њ",njcy:"њ",nlarr:"↚",nlArr:"⇍",nldr:"‥",nlE:"≦̸",nle:"≰",nleftarrow:"↚",nLeftarrow:"⇍",nleftrightarrow:"↮",nLeftrightarrow:"⇎",nleq:"≰",nleqq:"≦̸",nleqslant:"⩽̸",nles:"⩽̸",nless:"≮",nLl:"⋘̸",nlsim:"≴",nLt:"≪⃒",nlt:"≮",nltri:"⋪",nltrie:"⋬",nLtv:"≪̸",nmid:"∤",NoBreak:"⁠",NonBreakingSpace:" ",nopf:"𝕟",Nopf:"ℕ",Not:"⫬",not:"¬",NotCongruent:"≢",NotCupCap:"≭",NotDoubleVerticalBar:"∦",NotElement:"∉",NotEqual:"≠",NotEqualTilde:"≂̸",NotExists:"∄",NotGreater:"≯",NotGreaterEqual:"≱",NotGreaterFullEqual:"≧̸",NotGreaterGreater:"≫̸",NotGreaterLess:"≹",NotGreaterSlantEqual:"⩾̸",NotGreaterTilde:"≵",NotHumpDownHump:"≎̸",NotHumpEqual:"≏̸",notin:"∉",notindot:"⋵̸",notinE:"⋹̸",notinva:"∉",notinvb:"⋷",notinvc:"⋶",NotLeftTriangleBar:"⧏̸",NotLeftTriangle:"⋪",NotLeftTriangleEqual:"⋬",NotLess:"≮",NotLessEqual:"≰",NotLessGreater:"≸",NotLessLess:"≪̸",NotLessSlantEqual:"⩽̸",NotLessTilde:"≴",NotNestedGreaterGreater:"⪢̸",NotNestedLessLess:"⪡̸",notni:"∌",notniva:"∌",notnivb:"⋾",notnivc:"⋽",NotPrecedes:"⊀",NotPrecedesEqual:"⪯̸",NotPrecedesSlantEqual:"⋠",NotReverseElement:"∌",NotRightTriangleBar:"⧐̸",NotRightTriangle:"⋫",NotRightTriangleEqual:"⋭",NotSquareSubset:"⊏̸",NotSquareSubsetEqual:"⋢",NotSquareSuperset:"⊐̸",NotSquareSupersetEqual:"⋣",NotSubset:"⊂⃒",NotSubsetEqual:"⊈",NotSucceeds:"⊁",NotSucceedsEqual:"⪰̸",NotSucceedsSlantEqual:"⋡",NotSucceedsTilde:"≿̸",NotSuperset:"⊃⃒",NotSupersetEqual:"⊉",NotTilde:"≁",NotTildeEqual:"≄",NotTildeFullEqual:"≇",NotTildeTilde:"≉",NotVerticalBar:"∤",nparallel:"∦",npar:"∦",nparsl:"⫽⃥",npart:"∂̸",npolint:"⨔",npr:"⊀",nprcue:"⋠",nprec:"⊀",npreceq:"⪯̸",npre:"⪯̸",nrarrc:"⤳̸",nrarr:"↛",nrArr:"⇏",nrarrw:"↝̸",nrightarrow:"↛",nRightarrow:"⇏",nrtri:"⋫",nrtrie:"⋭",nsc:"⊁",nsccue:"⋡",nsce:"⪰̸",Nscr:"𝒩",nscr:"𝓃",nshortmid:"∤",nshortparallel:"∦",nsim:"≁",nsime:"≄",nsimeq:"≄",nsmid:"∤",nspar:"∦",nsqsube:"⋢",nsqsupe:"⋣",nsub:"⊄",nsubE:"⫅̸",nsube:"⊈",nsubset:"⊂⃒",nsubseteq:"⊈",nsubseteqq:"⫅̸",nsucc:"⊁",nsucceq:"⪰̸",nsup:"⊅",nsupE:"⫆̸",nsupe:"⊉",nsupset:"⊃⃒",nsupseteq:"⊉",nsupseteqq:"⫆̸",ntgl:"≹",Ntilde:"Ñ",ntilde:"ñ",ntlg:"≸",ntriangleleft:"⋪",ntrianglelefteq:"⋬",ntriangleright:"⋫",ntrianglerighteq:"⋭",Nu:"Ν",nu:"ν",num:"#",numero:"№",numsp:" ",nvap:"≍⃒",nvdash:"⊬",nvDash:"⊭",nVdash:"⊮",nVDash:"⊯",nvge:"≥⃒",nvgt:">⃒",nvHarr:"⤄",nvinfin:"⧞",nvlArr:"⤂",nvle:"≤⃒",nvlt:"<⃒",nvltrie:"⊴⃒",nvrArr:"⤃",nvrtrie:"⊵⃒",nvsim:"∼⃒",nwarhk:"⤣",nwarr:"↖",nwArr:"⇖",nwarrow:"↖",nwnear:"⤧",Oacute:"Ó",oacute:"ó",oast:"⊛",Ocirc:"Ô",ocirc:"ô",ocir:"⊚",Ocy:"О",ocy:"о",odash:"⊝",Odblac:"Ő",odblac:"ő",odiv:"⨸",odot:"⊙",odsold:"⦼",OElig:"Œ",oelig:"œ",ofcir:"⦿",Ofr:"𝔒",ofr:"𝔬",ogon:"˛",Ograve:"Ò",ograve:"ò",ogt:"⧁",ohbar:"⦵",ohm:"Ω",oint:"∮",olarr:"↺",olcir:"⦾",olcross:"⦻",oline:"‾",olt:"⧀",Omacr:"Ō",omacr:"ō",Omega:"Ω",omega:"ω",Omicron:"Ο",omicron:"ο",omid:"⦶",ominus:"⊖",Oopf:"𝕆",oopf:"𝕠",opar:"⦷",OpenCurlyDoubleQuote:"“",OpenCurlyQuote:"‘",operp:"⦹",oplus:"⊕",orarr:"↻",Or:"⩔",or:"∨",ord:"⩝",order:"ℴ",orderof:"ℴ",ordf:"ª",ordm:"º",origof:"⊶",oror:"⩖",orslope:"⩗",orv:"⩛",oS:"Ⓢ",Oscr:"𝒪",oscr:"ℴ",Oslash:"Ø",oslash:"ø",osol:"⊘",Otilde:"Õ",otilde:"õ",otimesas:"⨶",Otimes:"⨷",otimes:"⊗",Ouml:"Ö",ouml:"ö",ovbar:"⌽",OverBar:"‾",OverBrace:"⏞",OverBracket:"⎴",OverParenthesis:"⏜",para:"¶",parallel:"∥",par:"∥",parsim:"⫳",parsl:"⫽",part:"∂",PartialD:"∂",Pcy:"П",pcy:"п",percnt:"%",period:".",permil:"‰",perp:"⊥",pertenk:"‱",Pfr:"𝔓",pfr:"𝔭",Phi:"Φ",phi:"φ",phiv:"ϕ",phmmat:"ℳ",phone:"☎",Pi:"Π",pi:"π",pitchfork:"⋔",piv:"ϖ",planck:"ℏ",planckh:"ℎ",plankv:"ℏ",plusacir:"⨣",plusb:"⊞",pluscir:"⨢",plus:"+",plusdo:"∔",plusdu:"⨥",pluse:"⩲",PlusMinus:"±",plusmn:"±",plussim:"⨦",plustwo:"⨧",pm:"±",Poincareplane:"ℌ",pointint:"⨕",popf:"𝕡",Popf:"ℙ",pound:"£",prap:"⪷",Pr:"⪻",pr:"≺",prcue:"≼",precapprox:"⪷",prec:"≺",preccurlyeq:"≼",Precedes:"≺",PrecedesEqual:"⪯",PrecedesSlantEqual:"≼",PrecedesTilde:"≾",preceq:"⪯",precnapprox:"⪹",precneqq:"⪵",precnsim:"⋨",pre:"⪯",prE:"⪳",precsim:"≾",prime:"′",Prime:"″",primes:"ℙ",prnap:"⪹",prnE:"⪵",prnsim:"⋨",prod:"∏",Product:"∏",profalar:"⌮",profline:"⌒",profsurf:"⌓",prop:"∝",Proportional:"∝",Proportion:"∷",propto:"∝",prsim:"≾",prurel:"⊰",Pscr:"𝒫",pscr:"𝓅",Psi:"Ψ",psi:"ψ",puncsp:" ",Qfr:"𝔔",qfr:"𝔮",qint:"⨌",qopf:"𝕢",Qopf:"ℚ",qprime:"⁗",Qscr:"𝒬",qscr:"𝓆",quaternions:"ℍ",quatint:"⨖",quest:"?",questeq:"≟",quot:'"',QUOT:'"',rAarr:"⇛",race:"∽̱",Racute:"Ŕ",racute:"ŕ",radic:"√",raemptyv:"⦳",rang:"⟩",Rang:"⟫",rangd:"⦒",range:"⦥",rangle:"⟩",raquo:"»",rarrap:"⥵",rarrb:"⇥",rarrbfs:"⤠",rarrc:"⤳",rarr:"→",Rarr:"↠",rArr:"⇒",rarrfs:"⤞",rarrhk:"↪",rarrlp:"↬",rarrpl:"⥅",rarrsim:"⥴",Rarrtl:"⤖",rarrtl:"↣",rarrw:"↝",ratail:"⤚",rAtail:"⤜",ratio:"∶",rationals:"ℚ",rbarr:"⤍",rBarr:"⤏",RBarr:"⤐",rbbrk:"❳",rbrace:"}",rbrack:"]",rbrke:"⦌",rbrksld:"⦎",rbrkslu:"⦐",Rcaron:"Ř",rcaron:"ř",Rcedil:"Ŗ",rcedil:"ŗ",rceil:"⌉",rcub:"}",Rcy:"Р",rcy:"р",rdca:"⤷",rdldhar:"⥩",rdquo:"”",rdquor:"”",rdsh:"↳",real:"ℜ",realine:"ℛ",realpart:"ℜ",reals:"ℝ",Re:"ℜ",rect:"▭",reg:"®",REG:"®",ReverseElement:"∋",ReverseEquilibrium:"⇋",ReverseUpEquilibrium:"⥯",rfisht:"⥽",rfloor:"⌋",rfr:"𝔯",Rfr:"ℜ",rHar:"⥤",rhard:"⇁",rharu:"⇀",rharul:"⥬",Rho:"Ρ",rho:"ρ",rhov:"ϱ",RightAngleBracket:"⟩",RightArrowBar:"⇥",rightarrow:"→",RightArrow:"→",Rightarrow:"⇒",RightArrowLeftArrow:"⇄",rightarrowtail:"↣",RightCeiling:"⌉",RightDoubleBracket:"⟧",RightDownTeeVector:"⥝",RightDownVectorBar:"⥕",RightDownVector:"⇂",RightFloor:"⌋",rightharpoondown:"⇁",rightharpoonup:"⇀",rightleftarrows:"⇄",rightleftharpoons:"⇌",rightrightarrows:"⇉",rightsquigarrow:"↝",RightTeeArrow:"↦",RightTee:"⊢",RightTeeVector:"⥛",rightthreetimes:"⋌",RightTriangleBar:"⧐",RightTriangle:"⊳",RightTriangleEqual:"⊵",RightUpDownVector:"⥏",RightUpTeeVector:"⥜",RightUpVectorBar:"⥔",RightUpVector:"↾",RightVectorBar:"⥓",RightVector:"⇀",ring:"˚",risingdotseq:"≓",rlarr:"⇄",rlhar:"⇌",rlm:"‏",rmoustache:"⎱",rmoust:"⎱",rnmid:"⫮",roang:"⟭",roarr:"⇾",robrk:"⟧",ropar:"⦆",ropf:"𝕣",Ropf:"ℝ",roplus:"⨮",rotimes:"⨵",RoundImplies:"⥰",rpar:")",rpargt:"⦔",rppolint:"⨒",rrarr:"⇉",Rrightarrow:"⇛",rsaquo:"›",rscr:"𝓇",Rscr:"ℛ",rsh:"↱",Rsh:"↱",rsqb:"]",rsquo:"’",rsquor:"’",rthree:"⋌",rtimes:"⋊",rtri:"▹",rtrie:"⊵",rtrif:"▸",rtriltri:"⧎",RuleDelayed:"⧴",ruluhar:"⥨",rx:"℞",Sacute:"Ś",sacute:"ś",sbquo:"‚",scap:"⪸",Scaron:"Š",scaron:"š",Sc:"⪼",sc:"≻",sccue:"≽",sce:"⪰",scE:"⪴",Scedil:"Ş",scedil:"ş",Scirc:"Ŝ",scirc:"ŝ",scnap:"⪺",scnE:"⪶",scnsim:"⋩",scpolint:"⨓",scsim:"≿",Scy:"С",scy:"с",sdotb:"⊡",sdot:"⋅",sdote:"⩦",searhk:"⤥",searr:"↘",seArr:"⇘",searrow:"↘",sect:"§",semi:";",seswar:"⤩",setminus:"∖",setmn:"∖",sext:"✶",Sfr:"𝔖",sfr:"𝔰",sfrown:"⌢",sharp:"♯",SHCHcy:"Щ",shchcy:"щ",SHcy:"Ш",shcy:"ш",ShortDownArrow:"↓",ShortLeftArrow:"←",shortmid:"∣",shortparallel:"∥",ShortRightArrow:"→",ShortUpArrow:"↑",shy:"­",Sigma:"Σ",sigma:"σ",sigmaf:"ς",sigmav:"ς",sim:"∼",simdot:"⩪",sime:"≃",simeq:"≃",simg:"⪞",simgE:"⪠",siml:"⪝",simlE:"⪟",simne:"≆",simplus:"⨤",simrarr:"⥲",slarr:"←",SmallCircle:"∘",smallsetminus:"∖",smashp:"⨳",smeparsl:"⧤",smid:"∣",smile:"⌣",smt:"⪪",smte:"⪬",smtes:"⪬︀",SOFTcy:"Ь",softcy:"ь",solbar:"⌿",solb:"⧄",sol:"/",Sopf:"𝕊",sopf:"𝕤",spades:"♠",spadesuit:"♠",spar:"∥",sqcap:"⊓",sqcaps:"⊓︀",sqcup:"⊔",sqcups:"⊔︀",Sqrt:"√",sqsub:"⊏",sqsube:"⊑",sqsubset:"⊏",sqsubseteq:"⊑",sqsup:"⊐",sqsupe:"⊒",sqsupset:"⊐",sqsupseteq:"⊒",square:"□",Square:"□",SquareIntersection:"⊓",SquareSubset:"⊏",SquareSubsetEqual:"⊑",SquareSuperset:"⊐",SquareSupersetEqual:"⊒",SquareUnion:"⊔",squarf:"▪",squ:"□",squf:"▪",srarr:"→",Sscr:"𝒮",sscr:"𝓈",ssetmn:"∖",ssmile:"⌣",sstarf:"⋆",Star:"⋆",star:"☆",starf:"★",straightepsilon:"ϵ",straightphi:"ϕ",strns:"¯",sub:"⊂",Sub:"⋐",subdot:"⪽",subE:"⫅",sube:"⊆",subedot:"⫃",submult:"⫁",subnE:"⫋",subne:"⊊",subplus:"⪿",subrarr:"⥹",subset:"⊂",Subset:"⋐",subseteq:"⊆",subseteqq:"⫅",SubsetEqual:"⊆",subsetneq:"⊊",subsetneqq:"⫋",subsim:"⫇",subsub:"⫕",subsup:"⫓",succapprox:"⪸",succ:"≻",succcurlyeq:"≽",Succeeds:"≻",SucceedsEqual:"⪰",SucceedsSlantEqual:"≽",SucceedsTilde:"≿",succeq:"⪰",succnapprox:"⪺",succneqq:"⪶",succnsim:"⋩",succsim:"≿",SuchThat:"∋",sum:"∑",Sum:"∑",sung:"♪",sup1:"¹",sup2:"²",sup3:"³",sup:"⊃",Sup:"⋑",supdot:"⪾",supdsub:"⫘",supE:"⫆",supe:"⊇",supedot:"⫄",Superset:"⊃",SupersetEqual:"⊇",suphsol:"⟉",suphsub:"⫗",suplarr:"⥻",supmult:"⫂",supnE:"⫌",supne:"⊋",supplus:"⫀",supset:"⊃",Supset:"⋑",supseteq:"⊇",supseteqq:"⫆",supsetneq:"⊋",supsetneqq:"⫌",supsim:"⫈",supsub:"⫔",supsup:"⫖",swarhk:"⤦",swarr:"↙",swArr:"⇙",swarrow:"↙",swnwar:"⤪",szlig:"ß",Tab:"\t",target:"⌖",Tau:"Τ",tau:"τ",tbrk:"⎴",Tcaron:"Ť",tcaron:"ť",Tcedil:"Ţ",tcedil:"ţ",Tcy:"Т",tcy:"т",tdot:"⃛",telrec:"⌕",Tfr:"𝔗",tfr:"𝔱",there4:"∴",therefore:"∴",Therefore:"∴",Theta:"Θ",theta:"θ",thetasym:"ϑ",thetav:"ϑ",thickapprox:"≈",thicksim:"∼",ThickSpace:"  ",ThinSpace:" ",thinsp:" ",thkap:"≈",thksim:"∼",THORN:"Þ",thorn:"þ",tilde:"˜",Tilde:"∼",TildeEqual:"≃",TildeFullEqual:"≅",TildeTilde:"≈",timesbar:"⨱",timesb:"⊠",times:"×",timesd:"⨰",tint:"∭",toea:"⤨",topbot:"⌶",topcir:"⫱",top:"⊤",Topf:"𝕋",topf:"𝕥",topfork:"⫚",tosa:"⤩",tprime:"‴",trade:"™",TRADE:"™",triangle:"▵",triangledown:"▿",triangleleft:"◃",trianglelefteq:"⊴",triangleq:"≜",triangleright:"▹",trianglerighteq:"⊵",tridot:"◬",trie:"≜",triminus:"⨺",TripleDot:"⃛",triplus:"⨹",trisb:"⧍",tritime:"⨻",trpezium:"⏢",Tscr:"𝒯",tscr:"𝓉",TScy:"Ц",tscy:"ц",TSHcy:"Ћ",tshcy:"ћ",Tstrok:"Ŧ",tstrok:"ŧ",twixt:"≬",twoheadleftarrow:"↞",twoheadrightarrow:"↠",Uacute:"Ú",uacute:"ú",uarr:"↑",Uarr:"↟",uArr:"⇑",Uarrocir:"⥉",Ubrcy:"Ў",ubrcy:"ў",Ubreve:"Ŭ",ubreve:"ŭ",Ucirc:"Û",ucirc:"û",Ucy:"У",ucy:"у",udarr:"⇅",Udblac:"Ű",udblac:"ű",udhar:"⥮",ufisht:"⥾",Ufr:"𝔘",ufr:"𝔲",Ugrave:"Ù",ugrave:"ù",uHar:"⥣",uharl:"↿",uharr:"↾",uhblk:"▀",ulcorn:"⌜",ulcorner:"⌜",ulcrop:"⌏",ultri:"◸",Umacr:"Ū",umacr:"ū",uml:"¨",UnderBar:"_",UnderBrace:"⏟",UnderBracket:"⎵",UnderParenthesis:"⏝",Union:"⋃",UnionPlus:"⊎",Uogon:"Ų",uogon:"ų",Uopf:"𝕌",uopf:"𝕦",UpArrowBar:"⤒",uparrow:"↑",UpArrow:"↑",Uparrow:"⇑",UpArrowDownArrow:"⇅",updownarrow:"↕",UpDownArrow:"↕",Updownarrow:"⇕",UpEquilibrium:"⥮",upharpoonleft:"↿",upharpoonright:"↾",uplus:"⊎",UpperLeftArrow:"↖",UpperRightArrow:"↗",upsi:"υ",Upsi:"ϒ",upsih:"ϒ",Upsilon:"Υ",upsilon:"υ",UpTeeArrow:"↥",UpTee:"⊥",upuparrows:"⇈",urcorn:"⌝",urcorner:"⌝",urcrop:"⌎",Uring:"Ů",uring:"ů",urtri:"◹",Uscr:"𝒰",uscr:"𝓊",utdot:"⋰",Utilde:"Ũ",utilde:"ũ",utri:"▵",utrif:"▴",uuarr:"⇈",Uuml:"Ü",uuml:"ü",uwangle:"⦧",vangrt:"⦜",varepsilon:"ϵ",varkappa:"ϰ",varnothing:"∅",varphi:"ϕ",varpi:"ϖ",varpropto:"∝",varr:"↕",vArr:"⇕",varrho:"ϱ",varsigma:"ς",varsubsetneq:"⊊︀",varsubsetneqq:"⫋︀",varsupsetneq:"⊋︀",varsupsetneqq:"⫌︀",vartheta:"ϑ",vartriangleleft:"⊲",vartriangleright:"⊳",vBar:"⫨",Vbar:"⫫",vBarv:"⫩",Vcy:"В",vcy:"в",vdash:"⊢",vDash:"⊨",Vdash:"⊩",VDash:"⊫",Vdashl:"⫦",veebar:"⊻",vee:"∨",Vee:"⋁",veeeq:"≚",vellip:"⋮",verbar:"|",Verbar:"‖",vert:"|",Vert:"‖",VerticalBar:"∣",VerticalLine:"|",VerticalSeparator:"❘",VerticalTilde:"≀",VeryThinSpace:" ",Vfr:"𝔙",vfr:"𝔳",vltri:"⊲",vnsub:"⊂⃒",vnsup:"⊃⃒",Vopf:"𝕍",vopf:"𝕧",vprop:"∝",vrtri:"⊳",Vscr:"𝒱",vscr:"𝓋",vsubnE:"⫋︀",vsubne:"⊊︀",vsupnE:"⫌︀",vsupne:"⊋︀",Vvdash:"⊪",vzigzag:"⦚",Wcirc:"Ŵ",wcirc:"ŵ",wedbar:"⩟",wedge:"∧",Wedge:"⋀",wedgeq:"≙",weierp:"℘",Wfr:"𝔚",wfr:"𝔴",Wopf:"𝕎",wopf:"𝕨",wp:"℘",wr:"≀",wreath:"≀",Wscr:"𝒲",wscr:"𝓌",xcap:"⋂",xcirc:"◯",xcup:"⋃",xdtri:"▽",Xfr:"𝔛",xfr:"𝔵",xharr:"⟷",xhArr:"⟺",Xi:"Ξ",xi:"ξ",xlarr:"⟵",xlArr:"⟸",xmap:"⟼",xnis:"⋻",xodot:"⨀",Xopf:"𝕏",xopf:"𝕩",xoplus:"⨁",xotime:"⨂",xrarr:"⟶",xrArr:"⟹",Xscr:"𝒳",xscr:"𝓍",xsqcup:"⨆",xuplus:"⨄",xutri:"△",xvee:"⋁",xwedge:"⋀",Yacute:"Ý",yacute:"ý",YAcy:"Я",yacy:"я",Ycirc:"Ŷ",ycirc:"ŷ",Ycy:"Ы",ycy:"ы",yen:"¥",Yfr:"𝔜",yfr:"𝔶",YIcy:"Ї",yicy:"ї",Yopf:"𝕐",yopf:"𝕪",Yscr:"𝒴",yscr:"𝓎",YUcy:"Ю",yucy:"ю",yuml:"ÿ",Yuml:"Ÿ",Zacute:"Ź",zacute:"ź",Zcaron:"Ž",zcaron:"ž",Zcy:"З",zcy:"з",Zdot:"Ż",zdot:"ż",zeetrf:"ℨ",ZeroWidthSpace:"​",Zeta:"Ζ",zeta:"ζ",zfr:"𝔷",Zfr:"ℨ",ZHcy:"Ж",zhcy:"ж",zigrarr:"⇝",zopf:"𝕫",Zopf:"ℤ",Zscr:"𝒵",zscr:"𝓏",zwj:"‍",zwnj:"‌"},n=/[!-#%-\*,-\/:;\?@\[-\]_\{\}\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u09FD\u0A76\u0AF0\u0C84\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E4E\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD803[\uDF55-\uDF59]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC8\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDC4B-\uDC4F\uDC5B\uDC5D\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDE60-\uDE6C\uDF3C-\uDF3E]|\uD806[\uDC3B\uDE3F-\uDE46\uDE9A-\uDE9C\uDE9E-\uDEA2]|\uD807[\uDC41-\uDC45\uDC70\uDC71\uDEF7\uDEF8]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD81B[\uDE97-\uDE9A]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]|\uD83A[\uDD5E\uDD5F]/,s={},o={};function i(e,r,t){var n,s,a,c,l,u="";for("string"!=typeof r&&(t=r,r=i.defaultChars),void 0===t&&(t=!0),l=function(e){var r,t,n=o[e];if(n)return n;for(n=o[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),/^[0-9a-z]$/i.test(t)?n.push(t):n.push("%"+("0"+r.toString(16).toUpperCase()).slice(-2));for(r=0;r=55296&&a<=57343){if(a>=55296&&a<=56319&&n+1=56320&&c<=57343){u+=encodeURIComponent(e[n]+e[n+1]),n++;continue}u+="%EF%BF%BD"}else u+=encodeURIComponent(e[n]);return u}i.defaultChars=";/?:@&=+$,-_.!~*'()#",i.componentChars="-_.!~*'()";var a=i,c={};function l(e,r){var t;return"string"!=typeof r&&(r=l.defaultChars),t=function(e){var r,t,n=c[e];if(n)return n;for(n=c[e]=[],r=0;r<128;r++)t=String.fromCharCode(r),n.push(t);for(r=0;r=55296&&c<=57343?"���":String.fromCharCode(c),r+=6):240==(248&s)&&r+91114111?l+="����":(c-=65536,l+=String.fromCharCode(55296+(c>>10),56320+(1023&c))),r+=9):l+="�";return l}))}l.defaultChars=";/?:@&=+$,#",l.componentChars="";var u=l;function p(){this.protocol=null,this.slashes=null,this.auth=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.pathname=null}var h=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,d=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,m=["{","}","|","\\","^","`"].concat(["<",">",'"',"`"," ","\r","\n","\t"]),g=["'"].concat(m),_=["%","/","?",";","#"].concat(g),k=["/","?","#"],b=/^[+a-z0-9A-Z_-]{0,63}$/,v=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,C={javascript:!0,"javascript:":!0},y={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0};p.prototype.parse=function(e,r){var t,n,s,o,i,a=e;if(a=a.trim(),!r&&1===e.split("#").length){var c=d.exec(a);if(c)return this.pathname=c[1],c[2]&&(this.search=c[2]),this}var l=h.exec(a);if(l&&(s=(l=l[0]).toLowerCase(),this.protocol=l,a=a.substr(l.length)),(r||l||a.match(/^\/\/[^@\/]+@[^@\/]+/))&&(!(i="//"===a.substr(0,2))||l&&C[l]||(a=a.substr(2),this.slashes=!0)),!C[l]&&(i||l&&!y[l])){var u,p,f=-1;for(t=0;t127?D+="x":D+=x[w];if(!D.match(b)){var q=A.slice(0,t),S=A.slice(t+1),F=x.match(v);F&&(q.push(F[1]),S.unshift(F[2])),S.length&&(a=S.join(".")+a),this.hostname=q.join(".");break}}}}this.hostname.length>255&&(this.hostname=""),g&&(this.hostname=this.hostname.substr(1,this.hostname.length-2))}var L=a.indexOf("#");-1!==L&&(this.hash=a.substr(L),a=a.slice(0,L));var z=a.indexOf("?");return-1!==z&&(this.search=a.substr(z),a=a.slice(0,z)),a&&(this.pathname=a),y[s]&&this.hostname&&!this.pathname&&(this.pathname=""),this},p.prototype.parseHost=function(e){var r=f.exec(e);r&&(":"!==(r=r[0])&&(this.port=r.substr(1)),e=e.substr(0,e.length-r.length)),e&&(this.hostname=e)};var A=function(e,r){if(e&&e instanceof p)return e;var t=new p;return t.parse(e,r),t};s.encode=a,s.decode=u,s.format=function(e){var r="";return r+=e.protocol||"",r+=e.slashes?"//":"",r+=e.auth?e.auth+"@":"",e.hostname&&-1!==e.hostname.indexOf(":")?r+="["+e.hostname+"]":r+=e.hostname||"",r+=e.port?":"+e.port:"",r+=e.pathname||"",r+=e.search||"",r+=e.hash||""},s.parse=A;var x={},D=/[\0-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,w=/[\0-\x1F\x7F-\x9F]/,E=/[ \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000]/;x.Any=D,x.Cc=w,x.Cf=/[\xAD\u0600-\u0605\u061C\u06DD\u070F\u08E2\u180E\u200B-\u200F\u202A-\u202E\u2060-\u2064\u2066-\u206F\uFEFF\uFFF9-\uFFFB]|\uD804[\uDCBD\uDCCD]|\uD82F[\uDCA0-\uDCA3]|\uD834[\uDD73-\uDD7A]|\uDB40[\uDC01\uDC20-\uDC7F]/,x.P=n,x.Z=E,function(e){var r=Object.prototype.hasOwnProperty;function o(e,t){return r.call(e,t)}function i(e){return!(e>=55296&&e<=57343)&&(!(e>=64976&&e<=65007)&&(65535!=(65535&e)&&65534!=(65535&e)&&(!(e>=0&&e<=8)&&(11!==e&&(!(e>=14&&e<=31)&&(!(e>=127&&e<=159)&&!(e>1114111)))))))}function a(e){if(e>65535){var r=55296+((e-=65536)>>10),t=56320+(1023&e);return String.fromCharCode(r,t)}return String.fromCharCode(e)}var c=/\\([!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~])/g,l=new RegExp(c.source+"|"+/&([a-z#][a-z0-9]{1,31});/gi.source,"gi"),u=/^#((?:x[a-f0-9]{1,8}|[0-9]{1,8}))/i,p=t;var h=/[&<>"]/,f=/[&<>"]/g,d={"&":"&","<":"<",">":">",'"':"""};function m(e){return d[e]}var g=/[.?*+^$[\]\\(){}|-]/g;var _=n;e.lib={},e.lib.mdurl=s,e.lib.ucmicro=x,e.assign=function(e){var r=Array.prototype.slice.call(arguments,1);return r.forEach((function(r){if(r){if("object"!=typeof r)throw new TypeError(r+"must be object");Object.keys(r).forEach((function(t){e[t]=r[t]}))}})),e},e.isString=function(e){return"[object String]"===function(e){return Object.prototype.toString.call(e)}(e)},e.has=o,e.unescapeMd=function(e){return e.indexOf("\\")<0?e:e.replace(c,"$1")},e.unescapeAll=function(e){return e.indexOf("\\")<0&&e.indexOf("&")<0?e:e.replace(l,(function(e,r,t){return r||function(e,r){var t=0;return o(p,r)?p[r]:35===r.charCodeAt(0)&&u.test(r)&&i(t="x"===r[1].toLowerCase()?parseInt(r.slice(2),16):parseInt(r.slice(1),10))?a(t):e}(e,t)}))},e.isValidEntityCode=i,e.fromCodePoint=a,e.escapeHtml=function(e){return h.test(e)?e.replace(f,m):e},e.arrayReplaceAt=function(e,r,t){return[].concat(e.slice(0,r),t,e.slice(r+1))},e.isSpace=function(e){switch(e){case 9:case 32:return!0}return!1},e.isWhiteSpace=function(e){if(e>=8192&&e<=8202)return!0;switch(e){case 9:case 10:case 11:case 12:case 13:case 32:case 160:case 5760:case 8239:case 8287:case 12288:return!0}return!1},e.isMdAsciiPunct=function(e){switch(e){case 33:case 34:case 35:case 36:case 37:case 38:case 39:case 40:case 41:case 42:case 43:case 44:case 45:case 46:case 47:case 58:case 59:case 60:case 61:case 62:case 63:case 64:case 91:case 92:case 93:case 94:case 95:case 96:case 123:case 124:case 125:case 126:return!0;default:return!1}},e.isPunctChar=function(e){return _.test(e)},e.escapeRE=function(e){return e.replace(g,"\\$&")},e.normalizeReference=function(e){return e=e.trim().replace(/\s+/g," "),"Ṿ"==="ẞ".toLowerCase()&&(e=e.replace(/ẞ/g,"ß")),e.toLowerCase().toUpperCase()}}(r);var q={},S=r.unescapeAll,F=r.unescapeAll;q.parseLinkLabel=function(e,r,t){var n,s,o,i,a=-1,c=e.posMax,l=e.pos;for(e.pos=r+1,n=1;e.pos32)return i;if(41===n){if(0===s)break;s--}r++}return o===r||0!==s||(i.str=S(e.slice(o,r)),i.lines=0,i.pos=r,i.ok=!0),i},q.parseLinkTitle=function(e,r,t){var n,s,o=0,i=r,a={ok:!1,pos:0,lines:0,str:""};if(r>=t)return a;if(34!==(s=e.charCodeAt(r))&&39!==s&&40!==s)return a;for(r++,40===s&&(s=41);r"+T(e[r].content)+""},I.code_block=function(e,r,t,n,s){var o=e[r];return""+T(e[r].content)+"\n"},I.fence=function(e,r,t,n,s){var o,i,a,c,l,u=e[r],p=u.info?z(u.info).trim():"",h="",f="";return p&&(h=(a=p.split(/(\s+)/g))[0],f=a.slice(2).join("")),0===(o=t.highlight&&t.highlight(u.content,h,f)||T(u.content)).indexOf(""+o+"\n"):"
"+o+"
\n"},I.image=function(e,r,t,n,s){var o=e[r];return o.attrs[o.attrIndex("alt")][1]=s.renderInlineAsText(o.children,t,n),s.renderToken(e,r,t)},I.hardbreak=function(e,r,t){return t.xhtmlOut?"
\n":"
\n"},I.softbreak=function(e,r,t){return t.breaks?t.xhtmlOut?"
\n":"
\n":"\n"},I.text=function(e,r){return T(e[r].content)},I.html_block=function(e,r){return e[r].content},I.html_inline=function(e,r){return e[r].content},M.prototype.renderAttrs=function(e){var r,t,n;if(!e.attrs)return"";for(n="",r=0,t=e.attrs.length;r\n":">")},M.prototype.renderInline=function(e,r,t){for(var n,s="",o=this.rules,i=0,a=e.length;i/i.test(e)}var V=/\+-|\.\.|\?\?\?\?|!!!!|,,|--/,Z=/\((c|tm|r)\)/i,$=/\((c|tm|r)\)/gi,G={c:"©",r:"®",tm:"™"};function H(e,r){return G[r.toLowerCase()]}function J(e){var r,t,n=0;for(r=e.length-1;r>=0;r--)"text"!==(t=e[r]).type||n||(t.content=t.content.replace($,H)),"link_open"===t.type&&"auto"===t.info&&n--,"link_close"===t.type&&"auto"===t.info&&n++}function W(e){var r,t,n=0;for(r=e.length-1;r>=0;r--)"text"!==(t=e[r]).type||n||V.test(t.content)&&(t.content=t.content.replace(/\+-/g,"±").replace(/\.{2,}/g,"…").replace(/([?!])…/g,"$1..").replace(/([?!]){4,}/g,"$1$1$1").replace(/,{2,}/g,",").replace(/(^|[^-])---(?=[^-]|$)/gm,"$1—").replace(/(^|\s)--(?=\s|$)/gm,"$1–").replace(/(^|[^-\s])--(?=[^-\s]|$)/gm,"$1–")),"link_open"===t.type&&"auto"===t.info&&n--,"link_close"===t.type&&"auto"===t.info&&n++}var Y=r.isWhiteSpace,K=r.isPunctChar,Q=r.isMdAsciiPunct,X=/['"]/,ee=/['"]/g;function re(e,r,t){return e.slice(0,r)+t+e.slice(r+1)}function te(e,r){var t,n,s,o,i,a,c,l,u,p,h,f,d,m,g,_,k,b,v,C,y;for(v=[],t=0;t=0&&!(v[k].level<=c);k--);if(v.length=k+1,"text"===n.type){i=0,a=(s=n.content).length;e:for(;i=0)u=s.charCodeAt(o.index-1);else for(k=t-1;k>=0&&("softbreak"!==e[k].type&&"hardbreak"!==e[k].type);k--)if(e[k].content){u=e[k].content.charCodeAt(e[k].content.length-1);break}if(p=32,i=48&&u<=57&&(_=g=!1),g&&_&&(g=h,_=f),g||_){if(_)for(k=v.length-1;k>=0&&(l=v[k],!(v[k].level=0&&(t=this.attrs[r][1]),t},ne.prototype.attrJoin=function(e,r){var t=this.attrIndex(e);t<0?this.attrPush([e,r]):this.attrs[t][1]=this.attrs[t][1]+" "+r};var se=ne,oe=se;function ie(e,r,t){this.src=e,this.env=t,this.tokens=[],this.inlineMode=!1,this.md=r}ie.prototype.Token=oe;var ae=ie,ce=N,le=[["normalize",function(e){var r;r=(r=e.src.replace(O,"\n")).replace(P,"�"),e.src=r}],["block",function(e){var r;e.inlineMode?((r=new e.Token("inline","",0)).content=e.src,r.map=[0,1],r.children=[],e.tokens.push(r)):e.md.block.parse(e.src,e.md,e.env,e.tokens)}],["inline",function(e){var r,t,n,s=e.tokens;for(t=0,n=s.length;t=0;r--)if("link_close"!==(i=s[r]).type){if("html_inline"===i.type&&(k=i.content,/^\s]/i.test(k)&&f>0&&f--,U(i.content)&&f++),!(f>0)&&"text"===i.type&&e.md.linkify.test(i.content)){for(l=i.content,_=e.md.linkify.match(l),a=[],h=i.level,p=0,_.length>0&&0===_[0].index&&r>0&&"text_special"===s[r-1].type&&(_=_.slice(1)),c=0;c<_.length;c++)d=_[c].url,m=e.md.normalizeLink(d),e.md.validateLink(m)&&(g=_[c].text,g=_[c].schema?"mailto:"!==_[c].schema||/^mailto:/i.test(g)?e.md.normalizeLinkText(g):e.md.normalizeLinkText("mailto:"+g).replace(/^mailto:/,""):e.md.normalizeLinkText("http://"+g).replace(/^http:\/\//,""),(u=_[c].index)>p&&((o=new e.Token("text","",0)).content=l.slice(p,u),o.level=h,a.push(o)),(o=new e.Token("link_open","a",1)).attrs=[["href",m]],o.level=h++,o.markup="linkify",o.info="auto",a.push(o),(o=new e.Token("text","",0)).content=g,o.level=h,a.push(o),(o=new e.Token("link_close","a",-1)).level=--h,o.markup="linkify",o.info="auto",a.push(o),p=_[c].lastIndex);p=0;r--)"inline"===e.tokens[r].type&&(Z.test(e.tokens[r].content)&&J(e.tokens[r].children),V.test(e.tokens[r].content)&&W(e.tokens[r].children))}],["smartquotes",function(e){var r;if(e.md.options.typographer)for(r=e.tokens.length-1;r>=0;r--)"inline"===e.tokens[r].type&&X.test(e.tokens[r].content)&&te(e.tokens[r].children,e)}],["text_join",function(e){var r,t,n,s,o,i,a=e.tokens;for(r=0,t=a.length;r=o)return-1;if((t=e.src.charCodeAt(s++))<48||t>57)return-1;for(;;){if(s>=o)return-1;if(!((t=e.src.charCodeAt(s++))>=48&&t<=57)){if(41===t||46===t)break;return-1}if(s-n>=10)return-1}return s`\\x00-\\x20]+|'[^']*'|\"[^\"]*\"))?)*\\s*\\/?>",xe="<\\/[A-Za-z][A-Za-z0-9\\-]*\\s*>",De=new RegExp("^(?:"+Ae+"|"+xe+"|\x3c!----\x3e|\x3c!--(?:-?[^>-])(?:-?[^-])*--\x3e|<[?][\\s\\S]*?[?]>|]*>|)"),we=new RegExp("^(?:"+Ae+"|"+xe+")");ye.HTML_TAG_RE=De,ye.HTML_OPEN_CLOSE_TAG_RE=we;var Ee=["address","article","aside","base","basefont","blockquote","body","caption","center","col","colgroup","dd","details","dialog","dir","div","dl","dt","fieldset","figcaption","figure","footer","form","frame","frameset","h1","h2","h3","h4","h5","h6","head","header","hr","html","iframe","legend","li","link","main","menu","menuitem","nav","noframes","ol","optgroup","option","p","param","section","source","summary","table","tbody","td","tfoot","th","thead","title","tr","track","ul"],qe=ye.HTML_OPEN_CLOSE_TAG_RE,Se=[[/^<(script|pre|style|textarea)(?=(\s|>|$))/i,/<\/(script|pre|style|textarea)>/i,!0],[/^/,!0],[/^<\?/,/\?>/,!0],[/^/,!0],[/^/,!0],[new RegExp("^|$))","i"),/^$/,!0],[new RegExp(qe.source+"\\s*$"),/^$/,!1]],Fe=r.isSpace,Le=se,ze=r.isSpace;function Te(e,r,t,n){var s,o,i,a,c,l,u,p;for(this.src=e,this.md=r,this.env=t,this.tokens=n,this.bMarks=[],this.eMarks=[],this.tShift=[],this.sCount=[],this.bsCount=[],this.blkIndent=0,this.line=0,this.lineMax=0,this.tight=!1,this.ddIndent=-1,this.listIndent=-1,this.parentType="root",this.level=0,this.result="",p=!1,i=a=l=u=0,c=(o=this.src).length;a0&&this.level++,this.tokens.push(n),n},Te.prototype.isEmpty=function(e){return this.bMarks[e]+this.tShift[e]>=this.eMarks[e]},Te.prototype.skipEmptyLines=function(e){for(var r=this.lineMax;er;)if(!ze(this.src.charCodeAt(--e)))return e+1;return e},Te.prototype.skipChars=function(e,r){for(var t=this.src.length;et;)if(r!==this.src.charCodeAt(--e))return e+1;return e},Te.prototype.getLines=function(e,r,t,n){var s,o,i,a,c,l,u,p=e;if(e>=r)return"";for(l=new Array(r-e),s=0;pt?new Array(o-t+1).join(" ")+this.src.slice(a,c):this.src.slice(a,c)}return l.join("")},Te.prototype.Token=Le;var Ie=Te,Me=N,Re=[["table",function(e,r,t,n){var s,o,i,a,c,l,u,p,h,f,d,m,g,_,k,b,v,C;if(r+2>t)return!1;if(l=r+1,e.sCount[l]=4)return!1;if((i=e.bMarks[l]+e.tShift[l])>=e.eMarks[l])return!1;if(124!==(v=e.src.charCodeAt(i++))&&45!==v&&58!==v)return!1;if(i>=e.eMarks[l])return!1;if(124!==(C=e.src.charCodeAt(i++))&&45!==C&&58!==C&&!he(C))return!1;if(45===v&&he(C))return!1;for(;i=4)return!1;if((u=de(o)).length&&""===u[0]&&u.shift(),u.length&&""===u[u.length-1]&&u.pop(),0===(p=u.length)||p!==f.length)return!1;if(n)return!0;for(_=e.parentType,e.parentType="table",b=e.md.block.ruler.getRules("blockquote"),(h=e.push("table_open","table",1)).map=m=[r,0],(h=e.push("thead_open","thead",1)).map=[r,r+1],(h=e.push("tr_open","tr",1)).map=[r,r+1],a=0;a=4)break;for((u=de(o)).length&&""===u[0]&&u.shift(),u.length&&""===u[u.length-1]&&u.pop(),l===r+2&&((h=e.push("tbody_open","tbody",1)).map=g=[r+2,0]),(h=e.push("tr_open","tr",1)).map=[l,l+1],a=0;a=4))break;s=++n}return e.line=s,(o=e.push("code_block","code",0)).content=e.getLines(r,s,4+e.blkIndent,!1)+"\n",o.map=[r,e.line],!0}],["fence",function(e,r,t,n){var s,o,i,a,c,l,u,p=!1,h=e.bMarks[r]+e.tShift[r],f=e.eMarks[r];if(e.sCount[r]-e.blkIndent>=4)return!1;if(h+3>f)return!1;if(126!==(s=e.src.charCodeAt(h))&&96!==s)return!1;if(c=h,(o=(h=e.skipChars(h,s))-c)<3)return!1;if(u=e.src.slice(c,h),i=e.src.slice(h,f),96===s&&i.indexOf(String.fromCharCode(s))>=0)return!1;if(n)return!0;for(a=r;!(++a>=t)&&!((h=c=e.bMarks[a]+e.tShift[a])<(f=e.eMarks[a])&&e.sCount[a]=4||(h=e.skipChars(h,s))-c=4)return!1;if(62!==e.src.charCodeAt(D++))return!1;if(n)return!0;for(a=h=e.sCount[r]+1,32===e.src.charCodeAt(D)?(D++,a++,h++,s=!1,b=!0):9===e.src.charCodeAt(D)?(b=!0,(e.bsCount[r]+h)%4==3?(D++,a++,h++,s=!1):s=!0):b=!1,f=[e.bMarks[r]],e.bMarks[r]=D;D=w,_=[e.sCount[r]],e.sCount[r]=h-a,k=[e.tShift[r]],e.tShift[r]=D-e.bMarks[r],C=e.md.block.ruler.getRules("blockquote"),g=e.parentType,e.parentType="blockquote",p=r+1;p=(w=e.eMarks[p])));p++)if(62!==e.src.charCodeAt(D++)||A){if(l)break;for(v=!1,i=0,c=C.length;i=w,d.push(e.bsCount[p]),e.bsCount[p]=e.sCount[p]+1+(b?1:0),_.push(e.sCount[p]),e.sCount[p]=h-a,k.push(e.tShift[p]),e.tShift[p]=D-e.bMarks[p]}for(m=e.blkIndent,e.blkIndent=0,(y=e.push("blockquote_open","blockquote",1)).markup=">",y.map=u=[r,0],e.md.block.tokenize(e,r,p),(y=e.push("blockquote_close","blockquote",-1)).markup=">",e.lineMax=x,e.parentType=g,u[1]=e.line,i=0;i=4)return!1;if(42!==(s=e.src.charCodeAt(c++))&&45!==s&&95!==s)return!1;for(o=1;c=4)return!1;if(e.listIndent>=0&&e.sCount[r]-e.listIndent>=4&&e.sCount[r]=e.blkIndent&&(z=!0),(w=be(e,r))>=0){if(u=!0,q=e.bMarks[r]+e.tShift[r],g=Number(e.src.slice(q,w-1)),z&&1!==g)return!1}else{if(!((w=ke(e,r))>=0))return!1;u=!1}if(z&&e.skipSpaces(w)>=e.eMarks[r])return!1;if(m=e.src.charCodeAt(w-1),n)return!0;for(d=e.tokens.length,u?(L=e.push("ordered_list_open","ol",1),1!==g&&(L.attrs=[["start",g]])):L=e.push("bullet_list_open","ul",1),L.map=f=[r,0],L.markup=String.fromCharCode(m),k=r,E=!1,F=e.md.block.ruler.getRules("list"),C=e.parentType,e.parentType="list";k=_?1:b-l)>4&&(c=1),a=l+c,(L=e.push("list_item_open","li",1)).markup=String.fromCharCode(m),L.map=p=[r,0],u&&(L.info=e.src.slice(q,w-1)),x=e.tight,A=e.tShift[r],y=e.sCount[r],v=e.listIndent,e.listIndent=e.blkIndent,e.blkIndent=a,e.tight=!0,e.tShift[r]=o-e.bMarks[r],e.sCount[r]=b,o>=_&&e.isEmpty(r+1)?e.line=Math.min(e.line+2,t):e.md.block.tokenize(e,r,t,!0),e.tight&&!E||(T=!1),E=e.line-r>1&&e.isEmpty(e.line-1),e.blkIndent=e.listIndent,e.listIndent=v,e.tShift[r]=A,e.sCount[r]=y,e.tight=x,(L=e.push("list_item_close","li",-1)).markup=String.fromCharCode(m),k=r=e.line,p[1]=k,o=e.bMarks[r],k>=t)break;if(e.sCount[k]=4)break;for(S=!1,i=0,h=F.length;i=4)return!1;if(91!==e.src.charCodeAt(C))return!1;for(;++C3||e.sCount[A]<0)){for(_=!1,l=0,u=k.length;l=4)return!1;if(!e.md.options.html)return!1;if(60!==e.src.charCodeAt(c))return!1;for(a=e.src.slice(c,l),s=0;s=4)return!1;if(35!==(s=e.src.charCodeAt(c))||c>=l)return!1;for(o=1,s=e.src.charCodeAt(++c);35===s&&c6||cc&&Fe(e.src.charCodeAt(i-1))&&(l=i),e.line=r+1,(a=e.push("heading_open","h"+String(o),1)).markup="########".slice(0,o),a.map=[r,e.line],(a=e.push("inline","",0)).content=e.src.slice(c,l).trim(),a.map=[r,e.line],a.children=[],(a=e.push("heading_close","h"+String(o),-1)).markup="########".slice(0,o)),!0)},["paragraph","reference","blockquote"]],["lheading",function(e,r,t){var n,s,o,i,a,c,l,u,p,h,f=r+1,d=e.md.block.ruler.getRules("paragraph");if(e.sCount[r]-e.blkIndent>=4)return!1;for(h=e.parentType,e.parentType="paragraph";f3)){if(e.sCount[f]>=e.blkIndent&&(c=e.bMarks[f]+e.tShift[f])<(l=e.eMarks[f])&&(45===(p=e.src.charCodeAt(c))||61===p)&&(c=e.skipChars(c,p),(c=e.skipSpaces(c))>=l)){u=61===p?1:2;break}if(!(e.sCount[f]<0)){for(s=!1,o=0,i=d.length;o3||e.sCount[c]<0)){for(n=!1,s=0,o=l.length;s=t))&&!(e.sCount[i]=c){e.line=t;break}for(n=0;n?@[]^_`{|}~-".split("").forEach((function(e){Ve[e.charCodeAt(0)]=1}));var $e={};function Ge(e,r){var t,n,s,o,i,a=[],c=r.length;for(t=0;t=0;t--)95!==(n=r[t]).marker&&42!==n.marker||-1!==n.end&&(s=r[n.end],a=t>0&&r[t-1].end===n.end+1&&r[t-1].marker===n.marker&&r[t-1].token===n.token-1&&r[n.end+1].token===s.token+1,i=String.fromCharCode(n.marker),(o=e.tokens[n.token]).type=a?"strong_open":"em_open",o.tag=a?"strong":"em",o.nesting=1,o.markup=a?i+i:i,o.content="",(o=e.tokens[s.token]).type=a?"strong_close":"em_close",o.tag=a?"strong":"em",o.nesting=-1,o.markup=a?i+i:i,o.content="",a&&(e.tokens[r[t-1].token].content="",e.tokens[r[n.end+1].token].content="",t--))}He.tokenize=function(e,r){var t,n,s=e.pos,o=e.src.charCodeAt(s);if(r)return!1;if(95!==o&&42!==o)return!1;for(n=e.scanDelims(e.pos,42===o),t=0;t\x00-\x20]*)$/,rr=ye.HTML_TAG_RE;var tr=t,nr=r.has,sr=r.isValidEntityCode,or=r.fromCodePoint,ir=/^&#((?:x[a-f0-9]{1,6}|[0-9]{1,7}));/i,ar=/^&([a-z][a-z0-9]{1,31});/i;function cr(e,r){var t,n,s,o,i,a,c,l,u={},p=r.length;if(p){var h=0,f=-2,d=[];for(t=0;ti;n-=d[n]+1)if((o=r[n]).marker===s.marker&&o.open&&o.end<0&&(c=!1,(o.close||s.open)&&(o.length+s.length)%3==0&&(o.length%3==0&&s.length%3==0||(c=!0)),!c)){l=n>0&&!r[n-1].open?d[n-1]+1:0,d[t]=t-n+l,d[n]=l,s.open=!1,o.end=t,o.close=!1,a=-1,f=-2;break}-1!==a&&(u[s.marker][(s.open?3:0)+(s.length||0)%3]=a)}}}var lr=se,ur=r.isWhiteSpace,pr=r.isPunctChar,hr=r.isMdAsciiPunct;function fr(e,r,t,n){this.src=e,this.env=t,this.md=r,this.tokens=n,this.tokens_meta=Array(n.length),this.pos=0,this.posMax=this.src.length,this.level=0,this.pending="",this.pendingLevel=0,this.cache={},this.delimiters=[],this._prev_delimiters=[],this.backticks={},this.backticksScanned=!1,this.linkLevel=0}fr.prototype.pushPending=function(){var e=new lr("text","",0);return e.content=this.pending,e.level=this.pendingLevel,this.tokens.push(e),this.pending="",e},fr.prototype.push=function(e,r,t){this.pending&&this.pushPending();var n=new lr(e,r,t),s=null;return t<0&&(this.level--,this.delimiters=this._prev_delimiters.pop()),n.level=this.level,t>0&&(this.level++,this._prev_delimiters.push(this.delimiters),this.delimiters=[],s={delimiters:this.delimiters}),this.pendingLevel=this.level,this.tokens.push(n),this.tokens_meta.push(s),n},fr.prototype.scanDelims=function(e,r){var t,n,s,o,i,a,c,l,u,p=e,h=!0,f=!0,d=this.posMax,m=this.src.charCodeAt(e);for(t=e>0?this.src.charCodeAt(e-1):32;p0)&&(!((t=e.pos)+3>e.posMax)&&(58===e.src.charCodeAt(t)&&(47===e.src.charCodeAt(t+1)&&(47===e.src.charCodeAt(t+2)&&(!!(n=e.pending.match(Pe))&&(s=n[1],!!(o=e.md.linkify.matchAtStart(e.src.slice(t-s.length)))&&(i=(i=o.url).replace(/\*+$/,""),a=e.md.normalizeLink(i),!!e.md.validateLink(a)&&(r||(e.pending=e.pending.slice(0,-s.length),(c=e.push("link_open","a",1)).attrs=[["href",a]],c.markup="linkify",c.info="auto",(c=e.push("text","",0)).content=e.md.normalizeLinkText(i),(c=e.push("link_close","a",-1)).markup="linkify",c.info="auto"),e.pos+=i.length-s.length,!0)))))))))}],["newline",function(e,r){var t,n,s,o=e.pos;if(10!==e.src.charCodeAt(o))return!1;if(t=e.pending.length-1,n=e.posMax,!r)if(t>=0&&32===e.pending.charCodeAt(t))if(t>=1&&32===e.pending.charCodeAt(t-1)){for(s=t-1;s>=1&&32===e.pending.charCodeAt(s-1);)s--;e.pending=e.pending.slice(0,s),e.push("hardbreak","br",0)}else e.pending=e.pending.slice(0,-1),e.push("softbreak","br",0);else e.push("softbreak","br",0);for(o++;o=c)return!1;if(10===(t=e.src.charCodeAt(a))){for(r||e.push("hardbreak","br",0),a++;a=55296&&t<=56319&&a+1=56320&&n<=57343&&(o+=e.src[a+1],a++),s="\\"+o,r||(i=e.push("text_special","",0),t<256&&0!==Ve[t]?i.content=o:i.content=s,i.markup=s,i.info="escape"),e.pos=a+1,!0}],["backticks",function(e,r){var t,n,s,o,i,a,c,l,u=e.pos;if(96!==e.src.charCodeAt(u))return!1;for(t=u,u++,n=e.posMax;u=f)return!1;if(d=a,(c=e.md.helpers.parseLinkDestination(e.src,a,e.posMax)).ok){for(u=e.md.normalizeLink(c.str),e.md.validateLink(u)?a=c.pos:u="",d=a;a=f||41!==e.src.charCodeAt(a))&&(m=!0),a++}if(m){if(void 0===e.env.references)return!1;if(a=0?s=e.src.slice(d,a++):a=o+1):a=o+1,s||(s=e.src.slice(i,o)),!(l=e.env.references[We(s)]))return e.pos=h,!1;u=l.href,p=l.title}return r||(e.pos=i,e.posMax=o,e.push("link_open","a",1).attrs=t=[["href",u]],p&&t.push(["title",p]),e.linkLevel++,e.md.inline.tokenize(e),e.linkLevel--,e.push("link_close","a",-1)),e.pos=a,e.posMax=f,!0}],["image",function(e,r){var t,n,s,o,i,a,c,l,u,p,h,f,d,m="",g=e.pos,_=e.posMax;if(33!==e.src.charCodeAt(e.pos))return!1;if(91!==e.src.charCodeAt(e.pos+1))return!1;if(a=e.pos+2,(i=e.md.helpers.parseLinkLabel(e,e.pos+1,!1))<0)return!1;if((c=i+1)<_&&40===e.src.charCodeAt(c)){for(c++;c<_&&(n=e.src.charCodeAt(c),Qe(n)||10===n);c++);if(c>=_)return!1;for(d=c,(u=e.md.helpers.parseLinkDestination(e.src,c,e.posMax)).ok&&(m=e.md.normalizeLink(u.str),e.md.validateLink(m)?c=u.pos:m=""),d=c;c<_&&(n=e.src.charCodeAt(c),Qe(n)||10===n);c++);if(u=e.md.helpers.parseLinkTitle(e.src,c,e.posMax),c<_&&d!==c&&u.ok)for(p=u.str,c=u.pos;c<_&&(n=e.src.charCodeAt(c),Qe(n)||10===n);c++);else p="";if(c>=_||41!==e.src.charCodeAt(c))return e.pos=g,!1;c++}else{if(void 0===e.env.references)return!1;if(c<_&&91===e.src.charCodeAt(c)?(d=c+1,(c=e.md.helpers.parseLinkLabel(e,c))>=0?o=e.src.slice(d,c++):c=i+1):c=i+1,o||(o=e.src.slice(a,i)),!(l=e.env.references[Ke(o)]))return e.pos=g,!1;m=l.href,p=l.title}return r||(s=e.src.slice(a,i),e.md.inline.parse(s,e.md,e.env,f=[]),(h=e.push("image","img",0)).attrs=t=[["src",m],["alt",""]],h.children=f,h.content=s,p&&t.push(["title",p])),e.pos=c,e.posMax=_,!0}],["autolink",function(e,r){var t,n,s,o,i,a,c=e.pos;if(60!==e.src.charCodeAt(c))return!1;for(i=e.pos,a=e.posMax;;){if(++c>=a)return!1;if(60===(o=e.src.charCodeAt(c)))return!1;if(62===o)break}return t=e.src.slice(i+1,c),er.test(t)?(n=e.md.normalizeLink(t),!!e.md.validateLink(n)&&(r||((s=e.push("link_open","a",1)).attrs=[["href",n]],s.markup="autolink",s.info="auto",(s=e.push("text","",0)).content=e.md.normalizeLinkText(t),(s=e.push("link_close","a",-1)).markup="autolink",s.info="auto"),e.pos+=t.length+2,!0)):!!Xe.test(t)&&(n=e.md.normalizeLink("mailto:"+t),!!e.md.validateLink(n)&&(r||((s=e.push("link_open","a",1)).attrs=[["href",n]],s.markup="autolink",s.info="auto",(s=e.push("text","",0)).content=e.md.normalizeLinkText(t),(s=e.push("link_close","a",-1)).markup="autolink",s.info="auto"),e.pos+=t.length+2,!0))}],["html_inline",function(e,r){var t,n,s,o,i,a=e.pos;return!!e.md.options.html&&(s=e.posMax,!(60!==e.src.charCodeAt(a)||a+2>=s)&&(!(33!==(t=e.src.charCodeAt(a+1))&&63!==t&&47!==t&&!function(e){var r=32|e;return r>=97&&r<=122}(t))&&(!!(n=e.src.slice(a).match(rr))&&(r||((o=e.push("html_inline","",0)).content=e.src.slice(a,a+n[0].length),i=o.content,/^\s]/i.test(i)&&e.linkLevel++,function(e){return/^<\/a\s*>/i.test(e)}(o.content)&&e.linkLevel--),e.pos+=n[0].length,!0))))}],["entity",function(e,r){var t,n,s,o=e.pos,i=e.posMax;if(38!==e.src.charCodeAt(o))return!1;if(o+1>=i)return!1;if(35===e.src.charCodeAt(o+1)){if(n=e.src.slice(o).match(ir))return r||(t="x"===n[1][0].toLowerCase()?parseInt(n[1].slice(1),16):parseInt(n[1],10),(s=e.push("text_special","",0)).content=sr(t)?or(t):or(65533),s.markup=n[0],s.info="entity"),e.pos+=n[0].length,!0}else if((n=e.src.slice(o).match(ar))&&nr(tr,n[1]))return r||((s=e.push("text_special","",0)).content=tr[n[1]],s.markup=n[0],s.info="entity"),e.pos+=n[0].length,!0;return!1}]],_r=[["balance_pairs",function(e){var r,t=e.tokens_meta,n=e.tokens_meta.length;for(cr(0,e.delimiters),r=0;r0&&n++,"text"===s[r].type&&r+1=o)break}else e.pending+=e.src[e.pos++]}e.pending&&e.pushPending()},kr.prototype.parse=function(e,r,t,n){var s,o,i,a=new this.State(e,r,t,n);for(this.tokenize(a),i=(o=this.ruler2.getRules("")).length,s=0;s=3&&":"===e[r-3]||r>=3&&"/"===e[r-3]?0:n.match(t.re.no_http)[0].length:0}},"mailto:":{validate:function(e,r,t){var n=e.slice(r);return t.re.mailto||(t.re.mailto=new RegExp("^"+t.re.src_email_name+"@"+t.re.src_host_strict,"i")),t.re.mailto.test(n)?n.match(t.re.mailto)[0].length:0}}},wr="biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф".split("|");function Er(e){var r=e.re=function(e){var r={};return e=e||{},r.src_Any=D.source,r.src_Cc=w.source,r.src_Z=E.source,r.src_P=n.source,r.src_ZPCc=[r.src_Z,r.src_P,r.src_Cc].join("|"),r.src_ZCc=[r.src_Z,r.src_Cc].join("|"),r.src_pseudo_letter="(?:(?![><|]|"+r.src_ZPCc+")"+r.src_Any+")",r.src_ip4="(?:(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)",r.src_auth="(?:(?:(?!"+r.src_ZCc+"|[@/\\[\\]()]).)+@)?",r.src_port="(?::(?:6(?:[0-4]\\d{3}|5(?:[0-4]\\d{2}|5(?:[0-2]\\d|3[0-5])))|[1-5]?\\d{1,4}))?",r.src_host_terminator="(?=$|[><|]|"+r.src_ZPCc+")(?!"+(e["---"]?"-(?!--)|":"-|")+"_|:\\d|\\.-|\\.(?!$|"+r.src_ZPCc+"))",r.src_path="(?:[/?#](?:(?!"+r.src_ZCc+"|[><|]|[()[\\]{}.,\"'?!\\-;]).|\\[(?:(?!"+r.src_ZCc+"|\\]).)*\\]|\\((?:(?!"+r.src_ZCc+"|[)]).)*\\)|\\{(?:(?!"+r.src_ZCc+'|[}]).)*\\}|\\"(?:(?!'+r.src_ZCc+'|["]).)+\\"|\\\'(?:(?!'+r.src_ZCc+"|[']).)+\\'|\\'(?="+r.src_pseudo_letter+"|[-])|\\.{2,}[a-zA-Z0-9%/&]|\\.(?!"+r.src_ZCc+"|[.]|$)|"+(e["---"]?"\\-(?!--(?:[^-]|$))(?:-*)|":"\\-+|")+",(?!"+r.src_ZCc+"|$)|;(?!"+r.src_ZCc+"|$)|\\!+(?!"+r.src_ZCc+"|[!]|$)|\\?(?!"+r.src_ZCc+"|[?]|$))+|\\/)?",r.src_email_name='[\\-;:&=\\+\\$,\\.a-zA-Z0-9_][\\-;:&=\\+\\$,\\"\\.a-zA-Z0-9_]*',r.src_xn="xn--[a-z0-9\\-]{1,59}",r.src_domain_root="(?:"+r.src_xn+"|"+r.src_pseudo_letter+"{1,63})",r.src_domain="(?:"+r.src_xn+"|(?:"+r.src_pseudo_letter+")|(?:"+r.src_pseudo_letter+"(?:-|"+r.src_pseudo_letter+"){0,61}"+r.src_pseudo_letter+"))",r.src_host="(?:(?:(?:(?:"+r.src_domain+")\\.)*"+r.src_domain+"))",r.tpl_host_fuzzy="(?:"+r.src_ip4+"|(?:(?:(?:"+r.src_domain+")\\.)+(?:%TLDS%)))",r.tpl_host_no_ip_fuzzy="(?:(?:(?:"+r.src_domain+")\\.)+(?:%TLDS%))",r.src_host_strict=r.src_host+r.src_host_terminator,r.tpl_host_fuzzy_strict=r.tpl_host_fuzzy+r.src_host_terminator,r.src_host_port_strict=r.src_host+r.src_port+r.src_host_terminator,r.tpl_host_port_fuzzy_strict=r.tpl_host_fuzzy+r.src_port+r.src_host_terminator,r.tpl_host_port_no_ip_fuzzy_strict=r.tpl_host_no_ip_fuzzy+r.src_port+r.src_host_terminator,r.tpl_host_fuzzy_test="localhost|www\\.|\\.\\d{1,3}\\.|(?:\\.(?:%TLDS%)(?:"+r.src_ZPCc+"|>|$))",r.tpl_email_fuzzy='(^|[><|]|"|\\(|'+r.src_ZCc+")("+r.src_email_name+"@"+r.tpl_host_fuzzy_strict+")",r.tpl_link_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+r.src_ZPCc+"))((?![$+<=>^`||])"+r.tpl_host_port_fuzzy_strict+r.src_path+")",r.tpl_link_no_ip_fuzzy="(^|(?![.:/\\-_@])(?:[$+<=>^`||]|"+r.src_ZPCc+"))((?![$+<=>^`||])"+r.tpl_host_port_no_ip_fuzzy_strict+r.src_path+")",r}(e.__opts__),t=e.__tlds__.slice();function s(e){return e.replace("%TLDS%",r.src_tlds)}e.onCompile(),e.__tlds_replaced__||t.push("a[cdefgilmnoqrstuwxz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvwxyz]|d[ejkmoz]|e[cegrstu]|f[ijkmor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdeghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eosuw]|s[abcdeghijklmnortuvxyz]|t[cdfghjklmnortvwz]|u[agksyz]|v[aceginu]|w[fs]|y[et]|z[amw]"),t.push(r.src_xn),r.src_tlds=t.join("|"),r.email_fuzzy=RegExp(s(r.tpl_email_fuzzy),"i"),r.link_fuzzy=RegExp(s(r.tpl_link_fuzzy),"i"),r.link_no_ip_fuzzy=RegExp(s(r.tpl_link_no_ip_fuzzy),"i"),r.host_fuzzy_test=RegExp(s(r.tpl_host_fuzzy_test),"i");var o=[];function i(e,r){throw new Error('(LinkifyIt) Invalid schema "'+e+'": '+r)}e.__compiled__={},Object.keys(e.__schemas__).forEach((function(r){var t=e.__schemas__[r];if(null!==t){var n={validate:null,link:null};if(e.__compiled__[r]=n,"[object Object]"===Cr(t))return!function(e){return"[object RegExp]"===Cr(e)}(t.validate)?yr(t.validate)?n.validate=t.validate:i(r,t):n.validate=function(e){return function(r,t){var n=r.slice(t);return e.test(n)?n.match(e)[0].length:0}}(t.validate),void(yr(t.normalize)?n.normalize=t.normalize:t.normalize?i(r,t):n.normalize=function(e,r){r.normalize(e)});!function(e){return"[object String]"===Cr(e)}(t)?i(r,t):o.push(r)}})),o.forEach((function(r){e.__compiled__[e.__schemas__[r]]&&(e.__compiled__[r].validate=e.__compiled__[e.__schemas__[r]].validate,e.__compiled__[r].normalize=e.__compiled__[e.__schemas__[r]].normalize)})),e.__compiled__[""]={validate:null,normalize:function(e,r){r.normalize(e)}};var a=Object.keys(e.__compiled__).filter((function(r){return r.length>0&&e.__compiled__[r]})).map(Ar).join("|");e.re.schema_test=RegExp("(^|(?!_)(?:[><|]|"+r.src_ZPCc+"))("+a+")","i"),e.re.schema_search=RegExp("(^|(?!_)(?:[><|]|"+r.src_ZPCc+"))("+a+")","ig"),e.re.schema_at_start=RegExp("^"+e.re.schema_search.source,"i"),e.re.pretest=RegExp("("+e.re.schema_test.source+")|("+e.re.host_fuzzy_test.source+")|@","i"),function(e){e.__index__=-1,e.__text_cache__=""}(e)}function qr(e,r){var t=e.__index__,n=e.__last_index__,s=e.__text_cache__.slice(t,n);this.schema=e.__schema__.toLowerCase(),this.index=t+r,this.lastIndex=n+r,this.raw=s,this.text=s,this.url=s}function Sr(e,r){var t=new qr(e,r);return e.__compiled__[t.schema].normalize(t,e),t}function Fr(e,r){if(!(this instanceof Fr))return new Fr(e,r);var t;r||(t=e,Object.keys(t||{}).reduce((function(e,r){return e||xr.hasOwnProperty(r)}),!1)&&(r=e,e={})),this.__opts__=vr({},xr,r),this.__index__=-1,this.__last_index__=-1,this.__schema__="",this.__text_cache__="",this.__schemas__=vr({},Dr,e),this.__compiled__={},this.__tlds__=wr,this.__tlds_replaced__=!1,this.re={},Er(this)}Fr.prototype.add=function(e,r){return this.__schemas__[e]=r,Er(this),this},Fr.prototype.set=function(e){return this.__opts__=vr(this.__opts__,e),this},Fr.prototype.test=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return!1;var r,t,n,s,o,i,a,c;if(this.re.schema_test.test(e))for((a=this.re.schema_search).lastIndex=0;null!==(r=a.exec(e));)if(s=this.testSchemaAt(e,r[2],a.lastIndex)){this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+s;break}return this.__opts__.fuzzyLink&&this.__compiled__["http:"]&&(c=e.search(this.re.host_fuzzy_test))>=0&&(this.__index__<0||c=0&&null!==(n=e.match(this.re.email_fuzzy))&&(o=n.index+n[1].length,i=n.index+n[0].length,(this.__index__<0||othis.__last_index__)&&(this.__schema__="mailto:",this.__index__=o,this.__last_index__=i)),this.__index__>=0},Fr.prototype.pretest=function(e){return this.re.pretest.test(e)},Fr.prototype.testSchemaAt=function(e,r,t){return this.__compiled__[r.toLowerCase()]?this.__compiled__[r.toLowerCase()].validate(e,t,this):0},Fr.prototype.match=function(e){var r=0,t=[];this.__index__>=0&&this.__text_cache__===e&&(t.push(Sr(this,r)),r=this.__last_index__);for(var n=r?e.slice(r):e;this.test(n);)t.push(Sr(this,r)),n=n.slice(this.__last_index__),r+=this.__last_index__;return t.length?t:null},Fr.prototype.matchAtStart=function(e){if(this.__text_cache__=e,this.__index__=-1,!e.length)return null;var r=this.re.schema_at_start.exec(e);if(!r)return null;var t=this.testSchemaAt(e,r[2],r[0].length);return t?(this.__schema__=r[2],this.__index__=r.index+r[1].length,this.__last_index__=r.index+r[0].length+t,Sr(this,0)):null},Fr.prototype.tlds=function(e,r){return e=Array.isArray(e)?e:[e],r?(this.__tlds__=this.__tlds__.concat(e).sort().filter((function(e,r,t){return e!==t[r-1]})).reverse(),Er(this),this):(this.__tlds__=e.slice(),this.__tlds_replaced__=!0,Er(this),this)},Fr.prototype.normalize=function(e){e.schema||(e.url="http://"+e.url),"mailto:"!==e.schema||/^mailto:/i.test(e.url)||(e.url="mailto:"+e.url)},Fr.prototype.onCompile=function(){};var Lr=Fr,zr=2147483647,Tr=/^xn--/,Ir=/[^\x20-\x7E]/,Mr=/[\x2E\u3002\uFF0E\uFF61]/g,Rr={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},Br=Math.floor,Nr=String.fromCharCode; +/*! https://mths.be/punycode v1.4.1 by @mathias */function Or(e){throw new RangeError(Rr[e])}function Pr(e,r){for(var t=e.length,n=[];t--;)n[t]=r(e[t]);return n}function jr(e,r){var t=e.split("@"),n="";return t.length>1&&(n=t[0]+"@",e=t[1]),n+Pr((e=e.replace(Mr,".")).split("."),r).join(".")}function Ur(e){for(var r,t,n=[],s=0,o=e.length;s=55296&&r<=56319&&s65535&&(r+=Nr((e-=65536)>>>10&1023|55296),e=56320|1023&e),r+=Nr(e)})).join("")}function Zr(e,r){return e+22+75*(e<26)-((0!=r)<<5)}function $r(e,r,t){var n=0;for(e=t?Br(e/700):e>>1,e+=Br(e/r);e>455;n+=36)e=Br(e/35);return Br(n+36*e/(e+38))}function Gr(e){var r,t,n,s,o,i,a,c,l,u,p,h=[],f=e.length,d=0,m=128,g=72;for((t=e.lastIndexOf("-"))<0&&(t=0),n=0;n=128&&Or("not-basic"),h.push(e.charCodeAt(n));for(s=t>0?t+1:0;s=f&&Or("invalid-input"),((c=(p=e.charCodeAt(s++))-48<10?p-22:p-65<26?p-65:p-97<26?p-97:36)>=36||c>Br((zr-d)/i))&&Or("overflow"),d+=c*i,!(c<(l=a<=g?1:a>=g+26?26:a-g));a+=36)i>Br(zr/(u=36-l))&&Or("overflow"),i*=u;g=$r(d-o,r=h.length+1,0==o),Br(d/r)>zr-m&&Or("overflow"),m+=Br(d/r),d%=r,h.splice(d++,0,m)}return Vr(h)}function Hr(e){var r,t,n,s,o,i,a,c,l,u,p,h,f,d,m,g=[];for(h=(e=Ur(e)).length,r=128,t=0,o=72,i=0;i=r&&pBr((zr-t)/(f=n+1))&&Or("overflow"),t+=(a-r)*f,r=a,i=0;izr&&Or("overflow"),p==r){for(c=t,l=36;!(c<(u=l<=o?1:l>=o+26?26:l-o));l+=36)m=c-u,d=36-u,g.push(Nr(Zr(u+m%d,0))),c=Br(m/d);g.push(Nr(Zr(c,0))),o=$r(t,f,n==s),t=0,++n}++t,++r}return g.join("")}function Jr(e){return jr(e,(function(e){return Tr.test(e)?Gr(e.slice(4).toLowerCase()):e}))}function Wr(e){return jr(e,(function(e){return Ir.test(e)?"xn--"+Hr(e):e}))}var Yr={decode:Ur,encode:Vr},Kr={version:"1.4.1",ucs2:Yr,toASCII:Wr,toUnicode:Jr,encode:Hr,decode:Gr},Qr=r,Xr=q,et=R,rt=pe,tt=Ne,nt=br,st=Lr,ot=s,it=e(Object.freeze({__proto__:null,decode:Gr,encode:Hr,toUnicode:Jr,toASCII:Wr,version:"1.4.1",ucs2:Yr,default:Kr})),at={default:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:100},components:{core:{},block:{},inline:{}}},zero:{options:{html:!1,xhtmlOut:!1,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["paragraph"]},inline:{rules:["text"],rules2:["balance_pairs","fragments_join"]}}},commonmark:{options:{html:!0,xhtmlOut:!0,breaks:!1,langPrefix:"language-",linkify:!1,typographer:!1,quotes:"“”‘’",highlight:null,maxNesting:20},components:{core:{rules:["normalize","block","inline","text_join"]},block:{rules:["blockquote","code","fence","heading","hr","html_block","lheading","list","reference","paragraph"]},inline:{rules:["autolink","backticks","emphasis","entity","escape","html_inline","image","link","newline","text"],rules2:["balance_pairs","emphasis","fragments_join"]}}}},ct=/^(vbscript|javascript|file|data):/,lt=/^data:image\/(gif|png|jpeg|webp);/;function ut(e){var r=e.trim().toLowerCase();return!ct.test(r)||!!lt.test(r)}var pt=["http:","https:","mailto:"];function ht(e){var r=ot.parse(e,!0);if(r.hostname&&(!r.protocol||pt.indexOf(r.protocol)>=0))try{r.hostname=it.toASCII(r.hostname)}catch(e){}return ot.encode(ot.format(r))}function ft(e){var r=ot.parse(e,!0);if(r.hostname&&(!r.protocol||pt.indexOf(r.protocol)>=0))try{r.hostname=it.toUnicode(r.hostname)}catch(e){}return ot.decode(ot.format(r),ot.decode.defaultChars+"%")}function dt(e,r){if(!(this instanceof dt))return new dt(e,r);r||Qr.isString(e)||(r=e||{},e="default"),this.inline=new nt,this.block=new tt,this.core=new rt,this.renderer=new et,this.linkify=new st,this.validateLink=ut,this.normalizeLink=ht,this.normalizeLinkText=ft,this.utils=Qr,this.helpers=Qr.assign({},Xr),this.options={},this.configure(e),r&&this.set(r)}dt.prototype.set=function(e){return Qr.assign(this.options,e),this},dt.prototype.configure=function(e){var r,t=this;if(Qr.isString(e)&&!(e=at[r=e]))throw new Error('Wrong `markdown-it` preset "'+r+'", check name');if(!e)throw new Error("Wrong `markdown-it` preset, can't be empty");return e.options&&t.set(e.options),e.components&&Object.keys(e.components).forEach((function(r){e.components[r].rules&&t[r].ruler.enableOnly(e.components[r].rules),e.components[r].rules2&&t[r].ruler2.enableOnly(e.components[r].rules2)})),this},dt.prototype.enable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(r){t=t.concat(this[r].ruler.enable(e,!0))}),this),t=t.concat(this.inline.ruler2.enable(e,!0));var n=e.filter((function(e){return t.indexOf(e)<0}));if(n.length&&!r)throw new Error("MarkdownIt. Failed to enable unknown rule(s): "+n);return this},dt.prototype.disable=function(e,r){var t=[];Array.isArray(e)||(e=[e]),["core","block","inline"].forEach((function(r){t=t.concat(this[r].ruler.disable(e,!0))}),this),t=t.concat(this.inline.ruler2.disable(e,!0));var n=e.filter((function(e){return t.indexOf(e)<0}));if(n.length&&!r)throw new Error("MarkdownIt. Failed to disable unknown rule(s): "+n);return this},dt.prototype.use=function(e){var r=[this].concat(Array.prototype.slice.call(arguments,1));return e.apply(e,r),this},dt.prototype.parse=function(e,r){if("string"!=typeof e)throw new Error("Input data should be a String");var t=new this.core.State(e,this,r);return this.core.process(t),t.tokens},dt.prototype.render=function(e,r){return r=r||{},this.renderer.render(this.parse(e,r),this.options,r)},dt.prototype.parseInline=function(e,r){var t=new this.core.State(e,this,r);return t.inlineMode=!0,this.core.process(t),t.tokens},dt.prototype.renderInline=function(e,r){return r=r||{},this.renderer.render(this.parseInline(e,r),this.options,r)};var mt=dt;export default mt; diff --git a/src/components/ua-markdown/ua-markdown.vue b/src/components/ua-markdown/ua-markdown.vue new file mode 100644 index 0000000..afa3493 --- /dev/null +++ b/src/components/ua-markdown/ua-markdown.vue @@ -0,0 +1,318 @@ + + + + + + diff --git a/src/config/api.config.ts b/src/config/api.config.ts new file mode 100644 index 0000000..dfbb885 --- /dev/null +++ b/src/config/api.config.ts @@ -0,0 +1,5 @@ +export const PORT = 1337 +// export const HOST_NAME = 'http://localhost' +export const BASE_URL = 'https://ching.snhaenigseal.cn' +// export const BASE_SERVER_URL = `${HOST_NAME}:${PORT}` +// export const BASE_UPLOAD_URL = `${HOST_NAME}:${PORT}/api/upload` \ No newline at end of file diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..0d738ff --- /dev/null +++ b/src/main.ts @@ -0,0 +1,12 @@ +import { createSSRApp } from 'vue' + +import { setupStore } from './stores' +import App from './App.vue' + +export function createApp() { + const app = createSSRApp(App) + setupStore(app); + return { + app, + } +} diff --git a/src/manifest.json b/src/manifest.json new file mode 100644 index 0000000..63c4f84 --- /dev/null +++ b/src/manifest.json @@ -0,0 +1,73 @@ +{ + "name" : "", + "appid" : "", + "description" : "", + "versionName" : "1.0.0", + "versionCode" : "100", + "transformPx" : false, + /* 5+App特有相关 */ + "app-plus" : { + "usingComponents" : true, + "nvueStyleCompiler" : "uni-app", + "compilerVersion" : 3, + "splashscreen" : { + "alwaysShowBeforeRender" : true, + "waiting" : true, + "autoclose" : true, + "delay" : 0 + }, + /* 模块配置 */ + "modules" : {}, + /* 应用发布信息 */ + "distribute" : { + /* android打包配置 */ + "android" : { + "permissions" : [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ] + }, + /* ios打包配置 */ + "ios" : {}, + /* SDK配置 */ + "sdkConfigs" : {} + } + }, + /* 快应用特有相关 */ + "quickapp" : {}, + /* 小程序特有相关 */ + "mp-weixin" : { + "appid" : "wxed54ab6227ca85b6", + "setting" : { + "urlCheck" : false + }, + "usingComponents" : true, + "lazyCodeLoading": "requiredComponents" + }, + "mp-alipay" : { + "usingComponents" : true + }, + "mp-baidu" : { + "usingComponents" : true + }, + "mp-toutiao" : { + "usingComponents" : true + }, + "uniStatistics": { + "enable": false + }, + "vueVersion" : "3" +} diff --git a/src/package.json b/src/package.json new file mode 100644 index 0000000..6592424 --- /dev/null +++ b/src/package.json @@ -0,0 +1,18 @@ +{ + "id": "ua-markdown", + "name": "uniapp markdown语法渲染及代码高亮", + "displayName": "uniapp markdown语法渲染及代码高亮", + "version": "1.2.4", + "description": "基于uniapp+vue3自定义解析markdown语法/高亮,适用于h5+小程序+App端。", + "keywords": [ + "ua-markdown", + "uni-markdown", + "markdown" + ], + "dcloudext": { + "category": [ + "前端组件", + "通用组件" + ] + } +} \ No newline at end of file diff --git a/src/pages.json b/src/pages.json new file mode 100644 index 0000000..d75d4c9 --- /dev/null +++ b/src/pages.json @@ -0,0 +1,34 @@ +{ + "pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/pages + { + "path": "pages/index/index", + "style": { + "navigationStyle":"custom" + } + }, + { + "path": "pages/user/history", + "style": { + "navigationStyle":"custom" + } + }, + { + "path": "pages/user/suggestion", + "style": { + "navigationStyle":"custom" + } + }, + { + "path": "pages/ZhouYi/detail", + "style": { + "navigationStyle":"custom" + } + } + ], + "globalStyle": { + "navigationBarTextStyle": "black", + "navigationBarTitleText": "uni-app", + "navigationBarBackgroundColor": "#F8F8F8", + "backgroundColor": "#F8F8F8" + } +} diff --git a/src/pages/ZhouYi/detail.vue b/src/pages/ZhouYi/detail.vue new file mode 100644 index 0000000..2e71d7f --- /dev/null +++ b/src/pages/ZhouYi/detail.vue @@ -0,0 +1,67 @@ + + + + + \ No newline at end of file diff --git a/src/pages/home/home.vue b/src/pages/home/home.vue new file mode 100644 index 0000000..dd24c9e --- /dev/null +++ b/src/pages/home/home.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/src/pages/index/index.vue b/src/pages/index/index.vue new file mode 100644 index 0000000..f957711 --- /dev/null +++ b/src/pages/index/index.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/pages/suan-gua/suan-gua.vue b/src/pages/suan-gua/suan-gua.vue new file mode 100644 index 0000000..a28e52e --- /dev/null +++ b/src/pages/suan-gua/suan-gua.vue @@ -0,0 +1,902 @@ + + + + + \ No newline at end of file diff --git a/src/pages/user/history.vue b/src/pages/user/history.vue new file mode 100644 index 0000000..31d0aa6 --- /dev/null +++ b/src/pages/user/history.vue @@ -0,0 +1,101 @@ + + + + + \ No newline at end of file diff --git a/src/pages/user/suggestion.vue b/src/pages/user/suggestion.vue new file mode 100644 index 0000000..636d225 --- /dev/null +++ b/src/pages/user/suggestion.vue @@ -0,0 +1,50 @@ + + + + + + diff --git a/src/pages/user/user.vue b/src/pages/user/user.vue new file mode 100644 index 0000000..57fa4a4 --- /dev/null +++ b/src/pages/user/user.vue @@ -0,0 +1,85 @@ + + + + + \ No newline at end of file diff --git a/src/readme.md b/src/readme.md new file mode 100644 index 0000000..a2cb68d --- /dev/null +++ b/src/readme.md @@ -0,0 +1,49 @@ + +# vue3版本!!! +vue2版本已经上线,欢迎下载使用。 +[https://ext.dcloud.net.cn/plugin?id=13864](https://ext.dcloud.net.cn/plugin?id=13864) + +## uniapp markdown渲染解析.md语法及代码高亮 +> **组件名:uaMarkdown** +> 代码块: `` + + +uaMarkdown组件是基于uniapp+vue3自定义解析markdown语法结构插件、支持代码块高亮,编译兼容H5+小程序端+App端。 + + +### 引入方式 + +本组件符合[easycom](https://uniapp.dcloud.io/collocation/pages?id=easycom)规范,只需将本组件`ua-markdown`放在components目录,在页面`template`中即可直接使用。 + + +### 基本用法 + +**示例** + +- 基础用法 + +```html +const mdvalue = '### uniapp markdwon' + +``` + +- 去掉代码块行号 + +```html + +``` + + +### API + +### uaMarkdown Props + +|属性名|类型|默认值|说明| +|:-:|:-:|:-:|:-:| +|source|String|-| 渲染解析内容 | +|showLine|Boolean|true| 是否显示代码块行号 | + + +### 💝最后 + +开发不易,希望各位小伙伴们多多支持下哈~~ ☕️☕️ diff --git a/src/static/avatar.png b/src/static/avatar.png new file mode 100644 index 0000000..e449eed Binary files /dev/null and b/src/static/avatar.png differ diff --git a/src/static/logo.png b/src/static/logo.png new file mode 100644 index 0000000..b5771e2 Binary files /dev/null and b/src/static/logo.png differ diff --git a/src/static/mov_yang.png b/src/static/mov_yang.png new file mode 100644 index 0000000..8e7b760 Binary files /dev/null and b/src/static/mov_yang.png differ diff --git a/src/static/mov_yin.png b/src/static/mov_yin.png new file mode 100644 index 0000000..8d8afca Binary files /dev/null and b/src/static/mov_yin.png differ diff --git a/src/static/yang.png b/src/static/yang.png new file mode 100644 index 0000000..78e5213 Binary files /dev/null and b/src/static/yang.png differ diff --git a/src/static/yin.png b/src/static/yin.png new file mode 100644 index 0000000..4aa7893 Binary files /dev/null and b/src/static/yin.png differ diff --git a/src/stores/index.ts b/src/stores/index.ts new file mode 100644 index 0000000..c52d82b --- /dev/null +++ b/src/stores/index.ts @@ -0,0 +1,27 @@ +// src/store/index.ts +import type { App } from "vue"; +import { createPinia } from "pinia" +import { createPersistedState } from 'pinia-plugin-persistedstate'; + +const createPersistUni = () => { + return createPersistedState({ + storage: { + getItem: uni.getStorageSync, + setItem: uni.setStorageSync + } + }) +} + +const store = createPinia(); +store.use(createPersistUni()); + +export * from './modules/tabIndex' +export * from './modules/user' +export * from './modules/AIResponse' +export * from './modules/rateLimit' + + +// 注册 Pinia +export function setupStore(app: App) { + app.use(store); // 全局注册 Pinia +} \ No newline at end of file diff --git a/src/stores/modules/AIResponse.ts b/src/stores/modules/AIResponse.ts new file mode 100644 index 0000000..bff9498 --- /dev/null +++ b/src/stores/modules/AIResponse.ts @@ -0,0 +1,28 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' + + + +export const useAIReponseStore = defineStore('AIResponse', () => { + const responseText = ref('') + + const showResponseText = ref(false) + + const isLoading = ref(false) + + const isDone = ref(false) + + const reset = () => { + responseText.value = '' + showResponseText.value = false + isDone.value = false + } + + return { + responseText, + showResponseText, + isLoading, + isDone, + reset + } +}) \ No newline at end of file diff --git a/src/stores/modules/rateLimit.ts b/src/stores/modules/rateLimit.ts new file mode 100644 index 0000000..e53268f --- /dev/null +++ b/src/stores/modules/rateLimit.ts @@ -0,0 +1,14 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' + + + +export const useRateLimitStore = defineStore('rateLimit', () => { + const timestamps = ref([]) + + return { + timestamps + } +}, { + persist: true +}) \ No newline at end of file diff --git a/src/stores/modules/tabIndex.ts b/src/stores/modules/tabIndex.ts new file mode 100644 index 0000000..444a316 --- /dev/null +++ b/src/stores/modules/tabIndex.ts @@ -0,0 +1,14 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' + + + +export const useTabStore = defineStore('tab', () => { + const tabIndex = ref(1) + + return { + tabIndex + } +}, { + persist: true +}) \ No newline at end of file diff --git a/src/stores/modules/user.ts b/src/stores/modules/user.ts new file mode 100644 index 0000000..9ac4e3f --- /dev/null +++ b/src/stores/modules/user.ts @@ -0,0 +1,21 @@ +import { defineStore } from 'pinia' +import { ref } from 'vue' + +interface Yao { + time: number, // 时间轴 + symbol1?: string, // 主爻结果 + symbol2?: string, // 动爻内容 + symbolNum: string // 主卦结果数字 + result?: string, // 算卦结果 + q: string, // 所问之事 +} + +export const useUserStore = defineStore('user', () => { + const yaoList = ref([]) + + return { + yaoList + } +}, { + persist: true +}) \ No newline at end of file diff --git a/src/uni.scss b/src/uni.scss new file mode 100644 index 0000000..845142d --- /dev/null +++ b/src/uni.scss @@ -0,0 +1,76 @@ +/** + * 这里是uni-app内置的常用样式变量 + * + * uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量 + * 如果你是插件开发者,建议你使用scss预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的App + * + */ + +/** + * 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能 + * + * 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件 + */ + +/* 颜色变量 */ + +/* 行为相关颜色 */ +$uni-color-primary: #007aff; +$uni-color-success: #4cd964; +$uni-color-warning: #f0ad4e; +$uni-color-error: #dd524d; + +/* 文字基本颜色 */ +$uni-text-color:#333;//基本色 +$uni-text-color-inverse:#fff;//反色 +$uni-text-color-grey:#999;//辅助灰色,如加载更多的提示信息 +$uni-text-color-placeholder: #808080; +$uni-text-color-disable:#c0c0c0; + +/* 背景颜色 */ +$uni-bg-color:#ffffff; +$uni-bg-color-grey:#f8f8f8; +$uni-bg-color-hover:#f1f1f1;//点击状态颜色 +$uni-bg-color-mask:rgba(0, 0, 0, 0.4);//遮罩颜色 + +/* 边框颜色 */ +$uni-border-color:#c8c7cc; + +/* 尺寸变量 */ + +/* 文字尺寸 */ +$uni-font-size-sm:24rpx; +$uni-font-size-base:28rpx; +$uni-font-size-lg:32rpx; + +/* 图片尺寸 */ +$uni-img-size-sm:40rpx; +$uni-img-size-base:52rpx; +$uni-img-size-lg:80rpx; + +/* Border Radius */ +$uni-border-radius-sm: 4rpx; +$uni-border-radius-base: 6rpx; +$uni-border-radius-lg: 12rpx; +$uni-border-radius-circle: 50%; + +/* 水平间距 */ +$uni-spacing-row-sm: 10px; +$uni-spacing-row-base: 20rpx; +$uni-spacing-row-lg: 30rpx; + +/* 垂直间距 */ +$uni-spacing-col-sm: 8rpx; +$uni-spacing-col-base: 16rpx; +$uni-spacing-col-lg: 24rpx; + +/* 透明度 */ +$uni-opacity-disabled: 0.3; // 组件禁用态的透明度 + +/* 文章场景相关 */ +$uni-color-title: #2C405A; // 文章标题颜色 +$uni-font-size-title:40rpx; +$uni-color-subtitle: #555555; // 二级标题颜色 +$uni-font-size-subtitle:36rpx; +$uni-color-paragraph: #3F536E; // 文章段落颜色 +$uni-font-size-paragraph:30rpx; \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/changelog.md b/src/uni_modules/wot-design-uni/changelog.md new file mode 100644 index 0000000..d089f44 --- /dev/null +++ b/src/uni_modules/wot-design-uni/changelog.md @@ -0,0 +1,2277 @@ +## 1.13.0(2025-09-29) +## [1.13.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.12.4...v1.13.0) (2025-09-28) + + +### ✨ Features | 新功能 + +* ✨ 为 Curtain 组件添加 show-menu-by-longpress 和 close-on-click 属性 ([a905655](https://github.com/Moonofweisheng/wot-design-uni/commit/a90565510ab55431f6d7537da465cc8299d07a46)), closes [#1279](https://github.com/Moonofweisheng/wot-design-uni/issues/1279) +* ✨ 优化 Swiper 使用默认插槽时插槽内容的显示效果 ([#1301](https://github.com/Moonofweisheng/wot-design-uni/issues/1301)) ([41dd417](https://github.com/Moonofweisheng/wot-design-uni/commit/41dd4177b66e6e03357ce79f5c9b92fa2a932a7a)) +* ✨ 优化 Toast 组件图标的体积 ([#1034](https://github.com/Moonofweisheng/wot-design-uni/issues/1034)) ([c984cff](https://github.com/Moonofweisheng/wot-design-uni/commit/c984cff24749ffd753f21f04c79c6f896f7bd9ef)) +* ✨ 增加车牌键盘语言切换功能,支持受控和非受控模式 ([#1294](https://github.com/Moonofweisheng/wot-design-uni/issues/1294)) ([9943011](https://github.com/Moonofweisheng/wot-design-uni/commit/9943011b4c629625091e82115d9241e6503efeae)), closes [#1275](https://github.com/Moonofweisheng/wot-design-uni/issues/1275) [#818](https://github.com/Moonofweisheng/wot-design-uni/issues/818) +* ✨ button组件支持微信小程序的getrealtimephonenumber 事件 ([#1097](https://github.com/Moonofweisheng/wot-design-uni/issues/1097)) ([ed412b6](https://github.com/Moonofweisheng/wot-design-uni/commit/ed412b67261fce04c51d5c5b8836ca4dd0dc22a4)) +* ✨ Cell 新增 icon-siz 属性用于指定左侧图标大小 ([#1298](https://github.com/Moonofweisheng/wot-design-uni/issues/1298)) ([9585db1](https://github.com/Moonofweisheng/wot-design-uni/commit/9585db11503bc5e77e72e78ba7a51f1f6932f510)), closes [#1088](https://github.com/Moonofweisheng/wot-design-uni/issues/1088) +* ✨ Rate 支持清空评分([#1302](https://github.com/Moonofweisheng/wot-design-uni/issues/1302)) ([1333bda](https://github.com/Moonofweisheng/wot-design-uni/commit/1333bdac4f8f605c3c9851d0f43d267205ce5aef)), closes [#1293](https://github.com/Moonofweisheng/wot-design-uni/issues/1293) +* ✨ swiper新增default slot 用户可自定义swiper-item中的内容展示 ([#1164](https://github.com/Moonofweisheng/wot-design-uni/issues/1164)) ([046b135](https://github.com/Moonofweisheng/wot-design-uni/commit/046b135a14a938840c9309c6b9eedb1878866ac9)) +* ✨ wd-picker-view 添加 item-height 属性 ([8d84508](https://github.com/Moonofweisheng/wot-design-uni/commit/8d845081657581a84282f8d4de6039272700e9b0)) + + +### Documentation | 文档 + +* 修复黑暗模式下demo页面样式异常 ([397c883](https://github.com/Moonofweisheng/wot-design-uni/commit/397c88338a65afa71f452a67cec938afd5e25e9a)) +* 补充 Button 组件的 getRealtimePhoneNumber 仅支持微信小程序 ([7466c91](https://github.com/Moonofweisheng/wot-design-uni/commit/7466c91c1a50318c6f80cbcbeb368dad2bff7dd9)) +* 补全一些缺失的文档 ([b0bb46d](https://github.com/Moonofweisheng/wot-design-uni/commit/b0bb46d3a792bc01c7f8fdbe97835fc04ae577bc)) +* 调整 Gap 文档描述错误的问题 ([1a9f626](https://github.com/Moonofweisheng/wot-design-uni/commit/1a9f62698643b5d1e5fc24be52ad3416464ff651)) +* 调整文档站点域名为 wot-ui.cn ([4c8cdb8](https://github.com/Moonofweisheng/wot-design-uni/commit/4c8cdb83d077370f6d81b9250c6651301521eb6b)) +* 更新快速上手项目链接 ([d86dd18](https://github.com/Moonofweisheng/wot-design-uni/commit/d86dd18b49bbaf2a06a6f85338b2e9fe6b9950b6)) +* 添加 vscode 代码提示插件 ([c3c6eb1](https://github.com/Moonofweisheng/wot-design-uni/commit/c3c6eb124985b4620a336c034919085ecaed20d9)) +* 添加博客链接地址 ([d7272eb](https://github.com/Moonofweisheng/wot-design-uni/commit/d7272ebab6fbea321133ee52ce1c6748567bf486)) +* 添加关于全局反馈方案和最佳实践分享的文档 ([a4d2550](https://github.com/Moonofweisheng/wot-design-uni/commit/a4d2550fefe77c64e179ebd22d212827b5fa5217)) +* 添加赞助渠道 ([3564bce](https://github.com/Moonofweisheng/wot-design-uni/commit/3564bce12f4341bd329731c9a18121c611c460c7)) +* 文档首页新增快速上手模板和公众号的入口 ([e80b0df](https://github.com/Moonofweisheng/wot-design-uni/commit/e80b0df51e5049cecf4f0f70cc83535dc52f8e06)) +* 优化演示 Demo 在小屏幕上的显示效果 ([#1296](https://github.com/Moonofweisheng/wot-design-uni/issues/1296)) ([0dbdde9](https://github.com/Moonofweisheng/wot-design-uni/commit/0dbdde9e23645c4735e4051f5c259b0c473df896)) +* 优化演示demo显示效果 ([868b5ad](https://github.com/Moonofweisheng/wot-design-uni/commit/868b5ad3108f45a096da967f92793ae05b645c2b)), closes [#1269](https://github.com/Moonofweisheng/wot-design-uni/issues/1269) +* 友情链接支持一行最多四个 ([4810db7](https://github.com/Moonofweisheng/wot-design-uni/commit/4810db7d6fba25062382be3f862b5ba252052b70)) +* 添加 img 组件 transformAssetUrls 配置介绍 ([#1259](https://github.com/Moonofweisheng/wot-design-uni/issues/1259)) ([96cf9c7](https://github.com/Moonofweisheng/wot-design-uni/commit/96cf9c7082b94904d45ef1a514f66bff60a57071)) +* 修正 Text 组件文档一些语言组织的错误 ([abc4571](https://github.com/Moonofweisheng/wot-design-uni/commit/abc457147a09444fa82868aa73800958b3621796)) +* 修复 starter 地址错误 ([#1316](https://github.com/Moonofweisheng/wot-design-uni/issues/1316)) ([00212b0](https://github.com/Moonofweisheng/wot-design-uni/commit/00212b0e3ecad336edbeec6473db01a67c04cb6b)) + + +### Bug Fixes | Bug 修复 + +* 修复 Segmented 选项点击时无论是否改变选中值都会触发 change 的问题 ([#1326](https://github.com/Moonofweisheng/wot-design-uni/issues/1326)) ([5657aa6](https://github.com/Moonofweisheng/wot-design-uni/commit/5657aa68a8357ca66c626b7e844c18aa95828c6d)), closes [#1323](https://github.com/Moonofweisheng/wot-design-uni/issues/1323) +* 修复 table 组件表头文字溢出样式异常的问题 ([#1297](https://github.com/Moonofweisheng/wot-design-uni/issues/1297)) ([5e186ea](https://github.com/Moonofweisheng/wot-design-uni/commit/5e186ea4b2f8fea09cb1913c6a63f1e60827ec4e)), closes [#1182](https://github.com/Moonofweisheng/wot-design-uni/issues/1182) [#1058](https://github.com/Moonofweisheng/wot-design-uni/issues/1058) +* 修复wd-drop-menu-item组件在popup数据较多在滚动区下拉时和页面onPullDownRefresh之间的冲突 ([#1113](https://github.com/Moonofweisheng/wot-design-uni/issues/1113)) ([73027c0](https://github.com/Moonofweisheng/wot-design-uni/commit/73027c0cefe980c27f46412c5648761c30a01bd0)), closes [#1107](https://github.com/Moonofweisheng/wot-design-uni/issues/1107) + +# 更新日志 + + +## [1.13.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.12.4...v1.13.0) (2025-09-28) + + +### ✨ Features | 新功能 + +* ✨ 为 Curtain 组件添加 show-menu-by-longpress 和 close-on-click 属性 ([a905655](https://github.com/Moonofweisheng/wot-design-uni/commit/a90565510ab55431f6d7537da465cc8299d07a46)), closes [#1279](https://github.com/Moonofweisheng/wot-design-uni/issues/1279) +* ✨ 优化 Swiper 使用默认插槽时插槽内容的显示效果 ([#1301](https://github.com/Moonofweisheng/wot-design-uni/issues/1301)) ([41dd417](https://github.com/Moonofweisheng/wot-design-uni/commit/41dd4177b66e6e03357ce79f5c9b92fa2a932a7a)) +* ✨ 优化 Toast 组件图标的体积 ([#1034](https://github.com/Moonofweisheng/wot-design-uni/issues/1034)) ([c984cff](https://github.com/Moonofweisheng/wot-design-uni/commit/c984cff24749ffd753f21f04c79c6f896f7bd9ef)) +* ✨ 增加车牌键盘语言切换功能,支持受控和非受控模式 ([#1294](https://github.com/Moonofweisheng/wot-design-uni/issues/1294)) ([9943011](https://github.com/Moonofweisheng/wot-design-uni/commit/9943011b4c629625091e82115d9241e6503efeae)), closes [#1275](https://github.com/Moonofweisheng/wot-design-uni/issues/1275) [#818](https://github.com/Moonofweisheng/wot-design-uni/issues/818) +* ✨ button组件支持微信小程序的getrealtimephonenumber 事件 ([#1097](https://github.com/Moonofweisheng/wot-design-uni/issues/1097)) ([ed412b6](https://github.com/Moonofweisheng/wot-design-uni/commit/ed412b67261fce04c51d5c5b8836ca4dd0dc22a4)) +* ✨ Cell 新增 icon-siz 属性用于指定左侧图标大小 ([#1298](https://github.com/Moonofweisheng/wot-design-uni/issues/1298)) ([9585db1](https://github.com/Moonofweisheng/wot-design-uni/commit/9585db11503bc5e77e72e78ba7a51f1f6932f510)), closes [#1088](https://github.com/Moonofweisheng/wot-design-uni/issues/1088) +* ✨ Rate 支持清空评分([#1302](https://github.com/Moonofweisheng/wot-design-uni/issues/1302)) ([1333bda](https://github.com/Moonofweisheng/wot-design-uni/commit/1333bdac4f8f605c3c9851d0f43d267205ce5aef)), closes [#1293](https://github.com/Moonofweisheng/wot-design-uni/issues/1293) +* ✨ swiper新增default slot 用户可自定义swiper-item中的内容展示 ([#1164](https://github.com/Moonofweisheng/wot-design-uni/issues/1164)) ([046b135](https://github.com/Moonofweisheng/wot-design-uni/commit/046b135a14a938840c9309c6b9eedb1878866ac9)) +* ✨ wd-picker-view 添加 item-height 属性 ([8d84508](https://github.com/Moonofweisheng/wot-design-uni/commit/8d845081657581a84282f8d4de6039272700e9b0)) + + +### ✏️ Documentation | 文档 + +* 修复黑暗模式下demo页面样式异常 ([397c883](https://github.com/Moonofweisheng/wot-design-uni/commit/397c88338a65afa71f452a67cec938afd5e25e9a)) +* ✏️ 补充 Button 组件的 getRealtimePhoneNumber 仅支持微信小程序 ([7466c91](https://github.com/Moonofweisheng/wot-design-uni/commit/7466c91c1a50318c6f80cbcbeb368dad2bff7dd9)) +* ✏️ 补全一些缺失的文档 ([b0bb46d](https://github.com/Moonofweisheng/wot-design-uni/commit/b0bb46d3a792bc01c7f8fdbe97835fc04ae577bc)) +* ✏️ 调整 Gap 文档描述错误的问题 ([1a9f626](https://github.com/Moonofweisheng/wot-design-uni/commit/1a9f62698643b5d1e5fc24be52ad3416464ff651)) +* ✏️ 调整文档站点域名为 wot-ui.cn ([4c8cdb8](https://github.com/Moonofweisheng/wot-design-uni/commit/4c8cdb83d077370f6d81b9250c6651301521eb6b)) +* ✏️ 更新快速上手项目链接 ([d86dd18](https://github.com/Moonofweisheng/wot-design-uni/commit/d86dd18b49bbaf2a06a6f85338b2e9fe6b9950b6)) +* ✏️ 添加 vscode 代码提示插件 ([c3c6eb1](https://github.com/Moonofweisheng/wot-design-uni/commit/c3c6eb124985b4620a336c034919085ecaed20d9)) +* ✏️ 添加博客链接地址 ([d7272eb](https://github.com/Moonofweisheng/wot-design-uni/commit/d7272ebab6fbea321133ee52ce1c6748567bf486)) +* ✏️ 添加关于全局反馈方案和最佳实践分享的文档 ([a4d2550](https://github.com/Moonofweisheng/wot-design-uni/commit/a4d2550fefe77c64e179ebd22d212827b5fa5217)) +* ✏️ 添加赞助渠道 ([3564bce](https://github.com/Moonofweisheng/wot-design-uni/commit/3564bce12f4341bd329731c9a18121c611c460c7)) +* ✏️ 文档首页新增快速上手模板和公众号的入口 ([e80b0df](https://github.com/Moonofweisheng/wot-design-uni/commit/e80b0df51e5049cecf4f0f70cc83535dc52f8e06)) +* ✏️ 优化演示 Demo 在小屏幕上的显示效果 ([#1296](https://github.com/Moonofweisheng/wot-design-uni/issues/1296)) ([0dbdde9](https://github.com/Moonofweisheng/wot-design-uni/commit/0dbdde9e23645c4735e4051f5c259b0c473df896)) +* ✏️ 优化演示demo显示效果 ([868b5ad](https://github.com/Moonofweisheng/wot-design-uni/commit/868b5ad3108f45a096da967f92793ae05b645c2b)), closes [#1269](https://github.com/Moonofweisheng/wot-design-uni/issues/1269) +* ✏️ 友情链接支持一行最多四个 ([4810db7](https://github.com/Moonofweisheng/wot-design-uni/commit/4810db7d6fba25062382be3f862b5ba252052b70)) +* ✏️ 添加 img 组件 transformAssetUrls 配置介绍 ([#1259](https://github.com/Moonofweisheng/wot-design-uni/issues/1259)) ([96cf9c7](https://github.com/Moonofweisheng/wot-design-uni/commit/96cf9c7082b94904d45ef1a514f66bff60a57071)) +* ✏️ 修正 Text 组件文档一些语言组织的错误 ([abc4571](https://github.com/Moonofweisheng/wot-design-uni/commit/abc457147a09444fa82868aa73800958b3621796)) +* 修复 starter 地址错误 ([#1316](https://github.com/Moonofweisheng/wot-design-uni/issues/1316)) ([00212b0](https://github.com/Moonofweisheng/wot-design-uni/commit/00212b0e3ecad336edbeec6473db01a67c04cb6b)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Segmented 选项点击时无论是否改变选中值都会触发 change 的问题 ([#1326](https://github.com/Moonofweisheng/wot-design-uni/issues/1326)) ([5657aa6](https://github.com/Moonofweisheng/wot-design-uni/commit/5657aa68a8357ca66c626b7e844c18aa95828c6d)), closes [#1323](https://github.com/Moonofweisheng/wot-design-uni/issues/1323) +* 🐛 修复 table 组件表头文字溢出样式异常的问题 ([#1297](https://github.com/Moonofweisheng/wot-design-uni/issues/1297)) ([5e186ea](https://github.com/Moonofweisheng/wot-design-uni/commit/5e186ea4b2f8fea09cb1913c6a63f1e60827ec4e)), closes [#1182](https://github.com/Moonofweisheng/wot-design-uni/issues/1182) [#1058](https://github.com/Moonofweisheng/wot-design-uni/issues/1058) +* 🐛 修复wd-drop-menu-item组件在popup数据较多在滚动区下拉时和页面onPullDownRefresh之间的冲突 ([#1113](https://github.com/Moonofweisheng/wot-design-uni/issues/1113)) ([73027c0](https://github.com/Moonofweisheng/wot-design-uni/commit/73027c0cefe980c27f46412c5648761c30a01bd0)), closes [#1107](https://github.com/Moonofweisheng/wot-design-uni/issues/1107) + +### [1.12.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.12.3...v1.12.4) (2025-08-28) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Upload 设置 multiple 无效的问题 ([#1250](https://github.com/Moonofweisheng/wot-design-uni/issues/1250)) ([784aab4](https://github.com/Moonofweisheng/wot-design-uni/commit/784aab4aa156e2a440db7d1a0a10e36358851763)) + +### [1.12.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.12.2...v1.12.3) (2025-08-27) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Fab、Cell组件 Icon 垂直居中异常的问题 ([#1249](https://github.com/Moonofweisheng/wot-design-uni/issues/1249)) ([d7dac97](https://github.com/Moonofweisheng/wot-design-uni/commit/d7dac979982513c88363dd6224352ab099b7d0c3)) + +### [1.12.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.12.1...v1.12.2) (2025-08-26) + + +### ✨ Features | 新功能 + +* ✨ 调整 composables 的导出,新增 useCountDown 的导出 ([#1242](https://github.com/Moonofweisheng/wot-design-uni/issues/1242)) ([93fafa1](https://github.com/Moonofweisheng/wot-design-uni/commit/93fafa180fcfb3fa07deab0393449e822179d43b)), closes [#1239](https://github.com/Moonofweisheng/wot-design-uni/issues/1239) +* ✨ DroMenu 图标大小和位置样式逻辑调整为不缩放且不使用绝对定位 ([#1243](https://github.com/Moonofweisheng/wot-design-uni/issues/1243)) ([e59fd56](https://github.com/Moonofweisheng/wot-design-uni/commit/e59fd568be9284b7eb91575a3f59194cd681828c)) + +### [1.12.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.12.0...v1.12.1) (2025-08-25) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 DropDown 图标垂直居中异常的问题 ([37042c7](https://github.com/Moonofweisheng/wot-design-uni/commit/37042c7766bfe366828f51201c6023aeb4cfaec6)) + +## [1.12.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.11.1...v1.12.0) (2025-08-24) + + +### ✨ Features | 新功能 + +* ✨ 为 Cell、Input、Textarea 等组件添加 marker-side 属性控制必填*位置 ([#1181](https://github.com/Moonofweisheng/wot-design-uni/issues/1181)) ([cade06f](https://github.com/Moonofweisheng/wot-design-uni/commit/cade06fe4a776e55a862a58f1eddc1fe0f055a88)), closes [#555](https://github.com/Moonofweisheng/wot-design-uni/issues/555) +* ✨ 新增维语本地化支持 ([b4e8605](https://github.com/Moonofweisheng/wot-design-uni/commit/b4e86053b4bb73ef89ae91330d50b6e68349ad20)) +* ✨ Upload 上传组件调信小程序端使用chooseMedia替换掉chooseImage等 ([57d89f3](https://github.com/Moonofweisheng/wot-design-uni/commit/57d89f33d769362c198048d37b44f7d67ed384f4)), closes [#1193](https://github.com/Moonofweisheng/wot-design-uni/issues/1193) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 签字版组件设置exportScale < 1时在支付宝上导出图片不完整 ([#1129](https://github.com/Moonofweisheng/wot-design-uni/issues/1129)) ([555ae5f](https://github.com/Moonofweisheng/wot-design-uni/commit/555ae5f40049ffd958ec4e58e80ccd3ba4f524f3)) +* 🐛 修复 grid-item 组件 custom-text 失效的问题 ([#1180](https://github.com/Moonofweisheng/wot-design-uni/issues/1180)) ([5abc3b5](https://github.com/Moonofweisheng/wot-design-uni/commit/5abc3b5344bd2f880ef94350e10c2ef9e9f9250f)), closes [#995](https://github.com/Moonofweisheng/wot-design-uni/issues/995) +* 🐛 修复 signature 组件设置background-color为透明色导致撤销无效 ([#1224](https://github.com/Moonofweisheng/wot-design-uni/issues/1224)) ([2e67adf](https://github.com/Moonofweisheng/wot-design-uni/commit/2e67adf2bae212a03f3cef3113326f4d942b0b55)), closes [#1223](https://github.com/Moonofweisheng/wot-design-uni/issues/1223) +* 🐛 修复 Upload 多选时配置为覆盖上传图片达到上限无法替换图片的问题 ([00ab76b](https://github.com/Moonofweisheng/wot-design-uni/commit/00ab76bd91e91a3d0fabdb8b80e00df764055519)) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复基础组件文档问题 - 阶段一完成 ([#1220](https://github.com/Moonofweisheng/wot-design-uni/issues/1220)) ([9132174](https://github.com/Moonofweisheng/wot-design-uni/commit/9132174b11c539d2ec5f8d0aec2044ac1affaaff)) +* ✏️ 修正 drop-menu-item options 默认数据结构注释 ([#1087](https://github.com/Moonofweisheng/wot-design-uni/issues/1087)) ([7a2cd2d](https://github.com/Moonofweisheng/wot-design-uni/commit/7a2cd2da93746761b05e068083b171312c4af0e3)) +* 修复 Button/Icon/ConfigProvider/Popup 组件文档不一致问题 ([#1190](https://github.com/Moonofweisheng/wot-design-uni/issues/1190)) ([04d0d11](https://github.com/Moonofweisheng/wot-design-uni/commit/04d0d1184957bb1ae5b1ee2ddfaa978a989427b3)) + +### [1.11.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.11.0...v1.11.1) (2025-07-25) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 RootPortal 及 Picker 相关组件 type-check 错误的问题 ([1859294](https://github.com/Moonofweisheng/wot-design-uni/commit/185929461c56d596b6a9d0dabe117e229ceda601)) + +## [1.11.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.10.0...v1.11.0) (2025-07-20) + + +### ✨ Features | 新功能 + +* ✨ 结合Cell组件重构Picker相关组件的触发器 ([4a50f2d](https://github.com/Moonofweisheng/wot-design-uni/commit/4a50f2db5956134d579b3be5830f786deb272364)) +* ✨ 新增 root-portal 组件支持从页面中脱离出来,用于解决各种 fixed 失效问题 ([#1155](https://github.com/Moonofweisheng/wot-design-uni/issues/1155)) ([372735a](https://github.com/Moonofweisheng/wot-design-uni/commit/372735a16af7d9a9f3a1a75a8493c2293f2aa216)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 DatetimePicker 超出隐藏 ellipsis 无效的问题 ([cdf1f78](https://github.com/Moonofweisheng/wot-design-uni/commit/cdf1f78513e6116a5f837237af766d00e1244668)) +* 🐛 修复 DatetimePicker 区间选择时无法选择绑定值范围以外的时间的问题 ([3c1023c](https://github.com/Moonofweisheng/wot-design-uni/commit/3c1023c9f6e07b17f684f7a62c5c8ffc462b9808)), closes [#1170](https://github.com/Moonofweisheng/wot-design-uni/issues/1170) +* 🐛 修复 Overlay 组件锁定背景滚动属性 lock-scroll 无法取消的问题 ([#1149](https://github.com/Moonofweisheng/wot-design-uni/issues/1149)) ([f3ccf3d](https://github.com/Moonofweisheng/wot-design-uni/commit/f3ccf3d936d7224468a29f869c326d98ea8c87f8)) + + +### ✏️ Documentation | 文档 + +* ✏️ 更新微信小程序演示二维码 ([28d5970](https://github.com/Moonofweisheng/wot-design-uni/commit/28d5970a4f6a9548469fcdc2be48737c13d4014c)) +* ✏️ 添加脚手架与模板的介绍 ([27243c1](https://github.com/Moonofweisheng/wot-design-uni/commit/27243c134114a7c5c52395f22c07a33760427a33)) +* ✏️ 添加快速上手项目链接 ([ed923ec](https://github.com/Moonofweisheng/wot-design-uni/commit/ed923ecf99728813410164fe4963c520592a12a4)) +* ✏️ 文档侧边栏新增版本号显示 ([6c6d5c9](https://github.com/Moonofweisheng/wot-design-uni/commit/6c6d5c9ea3a3016bd4eb9e85e0a6ae1472c02b13)) +* ✏️ 新增咨询服务章节 ([66f796e](https://github.com/Moonofweisheng/wot-design-uni/commit/66f796e4406309c0f5ad09d1b521aab6962047c9)) +* ✏️ 修复快速上手页面存在死链的问题 ([722103c](https://github.com/Moonofweisheng/wot-design-uni/commit/722103c46dcfec530c7675f5fac4d6b4e8d6c4ea)) +* ✏️ 修复文档中 calendar 类型名 `monthrang` → `monthrange` 的拼写错误。 ([41a6fe3](https://github.com/Moonofweisheng/wot-design-uni/commit/41a6fe3647c9837e0a6cb964882e9e5812ed7b7f)) +* **backtop:** ✏️ 修正文档中 BackTop 组件的 bottom 属性描述从「距离屏幕顶部的距离」修改为「距离屏幕底部的距离」 ([5a458fc](https://github.com/Moonofweisheng/wot-design-uni/commit/5a458fc723fe0745dc7de8ffc7e50b5c7f75654d)) +* **backtop:** ✏️ 修正文档中 bottom 属性的描述 ([b0cd321](https://github.com/Moonofweisheng/wot-design-uni/commit/b0cd321c5ed4e8f6042bd85551b7efe96e891156)) +* **component:** ✏️ 移除多余的 H5 平台标题 ([f851d13](https://github.com/Moonofweisheng/wot-design-uni/commit/f851d139b1b00967fc5f2bcb1d7517a58f40adf7)) +* **datetime-picker:** 添加 before-confirm 回调中使用loading的提示 ([c61b33f](https://github.com/Moonofweisheng/wot-design-uni/commit/c61b33f51a3a8e00900ba765b72d6056b1299c0c)) +* unibest 链接地址更新 ([645e022](https://github.com/Moonofweisheng/wot-design-uni/commit/645e022094122ef3afee81c5f8059429e950a68a)) + +## [1.10.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.9.1...v1.10.0) (2025-06-29) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整微信小程序演示demo激励按钮的文案以应对微信审核 ([06323a9](https://github.com/Moonofweisheng/wot-design-uni/commit/06323a9b3228299fa9cf4ff6cd826514ced1dc32)) +* ✏️ 简化组件库通用名称为 WotUI ([8177978](https://github.com/Moonofweisheng/wot-design-uni/commit/817797801de1228d39ff399c7792d76c2652e94d)) +* ✏️ 添加 WotUI 加群凭证相关介绍 ([341b9e1](https://github.com/Moonofweisheng/wot-design-uni/commit/341b9e1c1e98699510bbdc4587782b3647d2c4ba)) +* ✏️ 修正示例 demo 源码链接地址 ([1ccdb4a](https://github.com/Moonofweisheng/wot-design-uni/commit/1ccdb4a7468ce7984ac4f17305212aebc54f62c3)), closes [#1045](https://github.com/Moonofweisheng/wot-design-uni/issues/1045) +* ✏️ 优化加群文档使其更加清晰明确 ([207dfb8](https://github.com/Moonofweisheng/wot-design-uni/commit/207dfb8c9bbf4434ec51e186886ad8dba6289153)) +* ✏️ 优秀案例改为取线上资源 ([053485b](https://github.com/Moonofweisheng/wot-design-uni/commit/053485b470419b5a451b73aec0dc03d12b7dde56)) +* ✏️ update cases ([f1ad2fa](https://github.com/Moonofweisheng/wot-design-uni/commit/f1ad2fa05efba00d89958adba5ca967eead01cfe)) + + +### ✨ Features | 新功能 + +* ✨ DatetimePicker 支持time和date-time类型下配置选择到秒 ([#1117](https://github.com/Moonofweisheng/wot-design-uni/issues/1117)) ([f2e8fda](https://github.com/Moonofweisheng/wot-design-uni/commit/f2e8fdad8026b4b8ce5d11a2e80d5a565031cdc5)), closes [#844](https://github.com/Moonofweisheng/wot-design-uni/issues/844) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 DropDownItem 自定义样式类 CustomIcon 无效的问题 ([cb408f5](https://github.com/Moonofweisheng/wot-design-uni/commit/cb408f553a2e5d84225b5dcdb447dd784992aa6b)), closes [#1119](https://github.com/Moonofweisheng/wot-design-uni/issues/1119) +* 🐛 修复 DropMenu 设置 Modal 无效的问题 ([#1125](https://github.com/Moonofweisheng/wot-design-uni/issues/1125)) ([eddbd5d](https://github.com/Moonofweisheng/wot-design-uni/commit/eddbd5d22e6cb413e5bf06a642f60f6e081a9074)), closes [#1121](https://github.com/Moonofweisheng/wot-design-uni/issues/1121) +* 🐛 修复 Input、Textarea、Search 组件设置清空后不聚焦时无法触发失焦事件的问题 ([#1046](https://github.com/Moonofweisheng/wot-design-uni/issues/1046)) ([33b5565](https://github.com/Moonofweisheng/wot-design-uni/commit/33b556546a03e240cfcb3662286cc6dc70b70263)) +* 🐛 修复 Slider 处理边界值异常的问题,优化样式和事件处理逻辑 ([#1050](https://github.com/Moonofweisheng/wot-design-uni/issues/1050)) ([0d7ed81](https://github.com/Moonofweisheng/wot-design-uni/commit/0d7ed8129c623c0b423fe8da6814417417ea3114)), closes [#1023](https://github.com/Moonofweisheng/wot-design-uni/issues/1023) +* 🐛 修复 Toast 英文断行样式错误问题 ([#1067](https://github.com/Moonofweisheng/wot-design-uni/issues/1067)) ([09dde62](https://github.com/Moonofweisheng/wot-design-uni/commit/09dde6278ed9bb0a57709c15ea4dff8da6e786cd)) +* 🐛 修复 wd-img-cropper 组件在微信小程序中旋转图片后操作卡顿的问题 ([#1112](https://github.com/Moonofweisheng/wot-design-uni/issues/1112)) ([50782a1](https://github.com/Moonofweisheng/wot-design-uni/commit/50782a16717d483f4dc7095e2f6096591999df01)) +* 🐛 修复 wd-slider 滑块不跟手的问题 ([#1114](https://github.com/Moonofweisheng/wot-design-uni/issues/1114)) ([e3dc36e](https://github.com/Moonofweisheng/wot-design-uni/commit/e3dc36e832a74029348a859adb53f06054e9eea6)) +* 🐛 修复NumberKeyboard组件使用 title 插槽未传入关闭文本时不展示头部的问题 ([#1060](https://github.com/Moonofweisheng/wot-design-uni/issues/1060)) ([875e072](https://github.com/Moonofweisheng/wot-design-uni/commit/875e072b3ea8dff270cb2214f94b95e03fa210db)), closes [#760](https://github.com/Moonofweisheng/wot-design-uni/issues/760) +* 🐛 优化 InputNumbe 处理中间状态值的逻辑,支持配置不立即响应输入变化 ([#1116](https://github.com/Moonofweisheng/wot-design-uni/issues/1116)) ([ff99b22](https://github.com/Moonofweisheng/wot-design-uni/commit/ff99b22a6930ea500539f403f23d46cd836e8bca)) +* 修复 wd-upload 组件的 formData 属性的 ts 类型为 void 的问题 ([#1106](https://github.com/Moonofweisheng/wot-design-uni/issues/1106)) ([6026137](https://github.com/Moonofweisheng/wot-design-uni/commit/60261374acb99f64298c724e1f8d1df3061bd85a)) + +### [1.9.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.9.0...v1.9.1) (2025-05-08) + + +### ✏️ Documentation | 文档 + +* ✏️ 处理小程序超包 ([08e9ee1](https://github.com/Moonofweisheng/wot-design-uni/commit/08e9ee1cb366e4c5ec87d989795d58399cb1df32)) +* ✏️ 修复部分组件二维码显示异常的问题 ([eea9bf7](https://github.com/Moonofweisheng/wot-design-uni/commit/eea9bf7aac36cfd9b7b476392c35e3db097e4891)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Upload 开启 multiple 后只能成功上传最后一个文件的问题 ([#1044](https://github.com/Moonofweisheng/wot-design-uni/issues/1044)) ([f2ae0d3](https://github.com/Moonofweisheng/wot-design-uni/commit/f2ae0d3aacab3b95b48f623623c5bf1f9acecf18)), closes [#1043](https://github.com/Moonofweisheng/wot-design-uni/issues/1043) + +## [1.9.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.8.0...v1.9.0) (2025-05-07) + + +### ⚡ Performance Improvements | 性能优化 + +* ⚡ 增强 wd-drop-menu 组件,优化遮罩层闪烁 ([#974](https://github.com/Moonofweisheng/wot-design-uni/issues/974)) ([f9605b7](https://github.com/Moonofweisheng/wot-design-uni/commit/f9605b71b667cfaad56b7b028d53ccff5112ddf8)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Curtain 幕帘组件 close 事件触发2次的问题 ([460a838](https://github.com/Moonofweisheng/wot-design-uni/commit/460a83802bad5b38d6e7063e481e510ed69dffb9)), closes [#894](https://github.com/Moonofweisheng/wot-design-uni/issues/894) +* 🐛 修复 message-box 配合 layouts 使用全局 message-box 时,切换页面可能会显示上一次的 message-box 内容的问题 ([f137a63](https://github.com/Moonofweisheng/wot-design-uni/commit/f137a6313e45e65dd23a03ae88b304e07b1a377e)) +* 🐛 修复 Textarea 设置为 null 时,显示字数限制显示错误问题 ([#1004](https://github.com/Moonofweisheng/wot-design-uni/issues/1004)) ([60f2fe6](https://github.com/Moonofweisheng/wot-design-uni/commit/60f2fe61ae77e170e2c05e1b20d256ab107ee4db)), closes [#1003](https://github.com/Moonofweisheng/wot-design-uni/issues/1003) +* 🐛 修复部分国际化文本不正确的问题 ([#970](https://github.com/Moonofweisheng/wot-design-uni/issues/970)) ([4319fa9](https://github.com/Moonofweisheng/wot-design-uni/commit/4319fa9badf3e3dd08218e8e90604c91c49b49c7)) +* 🐛 修复多个 ImgCropper 存在时生成图片异常的问题 ([1876fc3](https://github.com/Moonofweisheng/wot-design-uni/commit/1876fc3d0c21c2d9d9c45fe3096690a0bde46493)) + + +### ✨ Features | 新功能 + +* ✨ 将 Tabbar 和 Badge 设置为标准盒子模型 ([#1036](https://github.com/Moonofweisheng/wot-design-uni/issues/1036)) ([7f2ccb2](https://github.com/Moonofweisheng/wot-design-uni/commit/7f2ccb2d372c412670bfe4ac833f8dc957d994e9)) +* ✨ 提供 useUpload hooks 用于便捷上传 ([#969](https://github.com/Moonofweisheng/wot-design-uni/issues/969)) ([49fe25a](https://github.com/Moonofweisheng/wot-design-uni/commit/49fe25a99bb0c60b3a81a11ef7eb06e762fb1d25)) +* ✨ 添加组合式API文档并提供相关API ([#972](https://github.com/Moonofweisheng/wot-design-uni/issues/972)) ([b852376](https://github.com/Moonofweisheng/wot-design-uni/commit/b85237643ce217c14a304e8477487acce327ed49)) +* ✨ 添加input props.type可选类型 ([#983](https://github.com/Moonofweisheng/wot-design-uni/issues/983)) ([91776bf](https://github.com/Moonofweisheng/wot-design-uni/commit/91776bf3de9bdd6c6954ecab8024dddbdcee7e48)), closes [#981](https://github.com/Moonofweisheng/wot-design-uni/issues/981) +* ✨ 文档示例项目支持国际化切换 ([#992](https://github.com/Moonofweisheng/wot-design-uni/issues/992)) ([4ae9587](https://github.com/Moonofweisheng/wot-design-uni/commit/4ae9587d635c1ba80b8855d3b3d5a38939b1825c)) +* ✨ 移除 keyboard 虚拟键盘车牌号模式下不可用的 I、O 键 ([#1037](https://github.com/Moonofweisheng/wot-design-uni/issues/1037)) ([90c53d7](https://github.com/Moonofweisheng/wot-design-uni/commit/90c53d7e2c3208827433093023711c93610df7da)), closes [#1005](https://github.com/Moonofweisheng/wot-design-uni/issues/1005) +* ✨ 引入 vitepress-plugin-llms 优化 AI 理解 ([#1034](https://github.com/Moonofweisheng/wot-design-uni/issues/1034)) ([901c754](https://github.com/Moonofweisheng/wot-design-uni/commit/901c7548fca2bc42c597bb5780769f05e63ede96)) +* ✨ 引入vitest做组件测试 ([7e84c5c](https://github.com/Moonofweisheng/wot-design-uni/commit/7e84c5c91f3c351922e976255dc97281c1fe371b)) +* ✨ grid-item添加hover-class ([#994](https://github.com/Moonofweisheng/wot-design-uni/issues/994)) ([dfaff53](https://github.com/Moonofweisheng/wot-design-uni/commit/dfaff531cb0a78ec1201f323c5d3326ca967c1e7)) +* ✨ ImgCropper 图片剪裁支持设置裁剪框宽高比 ([#973](https://github.com/Moonofweisheng/wot-design-uni/issues/973)) ([5a3f85d](https://github.com/Moonofweisheng/wot-design-uni/commit/5a3f85df6f1e3e54954754b832b0427b67559d58)), closes [#920](https://github.com/Moonofweisheng/wot-design-uni/issues/920) +* ✨ Upload 上传组件支持根据扩展名过滤文件 ([#980](https://github.com/Moonofweisheng/wot-design-uni/issues/980)) ([51adb6b](https://github.com/Moonofweisheng/wot-design-uni/commit/51adb6b8a9911e8d64ef376b19a4aef900b52789)), closes [#796](https://github.com/Moonofweisheng/wot-design-uni/issues/796) [#581](https://github.com/Moonofweisheng/wot-design-uni/issues/581) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档中添加测试覆盖率徽标 ([4ae514c](https://github.com/Moonofweisheng/wot-design-uni/commit/4ae514c716f1c3b0cb2b05443b995eec4fb82b21)) +* ✏️ 修复全局 closeOutside 影响 DropDown 异步开关的问题 ([49e5d63](https://github.com/Moonofweisheng/wot-design-uni/commit/49e5d63dd17b48c00648bcab05cb93e743ca43ab)) +* ✏️ 移除 petercatai 聊天助手 ([5c77483](https://github.com/Moonofweisheng/wot-design-uni/commit/5c77483974189e8b22587407ff9baf484a5779da)) +* ✏️ 优化 `WdConfigProvider` 文档,解决组件命名风格问题导致失效问题 ([#989](https://github.com/Moonofweisheng/wot-design-uni/issues/989)) ([0f693f9](https://github.com/Moonofweisheng/wot-design-uni/commit/0f693f9784224ee0949d4a7efc66985224bf0d5b)) +* ✏️ update cases ([a200337](https://github.com/Moonofweisheng/wot-design-uni/commit/a2003378636a25c253a8596f5afbbbcf6ad3e419)) + +## [1.8.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.7.1...v1.8.0) (2025-03-23) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 DateTimePicker 区域选择时边界值处理错误的问题 ([230e09f](https://github.com/Moonofweisheng/wot-design-uni/commit/230e09ff2ac25550b0efc2628827b70162041aad)) +* 🐛 修复 drop-menu-item 有选项值为空字符串时导致新值错误并触发组件内部警告的问题 ([f63de5b](https://github.com/Moonofweisheng/wot-design-uni/commit/f63de5bd1d3453e844c058a9f185c0a5e56bcf67)) +* 🐛 修复在template中使用readonly无法通过vue-ts校验的问题 ([ee5b25f](https://github.com/Moonofweisheng/wot-design-uni/commit/ee5b25fbc36a24cab02576757226f26fb9e27777)) +* 🐛 修复input、textarea组件placeholder样式在微信小程序无效的问题 ([#944](https://github.com/Moonofweisheng/wot-design-uni/issues/944)) ([1ac115f](https://github.com/Moonofweisheng/wot-design-uni/commit/1ac115fdac310760e630e8745b438f96c6b88386)), closes [#943](https://github.com/Moonofweisheng/wot-design-uni/issues/943) +* 🐛 修复textarea统计多码元字符长度错误的问题 ([#940](https://github.com/Moonofweisheng/wot-design-uni/issues/940)) ([f9d8523](https://github.com/Moonofweisheng/wot-design-uni/commit/f9d85232c4142f0c957fa3c829dd3321c7ad56e5)), closes [#933](https://github.com/Moonofweisheng/wot-design-uni/issues/933) +* **picker:** clear selected value and options when columns is emptied ([496cb73](https://github.com/Moonofweisheng/wot-design-uni/commit/496cb732b1ab0e69517d629e147b673692631f98)), closes [#935](https://github.com/Moonofweisheng/wot-design-uni/issues/935) + + +### ✨ Features | 新功能 + +* ✨ Img 组件添加预览图片属性 ([#945](https://github.com/Moonofweisheng/wot-design-uni/issues/945)) ([34a4878](https://github.com/Moonofweisheng/wot-design-uni/commit/34a48783f37a56fb6ed7a77dd29ee5a406bf989a)) +* ✨ 废弃 DateTimePicker 开启插槽开关use-label-slot和use-default-slot ([8d9e5c6](https://github.com/Moonofweisheng/wot-design-uni/commit/8d9e5c66589f1b6eed5faa093f2c28cf2640f5b5)) +* ✨ 新增 InputNumber 组件支持长按加减功能 ([#910](https://github.com/Moonofweisheng/wot-design-uni/issues/910)) ([9437087](https://github.com/Moonofweisheng/wot-design-uni/commit/94370876e4ce91faec6e10db5e413dfa27d0f4c2)) +* ✨ 重构 Signature 签字板历史记录模式并添加压感模式和横屏示例 ([#967](https://github.com/Moonofweisheng/wot-design-uni/issues/967)) ([aad3e83](https://github.com/Moonofweisheng/wot-design-uni/commit/aad3e8332b4cb6a1f9c0a3c81e9fb7d5068f09b3)) +* ✨ Signature 添加历史记录和历史记录步长(包含文档添加、i18n、代码示例) ([#889](https://github.com/Moonofweisheng/wot-design-uni/issues/889)) ([10ec731](https://github.com/Moonofweisheng/wot-design-uni/commit/10ec731b8986f7bf5903a923fe7f1f7d78623ecf)) +* extend wd-fab component with 4 new positions and update docs ([6f12aa4](https://github.com/Moonofweisheng/wot-design-uni/commit/6f12aa4b04477a2b1f8535e272699333ceb0b9f6)) + + +### ✏️ Documentation | 文档 + +* ✏️ 接入 petercatai 聊天助手 ([34f0299](https://github.com/Moonofweisheng/wot-design-uni/commit/34f02997dd79f88de89da79791d5a6c056367e8a)) +* ✏️ 添加优秀案例页面 ([ef7c98b](https://github.com/Moonofweisheng/wot-design-uni/commit/ef7c98bffb843129d872c8ebc6a1bbaf7d8437bf)) +* ✏️ 新增优秀案例——随享小栈 ([2040230](https://github.com/Moonofweisheng/wot-design-uni/commit/2040230064989bf4816932870920f52ae0797bf2)) +* ✏️ 修复 Navbar 文档部分标题显示 Tabbar 的问题 ([b4b4d59](https://github.com/Moonofweisheng/wot-design-uni/commit/b4b4d594fc29fe1f947b6ea7e8b5b90cc3f58013)) +* ✏️ 修复部分文档拼写错误 ([#911](https://github.com/Moonofweisheng/wot-design-uni/issues/911)) ([15613b3](https://github.com/Moonofweisheng/wot-design-uni/commit/15613b393aaf750a85e03512c41ffed473471228)) +* fix drop-menu demo code type error ([#905](https://github.com/Moonofweisheng/wot-design-uni/issues/905)) ([0c32c29](https://github.com/Moonofweisheng/wot-design-uni/commit/0c32c29969a8fcb748409a17a06cf277202a18a7)) + +### [1.7.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.7.0...v1.7.1) (2025-02-19) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 InputNumber 微信小程序设置了precision后无法输入小数点的问题 ([#902](https://github.com/Moonofweisheng/wot-design-uni/issues/902)) ([e3a03b1](https://github.com/Moonofweisheng/wot-design-uni/commit/e3a03b1dbb6640b76a3034daeebd88d42252508c)), closes [#878](https://github.com/Moonofweisheng/wot-design-uni/issues/878) +* 🐛 修复 Upload 文档自定义唤起上传样式的示例错误的问题 ([3dfa69c](https://github.com/Moonofweisheng/wot-design-uni/commit/3dfa69c282514bd786d3822963f3f1dd18089eb9)) +* 🐛 修复分页组件为0时不更新页数问题 ([#903](https://github.com/Moonofweisheng/wot-design-uni/issues/903)) ([604faeb](https://github.com/Moonofweisheng/wot-design-uni/commit/604faebf4bb19eca96ba84ee48424be12ee72ba3)), closes [#897](https://github.com/Moonofweisheng/wot-design-uni/issues/897) +* 🐛 修复web-types可选值/默认值类型识别错误 ([#899](https://github.com/Moonofweisheng/wot-design-uni/issues/899)) ([8b4d2ed](https://github.com/Moonofweisheng/wot-design-uni/commit/8b4d2ed14b6340003c63d10e31c02f058bed3ef0)) + + +### ✏️ Documentation | 文档 + +* ✏️ 优化demo项目的展示方便支付宝平台提审 ([c48a67b](https://github.com/Moonofweisheng/wot-design-uni/commit/c48a67b027b9b3f66f0b051ee34bde163feda6cf)) + +## [1.7.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.6.1...v1.7.0) (2025-02-16) + + +### ✨ Features | 新功能 + +* ✨ 添加 web-type.json 支持 webstorm 代码提示 ([#871](https://github.com/Moonofweisheng/wot-design-uni/issues/871)) ([4575099](https://github.com/Moonofweisheng/wot-design-uni/commit/4575099b9ba580fee2c03e8f8660bbfd9aa70aa3)), closes [#819](https://github.com/Moonofweisheng/wot-design-uni/issues/819) +* ✨ 重构 Curtain 优化控制展示隐藏的实现逻辑 ([#895](https://github.com/Moonofweisheng/wot-design-uni/issues/895)) ([0e31950](https://github.com/Moonofweisheng/wot-design-uni/commit/0e3195059e0843045533b7ff89b9a3613c5449a8)) +* ✨ ActionSheet 支持 close-on-click-action 控制点击选项后是否关闭菜单功能 ([#891](https://github.com/Moonofweisheng/wot-design-uni/issues/891)) ([a1b035a](https://github.com/Moonofweisheng/wot-design-uni/commit/a1b035a6fe3a9ae3a023032b6c33403853424559)), closes [#698](https://github.com/Moonofweisheng/wot-design-uni/issues/698) +* ✨ NavbarCapsule 导航胶囊组件支持外部传入样式 ([fb980e7](https://github.com/Moonofweisheng/wot-design-uni/commit/fb980e7d9bd90c76570d2069a9d41a6c1187ef30)) +* ✨ Rate 评分新增支持半选和触摸滑动选中 ([#896](https://github.com/Moonofweisheng/wot-design-uni/issues/896)) ([9d34f2e](https://github.com/Moonofweisheng/wot-design-uni/commit/9d34f2e5d90cca1820d69100bca7c546ce16fb0e)), closes [#669](https://github.com/Moonofweisheng/wot-design-uni/issues/669) +* ✨ Toast 支持设置布局方向 ([ed60852](https://github.com/Moonofweisheng/wot-design-uni/commit/ed60852432999d295e4af2efe9f1ee86e235e1ee)), closes [#780](https://github.com/Moonofweisheng/wot-design-uni/issues/780) +* ✨ Toast 支持通过props设置组件属性并新增局中显示的配置 ([#888](https://github.com/Moonofweisheng/wot-design-uni/issues/888)) ([ebbe7e4](https://github.com/Moonofweisheng/wot-design-uni/commit/ebbe7e407904df428564dcf53e5141c14d9e7daa)) + + +### ✏️ Documentation | 文档 + +* ✏️ 标注 Form 组件支持不校验隐藏子组件的版本 ([e5a24c4](https://github.com/Moonofweisheng/wot-design-uni/commit/e5a24c4873baa9db62ad1ab6f3adb078dac89dc2)) +* ✏️ 新增关于页面展示主要团队成员信息 ([031107d](https://github.com/Moonofweisheng/wot-design-uni/commit/031107d5888c2887ea40d47810239cd398f042ef)) +* ✏️ 修复 SwipeAction 文档示例拼写错误的问题 ([1dc48cf](https://github.com/Moonofweisheng/wot-design-uni/commit/1dc48cfce9773a0ec60dd2b6cb8fd6c60bb63281)) +* ✏️ 修复文档拼写的错误 ([8f8cb10](https://github.com/Moonofweisheng/wot-design-uni/commit/8f8cb1077aa318e9fb067dfeebdd04dfbdb12412)) +* ✏️ fix create-uni command error ([#874](https://github.com/Moonofweisheng/wot-design-uni/issues/874)) ([a0da88c](https://github.com/Moonofweisheng/wot-design-uni/commit/a0da88c5db21b7127de9342aabcf6961b611e22d)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 InputNumber 设置了precision后无法输入小数点的问题 ([#886](https://github.com/Moonofweisheng/wot-design-uni/issues/886)) ([dd1a005](https://github.com/Moonofweisheng/wot-design-uni/commit/dd1a00596472023c9b6e545dbf2a9a8238e67baf)), closes [#878](https://github.com/Moonofweisheng/wot-design-uni/issues/878) +* 🐛 修复 Swiper 在微信小程序平台轮播视频时在iOS平台全屏展示异常的问题 ([#898](https://github.com/Moonofweisheng/wot-design-uni/issues/898)) ([34a15ac](https://github.com/Moonofweisheng/wot-design-uni/commit/34a15ac0786d003825491cc9fa2a8961b307c0d2)), closes [#885](https://github.com/Moonofweisheng/wot-design-uni/issues/885) +* 🐛 修复 Tabs 组件导航地图标题不生效的问题 ([#869](https://github.com/Moonofweisheng/wot-design-uni/issues/869)) ([ccf976a](https://github.com/Moonofweisheng/wot-design-uni/commit/ccf976ad631b4ad0272d4897a6245cdd8f13fa4b)) +* 🐛 修复 Upload 组件自定义上传方法不支持asyncfunction的问题 ([#890](https://github.com/Moonofweisheng/wot-design-uni/issues/890)) ([25649db](https://github.com/Moonofweisheng/wot-design-uni/commit/25649dbca55059cb425ba7d7b4e0af7884366dce)), closes [#859](https://github.com/Moonofweisheng/wot-design-uni/issues/859) + +### [1.6.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.6.0...v1.6.1) (2025-01-20) + + +### ✏️ Documentation | 文档 + +* ✏️ 更新文档小程序二维码 ([a5f862b](https://github.com/Moonofweisheng/wot-design-uni/commit/a5f862bdbea6a84df7ad2e3bef4456baae040ae8)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Search placeholder 样式丢失的问题 ([#857](https://github.com/Moonofweisheng/wot-design-uni/issues/857)) ([40565d1](https://github.com/Moonofweisheng/wot-design-uni/commit/40565d19688f6776cdb4ea4b9fc3f6cbaeb4dc66)), closes [#856](https://github.com/Moonofweisheng/wot-design-uni/issues/856) + +## [1.6.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.5.1...v1.6.0) (2025-01-18) + + +### ✏️ Documentation | 文档 + +* ✏️ 常见问题添加Vue 3.3+使用defineOptions设置styleIsolation规则的介绍 ([f3bee13](https://github.com/Moonofweisheng/wot-design-uni/commit/f3bee13b46ccbb8856b9051a99ed2b5356dc0d8e)), closes [#784](https://github.com/Moonofweisheng/wot-design-uni/issues/784) +* ✏️ 更新组件库互助群二维码 ([9b50d6c](https://github.com/Moonofweisheng/wot-design-uni/commit/9b50d6c6922e34c964621cff926565cb9fb723ab)) +* ✏️ 添加互助交流QQ群3群二维码 ([1d0b11b](https://github.com/Moonofweisheng/wot-design-uni/commit/1d0b11b25621b7b585fe1e047093d07861c88a30)) +* ✏️ 微信小程序演示demo提供激励视频广告页面 ([#783](https://github.com/Moonofweisheng/wot-design-uni/issues/783)) ([7ed7dd3](https://github.com/Moonofweisheng/wot-design-uni/commit/7ed7dd3495c84f91ed5e77870da7e5845fc28a94)) +* ✏️ 修复 Tooltip 文档显示异常的问题 ([c89eb92](https://github.com/Moonofweisheng/wot-design-uni/commit/c89eb927a21e0f4e10d317346c31ab45d322720d)) +* ✏️ 演示demo小程序支持分享 ([583acc2](https://github.com/Moonofweisheng/wot-design-uni/commit/583acc2fa942422469abcab5f805a54c72614d69)) +* ✏️ 优化演示demo支持在顶部显示对应页面微信小程序的二维码 ([b1f42af](https://github.com/Moonofweisheng/wot-design-uni/commit/b1f42af640a32d8c9119331a19fe0495a908b16c)) +* ✏️修改自定义样式描述 [#772](https://github.com/Moonofweisheng/wot-design-uni/issues/772) ([1ac352d](https://github.com/Moonofweisheng/wot-design-uni/commit/1ac352da9539e60ac79bd1ec10768e08e4d49ff3)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Calendar 为周选择时跨年周的单元格值显示错误的问题 ([#854](https://github.com/Moonofweisheng/wot-design-uni/issues/854)) ([c0d48b2](https://github.com/Moonofweisheng/wot-design-uni/commit/c0d48b25c11af87629e7feedc6cd0cc3a70b37e4)) +* 🐛 修复 Divider 分割线组件 CustomClass 未生效的问题 ([#790](https://github.com/Moonofweisheng/wot-design-uni/issues/790)) ([44df081](https://github.com/Moonofweisheng/wot-design-uni/commit/44df081dbd80771a9df122be4e3953034194308f)), closes [#789](https://github.com/Moonofweisheng/wot-design-uni/issues/789) +* 🐛 修复 Form 表单 validator 校验不通过且未指定错误信息时无法显示校验信息的问题 ([#791](https://github.com/Moonofweisheng/wot-design-uni/issues/791)) ([bdb5653](https://github.com/Moonofweisheng/wot-design-uni/commit/bdb56537db7fbec59224ebf5aecd3e7a6354424c)) +* 🐛 修复Button初始化margin的问题 ([#831](https://github.com/Moonofweisheng/wot-design-uni/issues/831)) ([3836309](https://github.com/Moonofweisheng/wot-design-uni/commit/38363097a5fbf4c0c7116abd536f90936d2fa86d)) +* 🐛 修复Card footer或者header没写的时候,不会自动隐藏占位 ([8d528cb](https://github.com/Moonofweisheng/wot-design-uni/commit/8d528cb9c06c48456016e0a4cce1cf0699b7311b)) +* 🐛 修复Form组件rules属性,没有按照顺序执行问题 ([#808](https://github.com/Moonofweisheng/wot-design-uni/issues/808)) ([834cd8e](https://github.com/Moonofweisheng/wot-design-uni/commit/834cd8e3f08919800189c1d2710267d4aa99a8d5)), closes [#799](https://github.com/Moonofweisheng/wot-design-uni/issues/799) [#799](https://github.com/Moonofweisheng/wot-design-uni/issues/799) [#799](https://github.com/Moonofweisheng/wot-design-uni/issues/799) +* 🐛 修复Input初始化修改失败的问题 ([#814](https://github.com/Moonofweisheng/wot-design-uni/issues/814)) ([04e9a50](https://github.com/Moonofweisheng/wot-design-uni/commit/04e9a50ede30337c35e9f28b7f7985f3e717a91f)) +* 🐛 修复Picker文档初始选项code错误的问题 ([67f675d](https://github.com/Moonofweisheng/wot-design-uni/commit/67f675d1cc4764e25d357b91c17ad276612340a1)) +* 🐛 修复popover tooltip组件visibleArrow=false时弹出框距离元素间距过远的问题 ([#792](https://github.com/Moonofweisheng/wot-design-uni/issues/792)) ([3b6d10d](https://github.com/Moonofweisheng/wot-design-uni/commit/3b6d10dbb93188adb3aea3fc9f7d1b763b4d5ec9)), closes [#788](https://github.com/Moonofweisheng/wot-design-uni/issues/788) + + +### ✨ Features | 新功能 + +* ✨ 新增Signature签名组件 ([0ad8fcc](https://github.com/Moonofweisheng/wot-design-uni/commit/0ad8fcce28f5692572aeae79f0cc7315aa6e5b54)), closes [#505](https://github.com/Moonofweisheng/wot-design-uni/issues/505) +* ✨ 修复 InputNumber 在设置为 allow-null 时被赋值为空时未触发更新的问题并支持异步更新 ([#812](https://github.com/Moonofweisheng/wot-design-uni/issues/812)) ([0fc90dd](https://github.com/Moonofweisheng/wot-design-uni/commit/0fc90ddcc9b5d478fe3e5bf84e2e780c48a8a341)) +* ✨ 修复Img组件在错误状态下可以预览的问题 ([dbd2c85](https://github.com/Moonofweisheng/wot-design-uni/commit/dbd2c85b83b0992e791c0b828a12f182d4923b81)) +* ✨ Calendar 确认事件 confirm 增加 `type` 参数 ([e0fca91](https://github.com/Moonofweisheng/wot-design-uni/commit/e0fca9161e8282871b2126ecc82999bc9530eb6b)) +* ✨ Form 表单 validate 方法支持传入数组 ([#829](https://github.com/Moonofweisheng/wot-design-uni/issues/829)) ([8e6096a](https://github.com/Moonofweisheng/wot-design-uni/commit/8e6096ab7459b9164ef1ec9b366becf9acc7ab83)), closes [#797](https://github.com/Moonofweisheng/wot-design-uni/issues/797) +* ✨ Search新增customInputClass,placeholderClass等属性 ([#845](https://github.com/Moonofweisheng/wot-design-uni/issues/845)) ([03623f4](https://github.com/Moonofweisheng/wot-design-uni/commit/03623f4989b6bfbf53588058c632eb2f2e830bfd)), closes [#299](https://github.com/Moonofweisheng/wot-design-uni/issues/299) +* ✨ Swiper 轮播视频支持控制静音播放和循环播放 ([#855](https://github.com/Moonofweisheng/wot-design-uni/issues/855)) ([7a0d5ce](https://github.com/Moonofweisheng/wot-design-uni/commit/7a0d5ce9720020e3f0fb148f7b65db129ceb82af)), closes [#846](https://github.com/Moonofweisheng/wot-design-uni/issues/846) +* ✨ Swiper 轮播项type字段的处理逻辑限制在可选值范围内 ([#785](https://github.com/Moonofweisheng/wot-design-uni/issues/785)) ([1fd0a27](https://github.com/Moonofweisheng/wot-design-uni/commit/1fd0a27788db2b467bc53e83a6a4953e5d134c53)) + +### [1.5.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.5.0...v1.5.1) (2024-12-10) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 调整 Upload 的覆盖上传参数 reupload 默认值为 false ([d9ce000](https://github.com/Moonofweisheng/wot-design-uni/commit/d9ce00010a15ae8e168e082a2c4f3a50cf61fa13)) + +## [1.5.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.4.0...v1.5.0) (2024-12-09) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Button 按钮设置为 block 无效的问题 ([#762](https://github.com/Moonofweisheng/wot-design-uni/issues/762)) ([ea8bc66](https://github.com/Moonofweisheng/wot-design-uni/commit/ea8bc6671012a811f49027062e6e7f8f1359a175)) +* 🐛 修复 Cell 设置 label 过长时影响页面结构的问题 ([70058f2](https://github.com/Moonofweisheng/wot-design-uni/commit/70058f2270788fb9d7edd56eff35bd2cbebcd99e)) +* 🐛 修复 Collapse v-model绑定数据变化时未更新折叠面板状态的问题 ([#744](https://github.com/Moonofweisheng/wot-design-uni/issues/744)) ([09f7f9c](https://github.com/Moonofweisheng/wot-design-uni/commit/09f7f9caf5e381ef44fb9a31965f8d2d70d4e271)), closes [#741](https://github.com/Moonofweisheng/wot-design-uni/issues/741) +* 🐛 修复 GridItem 徽标属性类型标注错误的问题 ([c018560](https://github.com/Moonofweisheng/wot-design-uni/commit/c018560b7d3087b89b759b3c83aff91c74354021)), closes [#766](https://github.com/Moonofweisheng/wot-design-uni/issues/766) +* 🐛 修复 Progress 无法设置进度为 0 的问题 ([#748](https://github.com/Moonofweisheng/wot-design-uni/issues/748)) ([c136f54](https://github.com/Moonofweisheng/wot-design-uni/commit/c136f54cda6164ab3653d47342d7c88c5f515efc)), closes [#747](https://github.com/Moonofweisheng/wot-design-uni/issues/747) +* 🐛 修复 Swiper 在支付宝小程序平台点击事件无效的问题 ([f63bf10](https://github.com/Moonofweisheng/wot-design-uni/commit/f63bf101338d7f9d2f72c5941d3405950544a1d7)) +* 🐛 修复 Tab 未渲染项高度会影响整体高度的问题 ([5e06378](https://github.com/Moonofweisheng/wot-design-uni/commit/5e063781a3b58f94f107816473600ce95f3761e9)) +* 🐛 修复 vue-tsc 校验不通过的问题 ([#753](https://github.com/Moonofweisheng/wot-design-uni/issues/753)) ([a90f4ad](https://github.com/Moonofweisheng/wot-design-uni/commit/a90f4ad2f2b68bb79f30a2e6973a4e149b7ba66e)), closes [#752](https://github.com/Moonofweisheng/wot-design-uni/issues/752) +* 🐛 修复微信小程序在iOS设备上处于后台一段时间后抖动的问题 ([6091566](https://github.com/Moonofweisheng/wot-design-uni/commit/6091566380c7c129fca284eb4e5a2ba6e447a7ab)), closes [#694](https://github.com/Moonofweisheng/wot-design-uni/issues/694) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整文档结构增加文档内容可用宽度,支持收起演示demo ([#765](https://github.com/Moonofweisheng/wot-design-uni/issues/765)) ([402f73f](https://github.com/Moonofweisheng/wot-design-uni/commit/402f73f6ee8aa7d022b640333e6bfef4311fdc6f)) +* ✏️ 添加 MessageBox 自定义按钮样式的文档 ([46b1c39](https://github.com/Moonofweisheng/wot-design-uni/commit/46b1c394a024c293fb07c7788691e2ac572a2fa1)) +* ✏️ 添加关于Sass的介绍 ([995a65f](https://github.com/Moonofweisheng/wot-design-uni/commit/995a65f8451801062ae83f0f71470d0c428dba7f)) +* ✏️ 优化 Cell 关于 clickable 和 is-link 的介绍 ([6f58e72](https://github.com/Moonofweisheng/wot-design-uni/commit/6f58e72b1d5436326052a79da19e21d071ab9b3c)) +* ✏️ 增加 ConfigProvider 组件设定全局共享示例 ([#758](https://github.com/Moonofweisheng/wot-design-uni/issues/758)) ([356cb4a](https://github.com/Moonofweisheng/wot-design-uni/commit/356cb4ad11791366138002233754b2d2e79d5d18)) +* ✏️ Table 表格组件提供结合分页器使用的demo ([#738](https://github.com/Moonofweisheng/wot-design-uni/issues/738)) ([fb7580d](https://github.com/Moonofweisheng/wot-design-uni/commit/fb7580df7eee7d81d3826c399e565975cef81625)) + + +### ✨ Features | 新功能 + +* ✨ 优化 Divider 分割线功能支持虚线、垂直等功能 ([#737](https://github.com/Moonofweisheng/wot-design-uni/issues/737)) ([1b9d7e6](https://github.com/Moonofweisheng/wot-design-uni/commit/1b9d7e625256b365a381b30e902bb54692d636cf)) +* ✨ Calendar 优化选中样式和滚动位置处理并支持屏蔽内置cell ([#768](https://github.com/Moonofweisheng/wot-design-uni/issues/768)) ([97c4004](https://github.com/Moonofweisheng/wot-design-uni/commit/97c40047e8ed46af31d4c1647056d90c2edf4842)) +* ✨ Curtain 幕帘新增 close 插槽和自定义关闭插槽样式类 ([#746](https://github.com/Moonofweisheng/wot-design-uni/issues/746)) ([7bc3592](https://github.com/Moonofweisheng/wot-design-uni/commit/7bc359205deb99899baf01c733af9690b12703fa)), closes [#648](https://github.com/Moonofweisheng/wot-design-uni/issues/648) +* ✨ DropMenuItem 增加自定 Popup 样式参数 ([28ad03b](https://github.com/Moonofweisheng/wot-design-uni/commit/28ad03b7afdd38a86f168d15a7c0f3564d122101)) +* ✨ Input、Textarea在APP-VUE和H5端支持inputmode ([#771](https://github.com/Moonofweisheng/wot-design-uni/issues/771)) ([9ceb2e8](https://github.com/Moonofweisheng/wot-design-uni/commit/9ceb2e807e33edd3937db5f57a4306f1ce719cff)), closes [#743](https://github.com/Moonofweisheng/wot-design-uni/issues/743) +* ✨ MessageBox 新增确认、取消按钮的 ButtonProps 属性 ([#761](https://github.com/Moonofweisheng/wot-design-uni/issues/761)) ([80682ba](https://github.com/Moonofweisheng/wot-design-uni/commit/80682ba933427fac7bfefc6c692cd058a14163c5)), closes [#740](https://github.com/Moonofweisheng/wot-design-uni/issues/740) +* ✨ Radio添加icon-placement属性用于控制图标方向 ([#763](https://github.com/Moonofweisheng/wot-design-uni/issues/763)) ([b06a7a7](https://github.com/Moonofweisheng/wot-design-uni/commit/b06a7a751b3115c8e3909af4cbe595684ed9d00f)), closes [#371](https://github.com/Moonofweisheng/wot-design-uni/issues/371) +* ✨ Segmented 提供 updateActiveStyle 方法设置激活样式 ([529e57f](https://github.com/Moonofweisheng/wot-design-uni/commit/529e57fc83b00482f101e84cf0437627e140a59f)) +* ✨ Table 支持设置不固定表头 ([#769](https://github.com/Moonofweisheng/wot-design-uni/issues/769)) ([b0a2461](https://github.com/Moonofweisheng/wot-design-uni/commit/b0a2461a1a6f9691502a1f4a1a06ec4103fabd4b)) +* ✨ Upload 支持文件重传 ([3cd5137](https://github.com/Moonofweisheng/wot-design-uni/commit/3cd5137129ae13f90744a5d0038686cef5602d8c)) + +## [1.4.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.14...v1.4.0) (2024-11-24) + + +### ✨ Features | 新功能 + +* ✨ Curtain 幕帘组件支持设置 z-index ([a1e20af](https://github.com/Moonofweisheng/wot-design-uni/commit/a1e20afef34704e518a96d4b4cb248cab3b7a8b6)) +* ✨ Siderbar 侧边栏添加before-change属性支持异步更新 ([#721](https://github.com/Moonofweisheng/wot-design-uni/issues/721)) ([1f5801d](https://github.com/Moonofweisheng/wot-design-uni/commit/1f5801d3f4c2cfc1b3990d74077e18ea88e8d7f8)), closes [#711](https://github.com/Moonofweisheng/wot-design-uni/issues/711) +* ✨ Swiper 支持指定轮播项的文件类型 ([#720](https://github.com/Moonofweisheng/wot-design-uni/issues/720)) ([1e039cb](https://github.com/Moonofweisheng/wot-design-uni/commit/1e039cb7073d57bd19f59d4ffbb95c74b5cdc42f)), closes [#712](https://github.com/Moonofweisheng/wot-design-uni/issues/712) +* ✨ Tab 添加 lazy 属性支持配置是否开启懒加载 ([bb5b193](https://github.com/Moonofweisheng/wot-design-uni/commit/bb5b19325fc2a0f4d13d353ee9bc8cfbf8605daa)), closes [#641](https://github.com/Moonofweisheng/wot-design-uni/issues/641) +* ✨ Tabs 新增 `autoLineWidth` 设置底部条宽度自动同步文本内容' ([#679](https://github.com/Moonofweisheng/wot-design-uni/issues/679)) ([cb7cbf3](https://github.com/Moonofweisheng/wot-design-uni/commit/cb7cbf33250e3711d631271b1bbcb5f6829e75fa)) +* ✨ Tabs 新增map-title属性支持修改导航地图标题 ([0b7605f](https://github.com/Moonofweisheng/wot-design-uni/commit/0b7605f3ef2ca11cedc2cc61a3eb93e0757e6b86)), closes [#670](https://github.com/Moonofweisheng/wot-design-uni/issues/670) +* ✨ Tabs 支持设置徽标 ([#724](https://github.com/Moonofweisheng/wot-design-uni/issues/724)) ([cd20581](https://github.com/Moonofweisheng/wot-design-uni/commit/cd20581ca6f75a67995a0cf562f524d82e357bbc)), closes [#689](https://github.com/Moonofweisheng/wot-design-uni/issues/689) [#672](https://github.com/Moonofweisheng/wot-design-uni/issues/672) +* ✨ tabs支持左对齐 ([#718](https://github.com/Moonofweisheng/wot-design-uni/issues/718)) ([314c2e8](https://github.com/Moonofweisheng/wot-design-uni/commit/314c2e8c9d08e806dd0ec78fd4b2aa5e536af8f8)), closes [#380](https://github.com/Moonofweisheng/wot-design-uni/issues/380) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Collapse 使用 toggleAall 方法时不会触发 before-expand 钩子的问题 ([#727](https://github.com/Moonofweisheng/wot-design-uni/issues/727)) ([02aa5ce](https://github.com/Moonofweisheng/wot-design-uni/commit/02aa5ceb78713f210d97ecc29f18618084b93096)) +* 🐛 修复 CollapseItem 在微信小程序平台使用 title 插槽时宽度无法撑满的问题 ([4f1d945](https://github.com/Moonofweisheng/wot-design-uni/commit/4f1d9452ecd5054a636fb51871369ee1f183e1f1)) +* 🐛 修复 DateTimePicker 设置为 time 类型时绑定值无法设置为空数组的问题 ([443ac92](https://github.com/Moonofweisheng/wot-design-uni/commit/443ac929820327339062a608ef94db43bdaafb27)), closes [#706](https://github.com/Moonofweisheng/wot-design-uni/issues/706) +* 🐛 修复 FloadingPanel 设置 height 不生效的问题 ([#725](https://github.com/Moonofweisheng/wot-design-uni/issues/725)) ([3cc1805](https://github.com/Moonofweisheng/wot-design-uni/commit/3cc18058aee83ed0abbf804595e38d7934490f4a)), closes [#703](https://github.com/Moonofweisheng/wot-design-uni/issues/703) +* 🐛 修复 Slider 滑块处于极值时会遮挡max和min的问题 ([aa8834d](https://github.com/Moonofweisheng/wot-design-uni/commit/aa8834df630286882425778263ea9ff68811c928)), closes [#714](https://github.com/Moonofweisheng/wot-design-uni/issues/714) +* 🐛 修复 wd-select-picker 组件单选搜索高亮 class 错误 ([7d461a5](https://github.com/Moonofweisheng/wot-design-uni/commit/7d461a54d09b14273fd18ff37310ecf754cf5138)) +* 🐛 修复Collapse折叠面板组件内容溢出问题 ([#710](https://github.com/Moonofweisheng/wot-design-uni/issues/710)) ([4bf8d1e](https://github.com/Moonofweisheng/wot-design-uni/commit/4bf8d1e300c28f405402582dd32fde4245d9ed47)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整文档中gitee镜像仓库的地址 ([a40dd9f](https://github.com/Moonofweisheng/wot-design-uni/commit/a40dd9f63e52cf178be2fd9a93904cdf26e23f14)) +* ✏️ 调整join-group页面加群的问题 ([9a70d89](https://github.com/Moonofweisheng/wot-design-uni/commit/9a70d89be1e369dc2ea2a4babd3b3fdb326fcecc)) +* ✏️ 添加 Cell 单元格 border 属性的文档 ([fad777d](https://github.com/Moonofweisheng/wot-design-uni/commit/fad777dfa8cf8dcf26288a9f975927dc3de2e80d)), closes [#653](https://github.com/Moonofweisheng/wot-design-uni/issues/653) +* ✏️ 添加关于 Button 自定义样式设置阴影的文档 ([c38321f](https://github.com/Moonofweisheng/wot-design-uni/commit/c38321f69c8f4fcb572cb40c8eef38cf4fa20eae)), closes [#731](https://github.com/Moonofweisheng/wot-design-uni/issues/731) +* ✏️ 文档新增演示页面源码和组件源码链接 ([330e8c7](https://github.com/Moonofweisheng/wot-design-uni/commit/330e8c7bbfc792f4a29cdaa08dec8b35c75b2a30)) +* ✏️ 优化 NoticeBar 垂直滚动示例 ([ff1d377](https://github.com/Moonofweisheng/wot-design-uni/commit/ff1d37723b38169fc1a1f75676a8464343b42bec)) +* ✏️ 增加 Input 字数限制的示例 ([5aa1c00](https://github.com/Moonofweisheng/wot-design-uni/commit/5aa1c00acd72f17cea108ffccecc427711e2cbdb)) +* ✏️ 增加关于Tabs属性autoLineWidth的介绍和最低版本要求 ([08e7d77](https://github.com/Moonofweisheng/wot-design-uni/commit/08e7d774c6b6886fe3f79431b4728176e267144f)) + +### [1.3.14](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.13...v1.3.14) (2024-11-09) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Curtain 幕帘组件在某些情况下关闭按钮不显示的问题 ([8c0e978](https://github.com/Moonofweisheng/wot-design-uni/commit/8c0e97831445183662ce0af79210117eb77e63e9)), closes [#690](https://github.com/Moonofweisheng/wot-design-uni/issues/690) +* 🐛 修复Picker和SelectPicker清空按钮颜色与Input不统一的问题 ([#700](https://github.com/Moonofweisheng/wot-design-uni/issues/700)) ([8fdbfa3](https://github.com/Moonofweisheng/wot-design-uni/commit/8fdbfa319a5c0c5895a3162b56cd3225c54a24d2)) +* 🐛 修复upload组件header默认值错误的问题 ([4cfd1e5](https://github.com/Moonofweisheng/wot-design-uni/commit/4cfd1e568d55eed9efe9cc1dadcc30dd571d3b36)), closes [#691](https://github.com/Moonofweisheng/wot-design-uni/issues/691) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档添加生活小工具 ([6f44a63](https://github.com/Moonofweisheng/wot-design-uni/commit/6f44a631ac067a7321ff0cb6ea8ebaabbc64bd9b)) +* ✏️ 文档中添加wot-demo的介绍 ([66fff60](https://github.com/Moonofweisheng/wot-design-uni/commit/66fff6009b261a62be96d4c279d83833c70a8a0f)) +* ✏️ 增加create-uni创建快速上手项目的介绍 ([92aa1ef](https://github.com/Moonofweisheng/wot-design-uni/commit/92aa1efe68f4a9bd52942122b2f063384eb885fc)) + + +### ✨ Features | 新功能 + +* ✨ 使用Transition重构Popup为center类型的Popup添加zoom-in动画 ([#699](https://github.com/Moonofweisheng/wot-design-uni/issues/699)) ([0dd34d0](https://github.com/Moonofweisheng/wot-design-uni/commit/0dd34d06492f9d071ce6c11aa82789fbcc5cd442)), closes [#687](https://github.com/Moonofweisheng/wot-design-uni/issues/687) +* ✨ 移除Switch默认的size支持在不指定size的情况下使用css变量设置组件尺寸 ([5e55da4](https://github.com/Moonofweisheng/wot-design-uni/commit/5e55da4839677c63534148d4664dbde1c9f950b2)), closes [#516](https://github.com/Moonofweisheng/wot-design-uni/issues/516) +* ✨ 优化Toast、Message和Notify组件的函数式调用方案 ([#696](https://github.com/Moonofweisheng/wot-design-uni/issues/696)) ([9f318bd](https://github.com/Moonofweisheng/wot-design-uni/commit/9f318bdeb37bea643276d3e7f8be51bfc1b19d27)) +* ✨ 支持Button在支付宝小程序平台opentype设为getAuthorize用于获取手机号和用户信息 ([deeb45d](https://github.com/Moonofweisheng/wot-design-uni/commit/deeb45d8cb47284c1a557b50c3fcd95f80f93c22)) +* ✨ Form 校验规则validator支持传入Error作为校验提示 ([db32ef9](https://github.com/Moonofweisheng/wot-design-uni/commit/db32ef962140333a13e2a04ba4642e7423bc4bef)), closes [#667](https://github.com/Moonofweisheng/wot-design-uni/issues/667) +* ✨ Loadmore提供loadingProps属性用于自定义loading样式 ([178e056](https://github.com/Moonofweisheng/wot-design-uni/commit/178e056035511de4123d2bd9ce575948154874b4)) +* ✨ Table 行高支持Number和String类型 ([#682](https://github.com/Moonofweisheng/wot-design-uni/issues/682)) ([21f0b17](https://github.com/Moonofweisheng/wot-design-uni/commit/21f0b178b6e3221a69609dd1603960fc866cb534)) + +### [1.3.13](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.12...v1.3.13) (2024-10-25) + + +### ✏️ Documentation | 文档 + +* ✏️ 快速上手增加vue和uni-app的快速上手链接 ([20148a7](https://github.com/Moonofweisheng/wot-design-uni/commit/20148a7800d12376adedadb32bf29239f02baef3)) +* ✏️ 添加关于深度选择的介绍 ([63428f2](https://github.com/Moonofweisheng/wot-design-uni/commit/63428f244ae84574027ea89e19598c3600716f7b)) +* ✏️ 文档新增展示优秀案例 ([47c1764](https://github.com/Moonofweisheng/wot-design-uni/commit/47c176490dabda1937abea8342d02cc6cbbcfc02)) +* ✏️ 优化文档快速上手章节 ([4e9a9da](https://github.com/Moonofweisheng/wot-design-uni/commit/4e9a9da914a372f1b0f31cfcc7fbc2f96650ef58)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Notice在Tabbar页面时跳转至其他页面导致播放异常的问题并提供reset方法 ([#680](https://github.com/Moonofweisheng/wot-design-uni/issues/680)) ([7584ac2](https://github.com/Moonofweisheng/wot-design-uni/commit/7584ac2a1249b6bee79669ae57c80da08a17d912)), closes [#358](https://github.com/Moonofweisheng/wot-design-uni/issues/358) [#650](https://github.com/Moonofweisheng/wot-design-uni/issues/650) + + +### ✨ Features | 新功能 + +* ✨ 为Picker和SelectPicker补充clear事件 ([8fffaa6](https://github.com/Moonofweisheng/wot-design-uni/commit/8fffaa646aad195b33c56719ffb28b2529f3f627)) +* ✨ 移除 Navbar 点击热区的激活态样式 ([60b07e5](https://github.com/Moonofweisheng/wot-design-uni/commit/60b07e514b836c55305536e2ba29ec5239b62de3)), closes [#511](https://github.com/Moonofweisheng/wot-design-uni/issues/511) +* ✨ cell组件border属性以props为最高优先级 ([#656](https://github.com/Moonofweisheng/wot-design-uni/issues/656)) ([31353ce](https://github.com/Moonofweisheng/wot-design-uni/commit/31353ceafa3bcae01202c40918e579d141957c0a)) +* ✨ picker和selectPicker添加clearable属性 ([b0d60a0](https://github.com/Moonofweisheng/wot-design-uni/commit/b0d60a0b750e8ed2cbae0b55309145c6963e498a)) +* ✨ Swiper 轮播组件支持展示视频和设置轮播项标题 ([#663](https://github.com/Moonofweisheng/wot-design-uni/issues/663)) ([a50c0be](https://github.com/Moonofweisheng/wot-design-uni/commit/a50c0be38465342e5b688b8e10b377d69ba998a6)) + +### [1.3.12](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.11...v1.3.12) (2024-10-08) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Upload文件小程序找不到文件,显示的问题 ([c13e605](https://github.com/Moonofweisheng/wot-design-uni/commit/c13e6058a2c665c174806aebd353294113c4007e)) +* 🐛 Radio修复在cell里面高度的问题 ([f9deacf](https://github.com/Moonofweisheng/wot-design-uni/commit/f9deacf40eed17a37558ca96319880822ca897d5)) + + +### ✏️ Documentation | 文档 + +* ✏️ 优化捐赠榜单中捐赠人链接的展示效果 ([898f079](https://github.com/Moonofweisheng/wot-design-uni/commit/898f07985e602ad18a84c06b5bd6183dd61142cd)) +* ✏️ Upload添加preview-cover最低版本 ([52f9bf6](https://github.com/Moonofweisheng/wot-design-uni/commit/52f9bf654b26a09c20b7118efb331f7e6228ea79)) + + +### ✨ Features | 新功能 + +* ✨ 新增 FloatingPanel 浮动面板组件 ([#616](https://github.com/Moonofweisheng/wot-design-uni/issues/616)) ([e2966fd](https://github.com/Moonofweisheng/wot-design-uni/commit/e2966fdd01d6c91ab9499fbc95e4f7160a83deb5)), closes [#509](https://github.com/Moonofweisheng/wot-design-uni/issues/509) +* ✨ 新增支持法语、日语等9 种语言 ([#637](https://github.com/Moonofweisheng/wot-design-uni/issues/637)) ([691a7b5](https://github.com/Moonofweisheng/wot-design-uni/commit/691a7b57727af45f3c2f99437740be72e8be0f86)) +* ✨ StatusTip缺省提示组件提供图片内容插槽([#538](https://github.com/Moonofweisheng/wot-design-uni/issues/538)) ([#615](https://github.com/Moonofweisheng/wot-design-uni/issues/615)) ([c6b2cf8](https://github.com/Moonofweisheng/wot-design-uni/commit/c6b2cf84db1cb5536516606999c1fa3d6bd1dbe3)) +* ✨ ToolTip 组件 offset 属性支持数组和对象写法 ([#625](https://github.com/Moonofweisheng/wot-design-uni/issues/625)) ([5092c5a](https://github.com/Moonofweisheng/wot-design-uni/commit/5092c5a6548fe7222e0d6e2614020f15ce95c5df)), closes [#560](https://github.com/Moonofweisheng/wot-design-uni/issues/560) +* ✨ Upload新增preview-cover插槽 ([ef6433d](https://github.com/Moonofweisheng/wot-design-uni/commit/ef6433d81c576db8b55715a14a574a6d392478df)) +* ✨Calendar日历添加open事件 ([#627](https://github.com/Moonofweisheng/wot-design-uni/issues/627)) ([43a5da6](https://github.com/Moonofweisheng/wot-design-uni/commit/43a5da631d4402319d4e3f0739f2ab7e960e497f)), closes [#624](https://github.com/Moonofweisheng/wot-design-uni/issues/624) + +### [1.3.11](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.10...v1.3.11) (2024-09-23) + + +### ✏️ Documentation | 文档 + +* ✏️ 移除文档中CountTo不支持的type ([cae2e56](https://github.com/Moonofweisheng/wot-design-uni/commit/cae2e56aba98427b1b6c7a2c3f6a2f9ed8acf96f)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复[#598](https://github.com/Moonofweisheng/wot-design-uni/issues/598)产生的使用未定义变量的问题 ([ce64daf](https://github.com/Moonofweisheng/wot-design-uni/commit/ce64daf77d119df509873226c9209cae406e0330)) +* 🐛 修复与@uni-helper/uni-typed搭配使用时tsc报类型错误的问题并更新依赖 ([f9ca2e4](https://github.com/Moonofweisheng/wot-design-uni/commit/f9ca2e4d4ed2ef88a073f7f80ce64df811144b3a)), closes [#586](https://github.com/Moonofweisheng/wot-design-uni/issues/586) +* 🐛 修复Button设置为hairline时圆角显示异常的问题 ([10ebf5c](https://github.com/Moonofweisheng/wot-design-uni/commit/10ebf5c3959099389f1f1349e32ad755740ce0d5)), closes [#486](https://github.com/Moonofweisheng/wot-design-uni/issues/486) +* 🐛 修复Input、Textarea未设置labelWidth时通过CSS变量设置label宽度无效的问题 ([#591](https://github.com/Moonofweisheng/wot-design-uni/issues/591)) ([2f12ac6](https://github.com/Moonofweisheng/wot-design-uni/commit/2f12ac6d2b598c7fa545009a82acd1c07bf21779)), closes [#573](https://github.com/Moonofweisheng/wot-design-uni/issues/573) +* 🐛 修复loadmore组件属性errorText存在默认值导致国际化失效的问题 ([#594](https://github.com/Moonofweisheng/wot-design-uni/issues/594)) ([0bcc3c4](https://github.com/Moonofweisheng/wot-design-uni/commit/0bcc3c498ed9206bea45522f58889ec3f3a5f673)) +* 🐛 修复Radio点击失效的问题 ([5cce125](https://github.com/Moonofweisheng/wot-design-uni/commit/5cce125c737989e1e447394223129e2e585b91f4)), closes [#596](https://github.com/Moonofweisheng/wot-design-uni/issues/596) +* 🐛确保inputNumber输入值在设定的最小值和最大值之间 ([#610](https://github.com/Moonofweisheng/wot-design-uni/issues/610)) ([344b1ac](https://github.com/Moonofweisheng/wot-design-uni/commit/344b1ac9168701bc408f82268f68ef8453527ef9)), closes [#602](https://github.com/Moonofweisheng/wot-design-uni/issues/602) + + +### ✨ Features | 新功能 + +* ✨ 迁移StatusTip组件的图片资源 ([f54ff30](https://github.com/Moonofweisheng/wot-design-uni/commit/f54ff306e7dafcfaead671120d100c4d9482daf9)) +* ✨ count-to组件添加type属性 ([#556](https://github.com/Moonofweisheng/wot-design-uni/issues/556)) ([60c92f2](https://github.com/Moonofweisheng/wot-design-uni/commit/60c92f2f38b563968f88f94267b8d805c28109d1)) +* ✨ Fab 悬浮按钮组件支持自定义触发器和控制能否展开 ([#612](https://github.com/Moonofweisheng/wot-design-uni/issues/612)) ([8e68ef3](https://github.com/Moonofweisheng/wot-design-uni/commit/8e68ef3bf807b5ec3c935daa6ce68f58962a188d)), closes [#512](https://github.com/Moonofweisheng/wot-design-uni/issues/512) +* ✨ Img组件新增属性 show-menu-by-longpress 支持微信小程序长按弹出菜单栏 ([#613](https://github.com/Moonofweisheng/wot-design-uni/issues/613)) ([a7fc229](https://github.com/Moonofweisheng/wot-design-uni/commit/a7fc22964823af1ee1e513a268fb783bbea77ee4)), closes [#611](https://github.com/Moonofweisheng/wot-design-uni/issues/611) +* ✨ Input、Textarea增加ignoreCompositionEvent属性 ([#592](https://github.com/Moonofweisheng/wot-design-uni/issues/592)) ([efcd4bb](https://github.com/Moonofweisheng/wot-design-uni/commit/efcd4bbb38b5bf53a26f0a8834f0cbd9fa26f5e5)), closes [#574](https://github.com/Moonofweisheng/wot-design-uni/issues/574) +* ✨ InputNumber 步进器新增支持adjustPosition属性 ([f8a5240](https://github.com/Moonofweisheng/wot-design-uni/commit/f8a524010a2945941fbefa745756f2e6efbeb88b)), closes [#599](https://github.com/Moonofweisheng/wot-design-uni/issues/599) + +### [1.3.10](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.9...v1.3.10) (2024-09-08) + + +### ✨ Features | 新功能 + +* ✨ 新增Keyboard虚拟键盘支持车牌号输入 ([#567](https://github.com/Moonofweisheng/wot-design-uni/issues/567)) ([59df1b7](https://github.com/Moonofweisheng/wot-design-uni/commit/59df1b7ce56e9253ad046a7898651a866b8c99d7)), closes [#351](https://github.com/Moonofweisheng/wot-design-uni/issues/351) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 col-picker 点击遮罩关闭执行两次问题 ([#584](https://github.com/Moonofweisheng/wot-design-uni/issues/584)) ([8fc5380](https://github.com/Moonofweisheng/wot-design-uni/commit/8fc5380ad1f9a34998aedf1de2a9b05011bd8267)) +* 🐛 修复wd-upload 关闭按钮受项目行高影响的问题 ([#576](https://github.com/Moonofweisheng/wot-design-uni/issues/576)) ([feb64ea](https://github.com/Moonofweisheng/wot-design-uni/commit/feb64ea7be1eada01782bb1fa0d5b848acb4fa64)) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档中添加KeyBoard的版本要求 ([715c054](https://github.com/Moonofweisheng/wot-design-uni/commit/715c054f4c723de73e2d57b940390cc7bcc89273)) +* ✏️ 优化多列选择器组件文档 ([#572](https://github.com/Moonofweisheng/wot-design-uni/issues/572)) ([93e0736](https://github.com/Moonofweisheng/wot-design-uni/commit/93e0736a24aa77d60376b5dd4d073180b88a6411)) + +### [1.3.9](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.8...v1.3.9) (2024-09-01) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复某些场景下wd-textarea属性maxlength无效的问题 ([#558](https://github.com/Moonofweisheng/wot-design-uni/issues/558)) ([4b1b237](https://github.com/Moonofweisheng/wot-design-uni/commit/4b1b2370db4a34716ceedfde3a49d2ae7e20f919)) +* 🐛 修复IndexBar组件更新数据时显示异常的问题 ([f4c751d](https://github.com/Moonofweisheng/wot-design-uni/commit/f4c751dfae3724118c2d842489a5c7d1003996f1)), closes [#545](https://github.com/Moonofweisheng/wot-design-uni/issues/545) +* 🐛 修复Input和Textarea设置为readonly时在部分iOS手机可以点击聚焦的问题 ([ff59403](https://github.com/Moonofweisheng/wot-design-uni/commit/ff594031546a25f4b2831749312171d260a76044)), closes [#533](https://github.com/Moonofweisheng/wot-design-uni/issues/533) +* 🐛 修复Picker多级联动未应用picker选择值时取消后打开展示列数据错误的问题 ([90e86de](https://github.com/Moonofweisheng/wot-design-uni/commit/90e86def95ae458208f8aa50427b845db61d05b4)), closes [#562](https://github.com/Moonofweisheng/wot-design-uni/issues/562) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整数字滚动组件文档路径 ([636a2c5](https://github.com/Moonofweisheng/wot-design-uni/commit/636a2c5e8a8906166947312f085e5fabba5c47df)) +* ✏️ 更正form demo 方法名不一致 ([#534](https://github.com/Moonofweisheng/wot-design-uni/issues/534)) ([59fb1ea](https://github.com/Moonofweisheng/wot-design-uni/commit/59fb1eaabd7fea5428dc860af5ad734c9eebb496)) +* ✏️ 优化MessageBox示例demo ([a827b79](https://github.com/Moonofweisheng/wot-design-uni/commit/a827b79498a48272eb71fd9c0e70a9dae889375b)) +* ✏️ 增加安卓演示demo下载二维码 ([8680e77](https://github.com/Moonofweisheng/wot-design-uni/commit/8680e776e229d96b995de402e12ab423930a27ba)) +* ✏️ 更正text组件doc的type属性默认值 ([#557](https://github.com/Moonofweisheng/wot-design-uni/issues/557)) ([3e51f76](https://github.com/Moonofweisheng/wot-design-uni/commit/3e51f763cf394cd5214bc5c0c3e6e23c9ee974b7)) + + +### ✨ Features | 新功能 + +* ✨ config-provider 支持customClass 与 customeStyle ([#535](https://github.com/Moonofweisheng/wot-design-uni/issues/535)) ([febe730](https://github.com/Moonofweisheng/wot-design-uni/commit/febe73079eceeb2cf0eec9fc5712321fa3434bd2)) +* ✨ Form设置提示模式为toast时优先显示顺序靠前的表单项的错误提示 ([f25409f](https://github.com/Moonofweisheng/wot-design-uni/commit/f25409f5a83df50ecbbf0a21bb2d5199021b9cc1)), closes [#548](https://github.com/Moonofweisheng/wot-design-uni/issues/548) +* ✨ img 图片组件click事件增加mouseEvent参数 ([#539](https://github.com/Moonofweisheng/wot-design-uni/issues/539)) ([4983f48](https://github.com/Moonofweisheng/wot-design-uni/commit/4983f4832a194d399aeb919b8d2c02564789d9ab)) +* ✨ Text支持传入number类型的text ([e1f9ff6](https://github.com/Moonofweisheng/wot-design-uni/commit/e1f9ff60e35c7b6bbb4b5e7b84b2d570471056f6)), closes [#553](https://github.com/Moonofweisheng/wot-design-uni/issues/553) + +### [1.3.8](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.7...v1.3.8) (2024-08-18) + + +### ✏️ Documentation | 文档 + +* ✏️ 补充Form设置error-type的示例 ([0e6ea3e](https://github.com/Moonofweisheng/wot-design-uni/commit/0e6ea3ead02c7b51fac7c5776c92044abeaa4dc3)) +* ✏️ 修复常见问题中useToast入参错误的问题 ([3cd0905](https://github.com/Moonofweisheng/wot-design-uni/commit/3cd0905bab2b0dfc3d05257e01aa16afe61c0002)) +* ✏️ 修复textarea组件的maxlength属性类型标注错误 ([#502](https://github.com/Moonofweisheng/wot-design-uni/issues/502)) ([3698e30](https://github.com/Moonofweisheng/wot-design-uni/commit/3698e30301c6c482135671b0a3f150388421ffae)) +* ✏️ 优化MessageBox和Toast文档中selector的介绍 ([f092838](https://github.com/Moonofweisheng/wot-design-uni/commit/f092838756144677c97155dfb700b1ae2cf56f47)) +* ✏️ Toast 文档增加唯一标识selector的介绍 ([#494](https://github.com/Moonofweisheng/wot-design-uni/issues/494)) ([3f99e1b](https://github.com/Moonofweisheng/wot-design-uni/commit/3f99e1bfc7e78c0359e593a2862d1d885c914858)) + + +### ✨ Features | 新功能 + +* ✨ 调整Statistic为CountTo组件并使用useCountDown重构 ([a01baaf](https://github.com/Moonofweisheng/wot-design-uni/commit/a01baafe327e4feeba0de9735901dfc32e014f6a)) +* ✨ 新增statistic 数值显示 ([#489](https://github.com/Moonofweisheng/wot-design-uni/issues/489)) ([592c37b](https://github.com/Moonofweisheng/wot-design-uni/commit/592c37b15e54049faefd14cb480451895bb34d90)) +* ✨ Collapse 折叠面板组件支持嵌套使用 ([#521](https://github.com/Moonofweisheng/wot-design-uni/issues/521)) ([a5ce5dd](https://github.com/Moonofweisheng/wot-design-uni/commit/a5ce5dd8825e520f8e676a9f400efda1eb27546a)), closes [#503](https://github.com/Moonofweisheng/wot-design-uni/issues/503) +* ✨ datetime-picker 增加自定义 Cell 样式属性 ([#491](https://github.com/Moonofweisheng/wot-design-uni/issues/491)) ([2cc7d7f](https://github.com/Moonofweisheng/wot-design-uni/commit/2cc7d7fb106ec0a13104bf8bea964ba375bd7ad5)) +* ✨ form表单新增errorType错误提示类型 ([#487](https://github.com/Moonofweisheng/wot-design-uni/issues/487)) ([5915922](https://github.com/Moonofweisheng/wot-design-uni/commit/5915922b0b4970424e2dc97ef7f922a918fedfce)) +* ✨Upload 组件支持手动上传并增加自定义上传函数 ([3def17e](https://github.com/Moonofweisheng/wot-design-uni/commit/3def17eb16b1355ee0a9a950788ef6299b0179a3)), closes [#481](https://github.com/Moonofweisheng/wot-design-uni/issues/481) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复checkbox-group的shape无法作用到子组件的问题 ([cd96d25](https://github.com/Moonofweisheng/wot-design-uni/commit/cd96d258f618d4a93584307b4100eee448a58884)), closes [#519](https://github.com/Moonofweisheng/wot-design-uni/issues/519) +* 🐛 修复DropDown传入正确direction出现错误警告的问题 ([#499](https://github.com/Moonofweisheng/wot-design-uni/issues/499)) ([35507a1](https://github.com/Moonofweisheng/wot-design-uni/commit/35507a1b24dbdee27eefb960ffa637e842b04f9c)) +* 🐛 修复picker-view动态设置columns时获取选中值异常的问题 ([#518](https://github.com/Moonofweisheng/wot-design-uni/issues/518)) ([8530440](https://github.com/Moonofweisheng/wot-design-uni/commit/8530440e81cb8244d7e6288a2c7a8fda41bc7a11)), closes [#492](https://github.com/Moonofweisheng/wot-design-uni/issues/492) +* 🐛 修复Textarea组件暗黑模式下清空按钮样式不正确的问题 ([8e83a11](https://github.com/Moonofweisheng/wot-design-uni/commit/8e83a117f2acf8b17b021ec833b43d9b2b940d9a)) + +### [1.3.7](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.6...v1.3.7) (2024-08-06) + + +### ✏️ Documentation | 文档 + +* ✏️ 更新爱发电地址和示例demo二维码 ([0ecc4c1](https://github.com/Moonofweisheng/wot-design-uni/commit/0ecc4c194d753a11dfa461d74df1a00d75be0e4e)) +* ✏️ 更新README ([0c33dd4](https://github.com/Moonofweisheng/wot-design-uni/commit/0c33dd48ad8528b4b080125272375bae9fedf352)) +* ✏️ 允许文档组件列表折叠收起 ([#468](https://github.com/Moonofweisheng/wot-design-uni/issues/468)) ([b0e4d23](https://github.com/Moonofweisheng/wot-design-uni/commit/b0e4d235b27a729024951a7b31950e83bd43d3de)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复addUnit工具方法为string类型的参数时未添加单位导致swiper高度丢失的问题 ([3d7775c](https://github.com/Moonofweisheng/wot-design-uni/commit/3d7775c5a93668cb7ac6b50563869d13bbd39bfa)) +* 🐛 修复Input设置为number类型时绑定值重设为0时显示异常的问题 ([df6a6a0](https://github.com/Moonofweisheng/wot-design-uni/commit/df6a6a0ab1f911296002e39299a93bbee5546715)), closes [#470](https://github.com/Moonofweisheng/wot-design-uni/issues/470) +* 🐛 修复LockScroll后切换页面无法滚动 ([#478](https://github.com/Moonofweisheng/wot-design-uni/issues/478)) ([197d61a](https://github.com/Moonofweisheng/wot-design-uni/commit/197d61a678738bda608588d660263e0d5657f940)), closes [#473](https://github.com/Moonofweisheng/wot-design-uni/issues/473) +* 🐛 修复Textarea的placeholder无法设置空字符串问题 ([#472](https://github.com/Moonofweisheng/wot-design-uni/issues/472)) ([bb3d329](https://github.com/Moonofweisheng/wot-design-uni/commit/bb3d3292af56016ad21d7bf49024a0338d93ec3d)), closes [#471](https://github.com/Moonofweisheng/wot-design-uni/issues/471) +* **type:** 🐛 修复vue>=2.7版本的GlobalComponents类型声明问题 ([#464](https://github.com/Moonofweisheng/wot-design-uni/issues/464)) ([a175f05](https://github.com/Moonofweisheng/wot-design-uni/commit/a175f05e01eff86678dd08bd226bd401192b0c0b)) + + +### ✨ Features | 新功能 + +* ✨ 修复Text组件设置color属性后lines失效的问题 ([84826f8](https://github.com/Moonofweisheng/wot-design-uni/commit/84826f8057ba29f65b26ee8f292073edb2f441f0)), closes [#477](https://github.com/Moonofweisheng/wot-design-uni/issues/477) +* ✨ Input 组件新增clear-triger属性 ([#476](https://github.com/Moonofweisheng/wot-design-uni/issues/476)) ([364cfbf](https://github.com/Moonofweisheng/wot-design-uni/commit/364cfbf1af7a9109be9af59b543b4ccef9c32916)), closes [#462](https://github.com/Moonofweisheng/wot-design-uni/issues/462) +* ✨ Swiper 轮播组件增加value-key用于自定义目标字段属性名 ([#485](https://github.com/Moonofweisheng/wot-design-uni/issues/485)) ([f207876](https://github.com/Moonofweisheng/wot-design-uni/commit/f20787690368e341850c2fd51cf725b26b192ec9)), closes [#410](https://github.com/Moonofweisheng/wot-design-uni/issues/410) +* ✨ Textarea 组件新增clear-triger属性 ([1c13f2e](https://github.com/Moonofweisheng/wot-design-uni/commit/1c13f2e629fc259e282d7d859097f8905ef1053e)), closes [#462](https://github.com/Moonofweisheng/wot-design-uni/issues/462) +* 组件text新增金额类型,前后插槽,下划线等功能 ([#452](https://github.com/Moonofweisheng/wot-design-uni/issues/452)) ([95735be](https://github.com/Moonofweisheng/wot-design-uni/commit/95735be75e276b8679a5a76c9cbe49ea29a9b18d)) +* **drop-menu:** 支持自定义图标以及before-toggle ([#479](https://github.com/Moonofweisheng/wot-design-uni/issues/479)) ([108e1b3](https://github.com/Moonofweisheng/wot-design-uni/commit/108e1b36c69cdb28b59f8742d82bb78540a0e043)) + +### [1.3.6](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.5...v1.3.6) (2024-07-26) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Button为disabled状态时仍能触发open-type指定事件的问题 ([a64a570](https://github.com/Moonofweisheng/wot-design-uni/commit/a64a5707d2573c042cd9bb16d6f7fecba9a38291)), closes [#458](https://github.com/Moonofweisheng/wot-design-uni/issues/458) +* 🐛 修复MessageBox设置为prompt时输入框绑定值异常的问题 ([140d960](https://github.com/Moonofweisheng/wot-design-uni/commit/140d96019d91a51f2af2efbd91a279d203a8408b)) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档地址更新并增加QQ2群二维码 ([ef1ad01](https://github.com/Moonofweisheng/wot-design-uni/commit/ef1ad011f205612d6d2a8f5fc8cbf7d05dfffc7d)) +* ✏️ 修复Toast组件文档中关于提示方法描述的错误 ([8ed19a2](https://github.com/Moonofweisheng/wot-design-uni/commit/8ed19a2949064ec93cc281aadae4710d4d24a25f)) +* ✏️ 修正DateTimePicker文档中关于minDate和maxDate类型标注错误的问题 ([b322264](https://github.com/Moonofweisheng/wot-design-uni/commit/b322264c9a84d9acb82276ecacf5f12f1fd25f6e)) + +### [1.3.5](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.4...v1.3.5) (2024-07-20) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Text组件使用日期工具方法路径错误的问题 ([c4071c3](https://github.com/Moonofweisheng/wot-design-uni/commit/c4071c3759d8328f5dd6a6a374bb91dda5af1029)), closes [#453](https://github.com/Moonofweisheng/wot-design-uni/issues/453) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档中全局引入ElTag用于显示组件上线版本 ([1d05654](https://github.com/Moonofweisheng/wot-design-uni/commit/1d056547c89f4b6f39e9f2b503d55790abc02b52)) +* ✏️ 修复RadioBox文档中关于表单模式表述错误的问题 ([1da6c34](https://github.com/Moonofweisheng/wot-design-uni/commit/1da6c34565d20c7fdb0970cfc93dada208b1f82e)) +* ✏️ 优化Segmented分段器关于绑定激活项的文档 ([5caf3b9](https://github.com/Moonofweisheng/wot-design-uni/commit/5caf3b95073c9bf28f280cbe88431a40f937e994)) + +### [1.3.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.3...v1.3.4) (2024-07-19) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复双向滑块响应式丢失 ([#436](https://github.com/Moonofweisheng/wot-design-uni/issues/436)) ([825ea9b](https://github.com/Moonofweisheng/wot-design-uni/commit/825ea9b5b81981ae2a8cb497b412bf950caf6aaf)) +* 🐛 修复Input组件[@input](https://github.com/input)事件参数错误的问题 ([82357f9](https://github.com/Moonofweisheng/wot-design-uni/commit/82357f916def6283003aef64ef522a5bb155c307)) +* 🐛 修复Table组件异步填充数据源无效的问题 ([c795c00](https://github.com/Moonofweisheng/wot-design-uni/commit/c795c00560a267de41d8ef3f976fe16c6ad8ba00)), closes [#445](https://github.com/Moonofweisheng/wot-design-uni/issues/445) +* 🐛 修复Upload组件accept为media时图片预览顺序混乱的问题 ([f8c1053](https://github.com/Moonofweisheng/wot-design-uni/commit/f8c1053abd2b0ce3f3bee89fbd0e9adcdf1961d2)), closes [#442](https://github.com/Moonofweisheng/wot-design-uni/issues/442) +* 🐛 Button按钮click事件直接透传event ([017aeda](https://github.com/Moonofweisheng/wot-design-uni/commit/017aeda89d7950024baddc40a4a1e83a36010be3)), closes [#443](https://github.com/Moonofweisheng/wot-design-uni/issues/443) +* 修复 textarea 组件同时使用 auto-height 和 no-border 属性时,no-border 属性不生效 ([#448](https://github.com/Moonofweisheng/wot-design-uni/issues/448)) ([a2f4b32](https://github.com/Moonofweisheng/wot-design-uni/commit/a2f4b322f5b9bd01a36a46b904684d531d5e6730)) + + +### ✨ Features | 新功能 + +* ✨ Button按钮组件支持使用自定义组件 ([517b583](https://github.com/Moonofweisheng/wot-design-uni/commit/517b583f262e374154111d635644dfb225a473c9)), closes [#310](https://github.com/Moonofweisheng/wot-design-uni/issues/310) +* ✨ Toast 轻提示组件支持使用组件库内置和自定义图标 ([723c51b](https://github.com/Moonofweisheng/wot-design-uni/commit/723c51bac98bb751af44f13737fba12deb298dd4)), closes [#444](https://github.com/Moonofweisheng/wot-design-uni/issues/444) +* ✨ Upload上传组件新增支持successStatus属性 ([99eab74](https://github.com/Moonofweisheng/wot-design-uni/commit/99eab74260e1e3c43f9f4b147edb4a5a3147d086)) +* 新增Text 文本组件 ([#403](https://github.com/Moonofweisheng/wot-design-uni/issues/403)) ([14f5f44](https://github.com/Moonofweisheng/wot-design-uni/commit/14f5f4430a7cd599149adf16f7bc704dc42f4d90)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整QQ群与提问相关文档 ([cb11e98](https://github.com/Moonofweisheng/wot-design-uni/commit/cb11e9822ff714d3c1e03ad5f2b01b0a07e8fcec)) +* ✏️ 移除示例demo中手机号等字样方便过审 ([7488a7f](https://github.com/Moonofweisheng/wot-design-uni/commit/7488a7f708035b5f59c60078190c880cc8d11800)) + +### [1.3.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.2...v1.3.3) (2024-07-14) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复IndexBar索引值显示错误的问题 ([#433](https://github.com/Moonofweisheng/wot-design-uni/issues/433)) ([19dc35b](https://github.com/Moonofweisheng/wot-design-uni/commit/19dc35bf40eecc263ed19e9f54d05c004b1d3425)), closes [#408](https://github.com/Moonofweisheng/wot-design-uni/issues/408) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整演示demo中图片到npmmirror上 ([93ff5f9](https://github.com/Moonofweisheng/wot-design-uni/commit/93ff5f938fdb1ced622080bce9168bfe0e7ed771)) +* ✏️ 新增关于messageBox弹出多个的常见问题解答 ([a362928](https://github.com/Moonofweisheng/wot-design-uni/commit/a3629283aa3838803df900512afc990f920b3e0b)) +* ✏️ 修复SelectPicker文档中存在的拼写错误 ([9e28b57](https://github.com/Moonofweisheng/wot-design-uni/commit/9e28b5771a30fa0bf8aad60e8e494e0bc976d9a1)), closes [#426](https://github.com/Moonofweisheng/wot-design-uni/issues/426) +* ✏️ Upload文档增加微信隐私协议的介绍 ([c7f3a4a](https://github.com/Moonofweisheng/wot-design-uni/commit/c7f3a4adc2907bab30f5e075417f34541cba7a5e)) + +### [1.3.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.1...v1.3.2) (2024-07-08) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复ActionSheet样式调整导致微信编译错误的问题 ([a9189d2](https://github.com/Moonofweisheng/wot-design-uni/commit/a9189d2c263459a33cdbb68bec3dd0dd0213b5c0)) + +### [1.3.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.3.0...v1.3.1) (2024-07-08) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复暗黑模式下Grid和ActionSheet组件部分样式异常的问题 ([a28938c](https://github.com/Moonofweisheng/wot-design-uni/commit/a28938c91d4b437e6b583793e32f8373cec102ae)), closes [#409](https://github.com/Moonofweisheng/wot-design-uni/issues/409) + +## [1.3.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.28...v1.3.0) (2024-07-07) + + +### ✨ Features | 新功能 + +* ✨ Upload上传组件新增支持上传视频和文件 ([#412](https://github.com/Moonofweisheng/wot-design-uni/issues/412)) ([e07dbdd](https://github.com/Moonofweisheng/wot-design-uni/commit/e07dbdd5305c112fe3648ce988a45b2cc36ae143)), closes [#186](https://github.com/Moonofweisheng/wot-design-uni/issues/186) [#336](https://github.com/Moonofweisheng/wot-design-uni/issues/336) +* ✨select-picker组件增加open、close事件 ([#395](https://github.com/Moonofweisheng/wot-design-uni/issues/395)) ([9237a04](https://github.com/Moonofweisheng/wot-design-uni/commit/9237a04bcbde9960864b9a7b09a64fc2b6c27595)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整ColPicker多列选择器文档中省市区数据源及演示demo ([d09bd03](https://github.com/Moonofweisheng/wot-design-uni/commit/d09bd037e735b02264074c2a251c59c01b8ff571)) +* ✏️ DropDownItem文档增加closed和opened介绍 ([401bd28](https://github.com/Moonofweisheng/wot-design-uni/commit/401bd284ceaafe957a0f4184d0a009bed70e9377)) +* ✏️ PasswordInput 修复示例代码错误的问题 ([#391](https://github.com/Moonofweisheng/wot-design-uni/issues/391)) ([519d172](https://github.com/Moonofweisheng/wot-design-uni/commit/519d17235b7c61acf2048104a495690bff0b9804)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Calendar等组件暗黑模式部分样式异常的问题 ([281e20f](https://github.com/Moonofweisheng/wot-design-uni/commit/281e20f2a922d98c00321d1316efc96b985c620d)), closes [#388](https://github.com/Moonofweisheng/wot-design-uni/issues/388) +* 🐛 修复IndexBar点击索引序号时未显示预期索引值的问题 ([c33991e](https://github.com/Moonofweisheng/wot-design-uni/commit/c33991ee14b8108bcd084b5d7b59f35cb79b2b35)), closes [#408](https://github.com/Moonofweisheng/wot-design-uni/issues/408) +* 🐛 修复Swiper在微信端长时间处于后台出现抖动的问题 ([#413](https://github.com/Moonofweisheng/wot-design-uni/issues/413)) ([4741439](https://github.com/Moonofweisheng/wot-design-uni/commit/4741439277f1a2668634a4e5e3649236ed95a627)), closes [#411](https://github.com/Moonofweisheng/wot-design-uni/issues/411) + +### [1.2.28](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.27...v1.2.28) (2024-06-24) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复omitBy工具方法实现错误导致Tabbar等组件徽标显示异常的问题 ([1491fe4](https://github.com/Moonofweisheng/wot-design-uni/commit/1491fe44616a0db1c165e2bed29637f8c46fbc7e)) + +### [1.2.27](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.26...v1.2.27) (2024-06-21) + + +### ✨ Features | 新功能 + +* ✨ add title slot for wd-collapse-item ([#372](https://github.com/Moonofweisheng/wot-design-uni/issues/372)) ([0252bd9](https://github.com/Moonofweisheng/wot-design-uni/commit/0252bd98254f8e108e545651127a744640b39692)), closes [#356](https://github.com/Moonofweisheng/wot-design-uni/issues/356) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整文档中关于类型声明文件的配置 ([0c38e98](https://github.com/Moonofweisheng/wot-design-uni/commit/0c38e986f0151b8aa2e17ab1770d1f39b178d354)) +* ✏️ Input 密码输入框示例移除disabled属性 ([3026c78](https://github.com/Moonofweisheng/wot-design-uni/commit/3026c78d237217b08e2fa3cdf64260c294a61b2b)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复ActionSheet禁用和加载状态时仍有点击效果的问题 ([c6baf45](https://github.com/Moonofweisheng/wot-design-uni/commit/c6baf452f0b626dea378148131d624589bb0c47e)), closes [#379](https://github.com/Moonofweisheng/wot-design-uni/issues/379) +* 🐛 修复Sidebar等组件css变量前缀错误的问题 ([0c31e16](https://github.com/Moonofweisheng/wot-design-uni/commit/0c31e16699e0b70b91384da0a5c0537b791e6bcf)) + +### [1.2.26](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.25...v1.2.26) (2024-06-14) + + +### ✨ Features | 新功能 + +* ✨ fab组件添加gap属性 ([#366](https://github.com/Moonofweisheng/wot-design-uni/issues/366)) ([7b44765](https://github.com/Moonofweisheng/wot-design-uni/commit/7b44765adc08fd16e055fbd326698a8f6b708426)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Fab初始化时存在初始位置闪现的问题 ([74c90be](https://github.com/Moonofweisheng/wot-design-uni/commit/74c90beb402e519fee1057870b0631673945cb73)) +* 🐛 修复Transition被打断时出现显示异常的问题 ([#368](https://github.com/Moonofweisheng/wot-design-uni/issues/368)) ([9c21b95](https://github.com/Moonofweisheng/wot-design-uni/commit/9c21b9512076cc95098a36ee7a7283f70386c94b)) + +### [1.2.25](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.24...v1.2.25) (2024-06-09) + + +### ✨ Features | 新功能 + +* ✨ Pickerview选择器新增immediate-change属性,目前微信和支付宝小程序支持。 ([3428ae1](https://github.com/Moonofweisheng/wot-design-uni/commit/3428ae17889a36552010e3f7cc4a9bebb7a94461)) +* ✨ Slider暴露initSlider方法用于外部初始化slider宽度信息 ([fc3e4ef](https://github.com/Moonofweisheng/wot-design-uni/commit/fc3e4ef3bb108e6bb6a660ffead40f4658c119e7)), closes [#344](https://github.com/Moonofweisheng/wot-design-uni/issues/344) + + +### ✏️ Documentation | 文档 + +* ✏️ 常见问题中增加关于交流群的内容 ([9ddaeec](https://github.com/Moonofweisheng/wot-design-uni/commit/9ddaeec32299463406ae2f60406cf39daff575cf)) +* ✏️ 更新文档中组件数量 ([10d2ba9](https://github.com/Moonofweisheng/wot-design-uni/commit/10d2ba9035970c5627fc731219ec529e634d2578)) +* ✏️ 增加关于微信小程序v-if和slot执行顺序异常问题的介绍 ([6a14879](https://github.com/Moonofweisheng/wot-design-uni/commit/6a1487900b214d071fdbda52034f220b8b046eec)) +* ✏️ 修正upload组件文档中change事件的dmeo错误 ([#360](https://github.com/Moonofweisheng/wot-design-uni/issues/360)) ([61004d3](https://github.com/Moonofweisheng/wot-design-uni/commit/61004d30ed3e79b439ef8a3c5d2e78723d7fa017)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复时间选择器设置minDate之后选择器显示值和实际选择值不一致的问题 ([3c0284f](https://github.com/Moonofweisheng/wot-design-uni/commit/3c0284f1f27b743ea3bdb7eeac5c489939057e13)), closes [#339](https://github.com/Moonofweisheng/wot-design-uni/issues/339) +* 🐛 修复ImgCropper未暴露resetImg和setRoate方法的问题 ([e58f111](https://github.com/Moonofweisheng/wot-design-uni/commit/e58f1111f2ae8e2da23e60c0ed60130373117970)), closes [#354](https://github.com/Moonofweisheng/wot-design-uni/issues/354) +* 🐛 修复Tag在钉钉小程序平台close方法不执行的问题 ([242d2f2](https://github.com/Moonofweisheng/wot-design-uni/commit/242d2f25c6ac829b5d20d63d520b1f8c8ae921a8)), closes [#359](https://github.com/Moonofweisheng/wot-design-uni/issues/359) + +### [1.2.24](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.23...v1.2.24) (2024-06-03) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Input支付宝小程序number/digit类型使用maxlength=-1时v-model失效的问题 ([7aa21b0](https://github.com/Moonofweisheng/wot-design-uni/commit/7aa21b0baadeccf4f0eb179f74332013acec6a10)) + +### [1.2.23](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.22...v1.2.23) (2024-06-02) + + +### ✏️ Documentation | 文档 + +* ✏️ 更新LICENSE文件地址 ([dae3ffc](https://github.com/Moonofweisheng/wot-design-uni/commit/dae3ffcc7b488dd6d87bc1c5e8ae16a78b794f85)) +* ✏️ 修复loading组件示例代码中文标点符号、img-cropper组件示例代码标签缺失的问题 ([#347](https://github.com/Moonofweisheng/wot-design-uni/issues/347)) ([d171255](https://github.com/Moonofweisheng/wot-design-uni/commit/d171255899d232f141c84aa1251c03cc1d0a0b75)) +* update select-picker doc ([#346](https://github.com/Moonofweisheng/wot-design-uni/issues/346)) ([7454452](https://github.com/Moonofweisheng/wot-design-uni/commit/7454452ad44331f329408cead9b483cf774cce5f)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Cell的value为0时无法渲染的问题 ([dc64c09](https://github.com/Moonofweisheng/wot-design-uni/commit/dc64c09e6c6f991fe6f8f9fcfa309392e233ce21)) +* 🐛 修复Sticky在h5和App端缓慢拖动时存在几率始终固定在顶部的问题 ([#350](https://github.com/Moonofweisheng/wot-design-uni/issues/350)) ([c5b3c5f](https://github.com/Moonofweisheng/wot-design-uni/commit/c5b3c5f68e1bb376249ed5f2c30b1898cc375abe)) + + +### ✨ Features | 新功能 + +* ✨ 调整Circle环形进度条在微信小程序端使用canvas2d支持同层渲染 ([#351](https://github.com/Moonofweisheng/wot-design-uni/issues/351)) ([4489517](https://github.com/Moonofweisheng/wot-design-uni/commit/44895179e4688ceb995ea1968d23df4f0bf9cdc2)) + +### [1.2.22](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.21...v1.2.22) (2024-05-23) + + +### ✏️ Documentation | 文档 + +* ✏️ 组件库介绍组件数量调整至70+ ([efd55ca](https://github.com/Moonofweisheng/wot-design-uni/commit/efd55ca8afc07368b8d9f348d73c9a25cf186c47)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Form指定prop为`a.b`时校验失败的问题 ([#329](https://github.com/Moonofweisheng/wot-design-uni/issues/329)) ([ab600b9](https://github.com/Moonofweisheng/wot-design-uni/commit/ab600b915a647ff089d5cfbb0ac955e3baa581c3)) + +### [1.2.21](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.20...v1.2.21) (2024-05-20) + + +### ✨ Features | 新功能 + +* ✨ 添加索引栏组件 ([#321](https://github.com/Moonofweisheng/wot-design-uni/issues/321)) ([f84e9af](https://github.com/Moonofweisheng/wot-design-uni/commit/f84e9affb1a044a37661c5d1dc118d834b49239c)) +* ✨ img组件添加loading、error插槽 ([#323](https://github.com/Moonofweisheng/wot-design-uni/issues/323)) ([00ffa9f](https://github.com/Moonofweisheng/wot-design-uni/commit/00ffa9f3e54f3ba9eec967887e195c0266ef0a41)) +* ✨ skeleton添加默认内容插槽 ([#322](https://github.com/Moonofweisheng/wot-design-uni/issues/322)) ([9a68c47](https://github.com/Moonofweisheng/wot-design-uni/commit/9a68c477dbf5e0f30f74882df92251eac707fdde)) +* add backtop ([#314](https://github.com/Moonofweisheng/wot-design-uni/issues/314)) ([bf9e55a](https://github.com/Moonofweisheng/wot-design-uni/commit/bf9e55a24e676a764b1e035ca86bd6fe26b87420)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Cell组件单独使用时设置border无效的问题 ([19b9f19](https://github.com/Moonofweisheng/wot-design-uni/commit/19b9f196466b88456e8b3e7221afd710da3df99b)) +* 🐛 修复Picker选择器多列选择模式绑定值为空数组时将列第一项作为显示值的问题 ([c3b96ce](https://github.com/Moonofweisheng/wot-design-uni/commit/c3b96ce912bfc13d30c09393dd57cbcbf2d0b80a)) +* 🐛 修复Sticky吸顶组件在微信小程序中放置在页面顶部时吸顶失效的问题 ([4ca3ebe](https://github.com/Moonofweisheng/wot-design-uni/commit/4ca3ebe7202f118a1bf6a462b27dc76ab6c720f9)), closes [#325](https://github.com/Moonofweisheng/wot-design-uni/issues/325) +* 修复wd-button在自定义样式时激活态样式问题 ([#312](https://github.com/Moonofweisheng/wot-design-uni/issues/312)) ([7544d69](https://github.com/Moonofweisheng/wot-design-uni/commit/7544d690f176b44a8e016688723af70d2a77388a)) + + +### ✏️ Documentation | 文档 + +* ✏️ 常见问题增加关于useToast等hooks的答疑以及自定义编译平台的内容 ([65597c7](https://github.com/Moonofweisheng/wot-design-uni/commit/65597c76b812e5e61be17879de320989d0873df4)) +* ✏️ 文档中增加解释导入方式的faq ([83fa0b0](https://github.com/Moonofweisheng/wot-design-uni/commit/83fa0b06927fddabd1021ee02c3c7f8377704786)) + +### [1.2.20](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.19...v1.2.20) (2024-05-12) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整捐赠榜单和友情链接的数据到cloudflare上 ([1314373](https://github.com/Moonofweisheng/wot-design-uni/commit/1314373af1dff95aee4cd3cddefebcb3a6a5c5d2)) +* ✏️ 推荐文档地址调整至cloudflare ([9119f30](https://github.com/Moonofweisheng/wot-design-uni/commit/9119f30b23676ad1b9a3869e362a3840ba288dc3)) +* ✏️ Curtain组件width属性标记为number类型 ([d172ce7](https://github.com/Moonofweisheng/wot-design-uni/commit/d172ce7ffcfebf29b184b57a7f74a25acad1f967)), closes [#303](https://github.com/Moonofweisheng/wot-design-uni/issues/303) + + +### ✨ Features | 新功能 + +* Segmented组件添加click事件 ([#301](https://github.com/Moonofweisheng/wot-design-uni/issues/301)) ([225ce22](https://github.com/Moonofweisheng/wot-design-uni/commit/225ce225ac7faedffd4686b908076c47ba111695)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复MessageBox中使用TextArea字数统计样式错误的问题 ([b186ac0](https://github.com/Moonofweisheng/wot-design-uni/commit/b186ac09294a4fede16c514cd96ff94f661fcbc9)), closes [#290](https://github.com/Moonofweisheng/wot-design-uni/issues/290) +* 🐛 修复PickerView可以滚动到禁用选项的问题 ([edd44ed](https://github.com/Moonofweisheng/wot-design-uni/commit/edd44eda3fc9879dc980b02d1885d77530a3d2e8)), closes [#302](https://github.com/Moonofweisheng/wot-design-uni/issues/302) +* 🐛 修复Popover指定placement后箭头显示异常的问题([#306](https://github.com/Moonofweisheng/wot-design-uni/issues/306)) ([a9b108d](https://github.com/Moonofweisheng/wot-design-uni/commit/a9b108d231a8e537aab4ba49781590bcafb9354d)) +* 🐛 修复release脚本处理最低版本号问题 ([c8077c9](https://github.com/Moonofweisheng/wot-design-uni/commit/c8077c9f3790e7844c902528d43596c4bc4025af)) +* 🐛 修复Sticky组件获取节点错误的问题 ([5483ea6](https://github.com/Moonofweisheng/wot-design-uni/commit/5483ea6c447f85229af66b950e34c1dc690fadb1)) +* 修复wd-calendar未抛出事件 ([c1203c9](https://github.com/Moonofweisheng/wot-design-uni/commit/c1203c91841c3d5bcd407923a577711e462207a3)) + +### [1.2.19](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.18...v1.2.19) (2024-05-01) + + +### ✨ Features | 新功能 + +* ✨ `Slider`组件`min`值允许负数 ([9e7c8d3](https://github.com/Moonofweisheng/wot-design-uni/commit/9e7c8d33eb2c0fccc44f465ed3b28d2cd81efa2d)), closes [#266](https://github.com/Moonofweisheng/wot-design-uni/issues/266) +* ✨ fab添加draggable属性 ([#259](https://github.com/Moonofweisheng/wot-design-uni/issues/259)) ([5e0cd6c](https://github.com/Moonofweisheng/wot-design-uni/commit/5e0cd6caa2296a44a3dc1b3d33033d4cc91d01b9)) +* ✨ table组件添加index参数 ([2161705](https://github.com/Moonofweisheng/wot-design-uni/commit/2161705a2f868f874b89ee28b6029677854a7741)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复`slider`组件`step`属性无效问题 ([50133b9](https://github.com/Moonofweisheng/wot-design-uni/commit/50133b9e5e2a18aace8cbf9eb7570579cc563f1d)), closes [#269](https://github.com/Moonofweisheng/wot-design-uni/issues/269) +* 🐛 修复Cell组件title文字对齐方式受外部影响的问题 ([caf66b6](https://github.com/Moonofweisheng/wot-design-uni/commit/caf66b6beeb236a9295cf0d8ec250557dc19e54e)), closes [#282](https://github.com/Moonofweisheng/wot-design-uni/issues/282) +* 🐛 修复SelectPicker无默认值时仍会查找选择项节点的问题 ([130c438](https://github.com/Moonofweisheng/wot-design-uni/commit/130c4383dc862e190b96bc3670a852a4cce3e629)), closes [#281](https://github.com/Moonofweisheng/wot-design-uni/issues/281) +* 🐛 修复Slider组件max和min变化时滑块和进度条未更新的问题 ([#276](https://github.com/Moonofweisheng/wot-design-uni/issues/276)) ([69303b5](https://github.com/Moonofweisheng/wot-design-uni/commit/69303b52077bd268e3563fa9096e91530bb978c5)) + + +### ✏️ Documentation | 文档 + +* ✏️ 补充Table组件关于Events的介绍 ([6760317](https://github.com/Moonofweisheng/wot-design-uni/commit/676031781b189a3a89dba9e57cb989c06999091a)), closes [#260](https://github.com/Moonofweisheng/wot-design-uni/issues/260) + +### [1.2.18](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.17...v1.2.18) (2024-04-23) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复InputNumber步进器组件在初始化时未发生变化仍触发change的问题 ([6ac20fd](https://github.com/Moonofweisheng/wot-design-uni/commit/6ac20fd60728e9056282466571c64ff747af4c9f)) +* 🐛 修复InputNumber的change事件无法取到当前绑定值的更新的问题 ([45980c5](https://github.com/Moonofweisheng/wot-design-uni/commit/45980c526a0b47fb1cb2c95ad50ab9f226464d7c)) + +### [1.2.17](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.16...v1.2.17) (2024-04-18) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复debounce调整后导致tabs无法切换的问题 ([bd594a7](https://github.com/Moonofweisheng/wot-design-uni/commit/bd594a7202d3cd4e641f23a0b98d468227370d6f)) + +### [1.2.16](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.15...v1.2.16) (2024-04-17) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Gap组件文档中safeAreaBottom属性名错误的问题 ([b03e39f](https://github.com/Moonofweisheng/wot-design-uni/commit/b03e39f601a68ff5f7e72aa3605279683e5e5b74)) +* 🐛 修复PickerView在绑定值为0时无法生效的问题 ([742b4d6](https://github.com/Moonofweisheng/wot-design-uni/commit/742b4d65255926a0e8c3899ae3ee2eb9d7b7e5e5)) + + +### ✏️ Documentation | 文档 + +* ✏️ 补充Img图片支持图片预览的最低支持版本 ([82d8e49](https://github.com/Moonofweisheng/wot-design-uni/commit/82d8e493c0723da9e3ba88981a45ea31ae8ef9d5)), closes [#244](https://github.com/Moonofweisheng/wot-design-uni/issues/244) + + +### ✨ Features | 新功能 + +* ✨ 阻止tag的关闭和新增事件冒泡 ([4c22cf5](https://github.com/Moonofweisheng/wot-design-uni/commit/4c22cf515e2e121b3bbe7d9fd64c5777ce72df32)) +* ✨ Checkbox 新增toggle方法 ([6ec0397](https://github.com/Moonofweisheng/wot-design-uni/commit/6ec0397bc9a5e80780b22245c29c6f05f1b25313)), closes [#239](https://github.com/Moonofweisheng/wot-design-uni/issues/239) +* ✨ date-time-picker-view 添加年选择 ([#241](https://github.com/Moonofweisheng/wot-design-uni/issues/241)) ([0073b32](https://github.com/Moonofweisheng/wot-design-uni/commit/0073b323967fe859ed15284607f4117243614d5e)) +* ✨ Noticebar 通知栏新增支持click点击事件 ([6fc786d](https://github.com/Moonofweisheng/wot-design-uni/commit/6fc786d9be63c2f021c10e0c48c466e0114f5c24)) +* ✨ TableColumn组件value插槽新增index参数 ([b8b03c3](https://github.com/Moonofweisheng/wot-design-uni/commit/b8b03c352b62e31a584faa41ced65d72bc427d89)) + +### [1.2.15](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.14...v1.2.15) (2024-04-11) + + +### ✏️ Documentation | 文档 + +* ✏️ 优化文档及演示demo访问速度 ([#232](https://github.com/Moonofweisheng/wot-design-uni/issues/232)) ([8d3f617](https://github.com/Moonofweisheng/wot-design-uni/commit/8d3f617e403fdbf53a29ca0d48624dc5da74fc94)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Button不同尺寸显示固定尺寸icon样式不协调的问题 ([2a73992](https://github.com/Moonofweisheng/wot-design-uni/commit/2a73992d9c551c51f4f3672167b972d0d0cca881)), closes [#235](https://github.com/Moonofweisheng/wot-design-uni/issues/235) +* 🐛 修复Upload自定义上传样式时未应用limit数量限制和customEvokeClass的问题 ([50baac8](https://github.com/Moonofweisheng/wot-design-uni/commit/50baac876279029214062a23072bb7c309110c0c)) + + +### ✨ Features | 新功能 + +* ✨ MessageBox支持确认前置处理钩子beforeConfirm ([78bed6a](https://github.com/Moonofweisheng/wot-design-uni/commit/78bed6a212a12639cd8831e3a1ad4542d6fbf518)), closes [#229](https://github.com/Moonofweisheng/wot-design-uni/issues/229) +* ✨ Toast轻提示增加opened、closed两个钩子 ([ead218b](https://github.com/Moonofweisheng/wot-design-uni/commit/ead218b87b6b0bd53c8c541c38561fdb45396c72)) + +### [1.2.14](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.13...v1.2.14) (2024-04-09) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复NoticeBar通知栏在小程序端垂直滚动无效的问题 ([eaeb935](https://github.com/Moonofweisheng/wot-design-uni/commit/eaeb935a299dee3c5e54dee6b926d625a7ef66a8)) + +### [1.2.13](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.12...v1.2.13) (2024-04-08) + + +### ✏️ Documentation | 文档 + +* ✏️ demo首页使用Cell组件重构显示样式 ([9ae8a20](https://github.com/Moonofweisheng/wot-design-uni/commit/9ae8a207f3ee8c765e6269b7ef5cb42ff1cd10fd)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复升级vue到3.4.2.之后defineEmits位置不规范导致访问'emit'报错的问题 ([ef574cf](https://github.com/Moonofweisheng/wot-design-uni/commit/ef574cfcb8f805ec308d8364cb887b65394e6108)), closes [#226](https://github.com/Moonofweisheng/wot-design-uni/issues/226) +* 🐛 修复NumberKeyboard暗黑模式无效的问题 ([b0cc958](https://github.com/Moonofweisheng/wot-design-uni/commit/b0cc958e0fd762915fe427275288a87d0c58ed38)) +* 🐛 修复Upload组件sourceType属性丢失默认值导致在iOS系统微信小程序报错的问题 ([b70991a](https://github.com/Moonofweisheng/wot-design-uni/commit/b70991a1133be77439fc139df9019527ded9b71d)), closes [#227](https://github.com/Moonofweisheng/wot-design-uni/issues/227) + +### [1.2.12](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.11...v1.2.12) (2024-04-07) + + +### ✨ Features | 新功能 + +* ✨ 增强`notice-bar`组件`vertical`模式下插槽的功能 ([e3daed5](https://github.com/Moonofweisheng/wot-design-uni/commit/e3daed516c958dbb5bff0d4a51d7d16cf9971da1)) +* ✨ NumberKeyboard数字键盘增加名为title的插槽 ([7edc746](https://github.com/Moonofweisheng/wot-design-uni/commit/7edc7462aa43ea800536ac0a464bb6e6c131a20c)), closes [#213](https://github.com/Moonofweisheng/wot-design-uni/issues/213) +* ✨ StatusTip缺省提示组件新增支持图片mode和自定义图片宽高 ([171c2bb](https://github.com/Moonofweisheng/wot-design-uni/commit/171c2bbdaf9e5ec62fa13fad1079b86daca85d54)) +* ✨ Swiper轮播为image-mode增加ts类型标注 ([9a4ceb2](https://github.com/Moonofweisheng/wot-design-uni/commit/9a4ceb21160dab06a08b39c35e50f69c7c49d023)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 修复 step 的 description 插槽不显示的bug ([f979ccc](https://github.com/Moonofweisheng/wot-design-uni/commit/f979cccc05b9956fe0df121fc2e8cbbb24544766)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整演示demo iframe加载完成后再同步当前是否暗黑模式 ([9ab370e](https://github.com/Moonofweisheng/wot-design-uni/commit/9ab370e19395aaef013da8a386dd310c7deec59e)), closes [#210](https://github.com/Moonofweisheng/wot-design-uni/issues/210) +* ✏️ Steps步骤条增加控制进度的示例 ([8025174](https://github.com/Moonofweisheng/wot-design-uni/commit/80251742f6f5d560d546bd7cd812c35433158a91)) + +### [1.2.11](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.10...v1.2.11) (2024-04-06) + + +### ⚡ Performance Improvements | 性能优化 + +* ⚡ 优化Calendar日历选择器打开关闭时的动画效果 ([5fb9542](https://github.com/Moonofweisheng/wot-design-uni/commit/5fb9542087c62b8cf6974d2e5f4b5f455b456495)) + + +### ✏️ Documentation | 文档 + +* ✏️ `notice-bar`组件补充`event`事件 ([8f11c8a](https://github.com/Moonofweisheng/wot-design-uni/commit/8f11c8a0fe02f3bb0a2e7a67e105f2e33d658477)) +* ✏️ 优化文档与演示demo同步暗黑模式的逻辑 ([d057607](https://github.com/Moonofweisheng/wot-design-uni/commit/d0576071ebaeb69828b8c5e789471c3324dabb1f)), closes [#210](https://github.com/Moonofweisheng/wot-design-uni/issues/210) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复ActionSheet丢失props默认值的问题 ([e50cccc](https://github.com/Moonofweisheng/wot-design-uni/commit/e50cccceeccebeb99ca69712b9f64e8a9e5fd23f)) +* 🐛 修复Calendar部分文字运行时切换国际化未应用国际化文字的问题 ([857c922](https://github.com/Moonofweisheng/wot-design-uni/commit/857c922d4f3542cb543b8b99600bf9c48ffa24b9)) +* 🐛 修复Calendar的type为datetime且无默认值时无法在首次选择日期后选择时间的问题 ([3746ba3](https://github.com/Moonofweisheng/wot-design-uni/commit/3746ba304021c56e14414dfaed225c465869a473)), closes [#214](https://github.com/Moonofweisheng/wot-design-uni/issues/214) +* 🐛 修复search组件suffix插槽无法使用的问题 ([6a4af41](https://github.com/Moonofweisheng/wot-design-uni/commit/6a4af41b93e8edd92e297eaea7c1bc566bfb4d6d)) + + +### ✨ Features | 新功能 + +* ✨ `notice-bar`增加垂直滚动功能 ([93d048b](https://github.com/Moonofweisheng/wot-design-uni/commit/93d048b219d66718880609d6ec9086ce058121fa)), closes [#122](https://github.com/Moonofweisheng/wot-design-uni/issues/122) +* ✨ `notice-bar`增加多文本轮播功能 ([c2e5e9b](https://github.com/Moonofweisheng/wot-design-uni/commit/c2e5e9bbd86093a5795d93aa23c2bd03d8416767)) +* ✨ `upload`组件增加`mode`属性传递给预览`image` ([acf3f99](https://github.com/Moonofweisheng/wot-design-uni/commit/acf3f999033df7b2925040ff83ad1088d0e59a44)), closes [#203](https://github.com/Moonofweisheng/wot-design-uni/issues/203) +* ✨ img组件的mode属性增加类型`ImageMode` ([1398982](https://github.com/Moonofweisheng/wot-design-uni/commit/139898209fea4559a69cbaffed2e7b45b91aa107)) +* ✨ img组件增加enable-preview属性来支持点击预览功能 ([e6a3b73](https://github.com/Moonofweisheng/wot-design-uni/commit/e6a3b73142e37547e60b8f1dd1845fc3e9d5d17e)), closes [#193](https://github.com/Moonofweisheng/wot-design-uni/issues/193) +* ✨ swiper组件增加current属性控制轮播项功能 ([443fd8a](https://github.com/Moonofweisheng/wot-design-uni/commit/443fd8a19e3b73ee61ae6a1692c5409e3d0c0b84)), closes [#211](https://github.com/Moonofweisheng/wot-design-uni/issues/211) + +### [1.2.10](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.9...v1.2.10) (2024-04-02) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Step组件description插槽无法使用的问题 ([e431294](https://github.com/Moonofweisheng/wot-design-uni/commit/e431294ea2b97858f93513c112f1a7574654a87d)) +* 🐛 修复Toast、MessageBox二次打开时部分参数未重置的问题 ([e2e7d37](https://github.com/Moonofweisheng/wot-design-uni/commit/e2e7d378e577d3d1f5582464bdd9e6c4e6d82e3d)) + + +### ✨ Features | 新功能 + +* ✨ 为所有组件补充customStyle属性 ([964240e](https://github.com/Moonofweisheng/wot-design-uni/commit/964240e2e7f640586a18bec1c11b0359afcf99e2)), closes [#212](https://github.com/Moonofweisheng/wot-design-uni/issues/212) + + +### ✏️ Documentation | 文档 + +* ✏️ 更新vitepress至1.0.1 ([da7684f](https://github.com/Moonofweisheng/wot-design-uni/commit/da7684f33ada867a9ba2f22bb1489c804a7d840e)) +* ✏️ 修复更新vitepress至1.0.1后友情链接丢失logo的问题 ([1e36c39](https://github.com/Moonofweisheng/wot-design-uni/commit/1e36c39ff7ab814741792ee91a2ee7d9085862f9)) +* ✏️ Steps文档标题调整为步骤条 ([1ea7996](https://github.com/Moonofweisheng/wot-design-uni/commit/1ea79960fd9facef7aa5ef17f0f9bde03daa0d7c)) + +### [1.2.9](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.8...v1.2.9) (2024-04-01) + + +### ✨ Features | 新功能 + +* ✨ Segmented分段器change事件参数类型扩充为SegmentedOption ([5592bc4](https://github.com/Moonofweisheng/wot-design-uni/commit/5592bc49b9439ef34306741f16c4b5c702d562b2)), closes [#204](https://github.com/Moonofweisheng/wot-design-uni/issues/204) + +### [1.2.8](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.7...v1.2.8) (2024-03-30) + + +### 🐛 Bug Fixes | Bug 修复 + +* 修复useLocale 不传 message 会丢失原有语言配置的问题 ([#209](https://github.com/Moonofweisheng/wot-design-uni/issues/209)) ([e854d0e](https://github.com/Moonofweisheng/wot-design-uni/commit/e854d0e758e44cba9213992794974b7ae5985abf)) + + +### ✨ Features | 新功能 + +* ✨ SelectPicker单选模式支持自动完成 ([#207](https://github.com/Moonofweisheng/wot-design-uni/issues/207)) ([11aa887](https://github.com/Moonofweisheng/wot-design-uni/commit/11aa887ae36153c0a6a0cd9053fc94c70acbcb0d)), closes [#206](https://github.com/Moonofweisheng/wot-design-uni/issues/206) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档中增加@uni-helper/vite-plugin-uni-components的使用提示 ([37d9d46](https://github.com/Moonofweisheng/wot-design-uni/commit/37d9d4631e434792b1e97dccac8a52a6d253d616)) + +### [1.2.7](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.6...v1.2.7) (2024-03-29) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复DatePicker占位符展示缺失的问题 ([8fbca94](https://github.com/Moonofweisheng/wot-design-uni/commit/8fbca94e3690e8b86ce59fbe668805839c50192b)) +* 🐛 修复DateTimePicker区域选择极值计算错误的问题 ([a1e9530](https://github.com/Moonofweisheng/wot-design-uni/commit/a1e9530a917981ca4cf96dde1aa268eaf3da059f)) +* 🐛 修复picker-view初始化报错的问题 ([2102f38](https://github.com/Moonofweisheng/wot-design-uni/commit/2102f38a107a7cc8a316cb7fdc5a9738a5bb7499)), closes [#205](https://github.com/Moonofweisheng/wot-design-uni/issues/205) +* 🐛 修复picker选择器在APP端包装二维数组逻辑错误导致无法实现多列选择器的问题 ([ed5d7ac](https://github.com/Moonofweisheng/wot-design-uni/commit/ed5d7ace2050f5ae7541c8fd2ec395de56fa73cc)) +* 🐛 移除文件移动时volar变更文件路径错误导致.vue文件中多出的无用路径字符串 ([1f8f8ae](https://github.com/Moonofweisheng/wot-design-uni/commit/1f8f8ae2bfb2b13a6b6fcd6435a2d75f47d0e775)) + +### [1.2.6](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.5...v1.2.6) (2024-03-27) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Picker 未选择时显示第一列值的问题 ([21839e0](https://github.com/Moonofweisheng/wot-design-uni/commit/21839e0caf170248f454d80645bc3aa2f3ae2cdb)) +* 🐛 修复DatetimePicker区间模式未选值时显示占位符错误的问题 ([37350ee](https://github.com/Moonofweisheng/wot-design-uni/commit/37350ee5234a0f30debd22d33fb168415ec4e72d)) + +### [1.2.5](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.4...v1.2.5) (2024-03-24) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复textarea在支付宝小程序上清除按钮点击热区失效的问题 ([84662f2](https://github.com/Moonofweisheng/wot-design-uni/commit/84662f254b85d3b554113c9ba4f73ca695596fe9)) + +### [1.2.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.3...v1.2.4) (2024-03-23) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复textarea、input的label存在icon时高度异常的问题 ([e487ced](https://github.com/Moonofweisheng/wot-design-uni/commit/e487ced1624ce9ba35b29537481302e07050612c)) +* 🐛 修复textarea无法换行的问题 ([25bd564](https://github.com/Moonofweisheng/wot-design-uni/commit/25bd56485508ae8b3dfffd13d47c306fbf42d65e)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整组件库基于vite配置自动引入组件的介绍 ([2d23607](https://github.com/Moonofweisheng/wot-design-uni/commit/2d2360706fbe2a5d4024ceebd82720014c6b1ea2)) +* ✏️ 文档推荐用户从wot-design-uni.cn迁移至wot-design-uni.gitee.io ([72a567c](https://github.com/Moonofweisheng/wot-design-uni/commit/72a567c44867f049c1526f5d682e46155047516a)) +* ✏️ 增加steps设置激活项的介绍 ([7c0d36c](https://github.com/Moonofweisheng/wot-design-uni/commit/7c0d36c36214517d959aa27e284aacf59d2b074b)) + +### [1.2.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.2...v1.2.3) (2024-03-20) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复部分外部链接不可用的问题 ([e2fb515](https://github.com/Moonofweisheng/wot-design-uni/commit/e2fb5155c40e58e44920329cdfb4f2391bb81970)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 修复 checkbox 单独使用时无法切换选中状态的问题 ([#198](https://github.com/Moonofweisheng/wot-design-uni/issues/198)) ([4a20219](https://github.com/Moonofweisheng/wot-design-uni/commit/4a2021908f0d63ca398660950609bd5f4a7ca9b9)) + +### [1.2.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.1...v1.2.2) (2024-03-19) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复picker选择器绑定值value值为0时无法生效的问题 ([d4de4ba](https://github.com/Moonofweisheng/wot-design-uni/commit/d4de4ba93824905840adc49e2d85d7168c9fd48e)), closes [#195](https://github.com/Moonofweisheng/wot-design-uni/issues/195) + +### [1.2.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.2.0...v1.2.1) (2024-03-19) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复部分可为null的props丢失null类型的问题 ([604e9f3](https://github.com/Moonofweisheng/wot-design-uni/commit/604e9f3810f38637ee1a7640e642790719cd9d3f)) + +## [1.2.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.10...v1.2.0) (2024-03-19) + + +### ✨ Features | 新功能 + +* ✨ typescript类型支持增强 ([#192](https://github.com/Moonofweisheng/wot-design-uni/issues/192)) ([201e7a1](https://github.com/Moonofweisheng/wot-design-uni/commit/201e7a12b9c4023e35ff9540f5da09794ea3c6f7)) + +### [1.1.10](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.9...v1.1.10) (2024-03-15) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复tabbar默认shape固定底部安全区无遮挡的问题 ([03048bb](https://github.com/Moonofweisheng/wot-design-uni/commit/03048bba17966e13e864c4a3d29047986778d586)) + +### [1.1.9](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.8...v1.1.9) (2024-03-11) + + +### ✏️ Documentation | 文档 + +* ✏️ 推荐使用托管在gitee上的文档地址 ([24ae6ca](https://github.com/Moonofweisheng/wot-design-uni/commit/24ae6cac05b150ff8da3ab47cc4bb3eeac48a369)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复textarea在微信小程序平台下部分安卓手机maxlength不生效的问题 ([512e63b](https://github.com/Moonofweisheng/wot-design-uni/commit/512e63b0ad30ff7acb14fffbb124dba59e34d450)) + +### [1.1.8](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.7...v1.1.8) (2024-03-10) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复transitiont打开后立即关闭时无法关闭的问题 ([c1cebf6](https://github.com/Moonofweisheng/wot-design-uni/commit/c1cebf6de0b1c6a2f8a32aa4815adc8c0466eeca)) + +### [1.1.7](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.6...v1.1.7) (2024-03-09) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复badge组件多出一个script标签的问题 ([e1819b4](https://github.com/Moonofweisheng/wot-design-uni/commit/e1819b4dbcb3dc1244bbe5641cdb538d0ad9c5e7)), closes [#188](https://github.com/Moonofweisheng/wot-design-uni/issues/188) + +### [1.1.6](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.5...v1.1.6) (2024-03-06) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Tabar为round类型时开启safeAreaInsetBottom是样式异常的问题 ([aa9ae88](https://github.com/Moonofweisheng/wot-design-uni/commit/aa9ae88f35236dec15635bd8e4fd0c7023e5fb70)) + +### [1.1.5](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.4...v1.1.5) (2024-03-05) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Search、Input等组件clear事件在value变更前触发的问题 ([8d113a2](https://github.com/Moonofweisheng/wot-design-uni/commit/8d113a285dbffa705e44a31ad05e48f36978c46c)), closes [#185](https://github.com/Moonofweisheng/wot-design-uni/issues/185) + + +### ✏️ Documentation | 文档 + +* ✏️ 首页增加常见问题的入口 ([fd7a7dd](https://github.com/Moonofweisheng/wot-design-uni/commit/fd7a7dd287226f670cf02db9cf2856c9ebe52498)) + +### [1.1.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.3...v1.1.4) (2024-03-04) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Navbar显示下边框时fixed不生效的问题 ([18c09d8](https://github.com/Moonofweisheng/wot-design-uni/commit/18c09d87384699c044a9f84838b17f74eaff77b3)) + + +### ✏️ Documentation | 文档 + +* ✏️ 增加支付宝小程序styleIsolation配置的文档 ([68d1262](https://github.com/Moonofweisheng/wot-design-uni/commit/68d1262ed5ac6ccf8c078ba089e045739c2275e8)) + +### [1.1.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.2...v1.1.3) (2024-03-03) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档中增加提问的智慧和toast、message组件的常见问题 ([2fdd4b1](https://github.com/Moonofweisheng/wot-design-uni/commit/2fdd4b1c050ed8805637ec0b082ca4d20c3c17b6)) + +### [1.1.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.1...v1.1.2) (2024-03-01) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Button会存在一个默认border的问题 ([#182](https://github.com/Moonofweisheng/wot-design-uni/issues/182)) ([3714ffb](https://github.com/Moonofweisheng/wot-design-uni/commit/3714ffb0f1de55f3eae5a36b9235bdbc518b0738)) + +### [1.1.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.1.0...v1.1.1) (2024-02-29) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 ImgCropper 在钉钉小程序平台无法展示所选图片的问题 ([db8d029](https://github.com/Moonofweisheng/wot-design-uni/commit/db8d029db3a227cd062c6e9d7c14eb9d0f3dae87)) +* 🐛 修复微信小程序css使用标签选择器抛出警告的问题(wd-img) ([#181](https://github.com/Moonofweisheng/wot-design-uni/issues/181)) ([ee3da01](https://github.com/Moonofweisheng/wot-design-uni/commit/ee3da016439d68f1d9d061bb1b1cbd10f2863aa4)) + +## [1.1.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v1.0.0...v1.1.0) (2024-02-27) + + +### ✨ Features | 新功能 + +* ✨ Button 支持微信小程序chooseavatar和agreeprivacyauthorization事件 ([177c726](https://github.com/Moonofweisheng/wot-design-uni/commit/177c726e0d0f9bc435f815af2e4fc8e917ef144d)) +* ✨ DropDown组件支持钉钉小程序 ([924c65b](https://github.com/Moonofweisheng/wot-design-uni/commit/924c65b4f66e7d1ff75aa2bcb5c6cbe4e045fb92)) +* ✨ Slider 支持钉钉小程序 ([bea7a49](https://github.com/Moonofweisheng/wot-design-uni/commit/bea7a499edc3e0681ec11dd26333d8a969dd9b0e)) + + +### ✏️ Documentation | 文档 + +* ✏️ 新增支持钉钉小程序平台 ([9525f23](https://github.com/Moonofweisheng/wot-design-uni/commit/9525f23f207af47c10c37614279b8318500e3ede)) +* ✏️ 修复Segment演示demo在钉钉小程序平台展示异常的问题 ([4fbe556](https://github.com/Moonofweisheng/wot-design-uni/commit/4fbe5569b3cb1761c2ef7847a4abc1721d3ed220)) +* ✏️ 支持平台的介绍中新增支付宝小程序 ([320e4dd](https://github.com/Moonofweisheng/wot-design-uni/commit/320e4dd2e102146b8a466d378c8356286faeb28c)) + +## [1.0.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.3.1...v1.0.0) (2024-02-26) + + +### ✨ Features | 新功能 + +* ✨ 支持支付宝小程序并提供ConfigProvider的便利性优化 ([e1baca3](https://github.com/Moonofweisheng/wot-design-uni/commit/e1baca3ce5201c38e6b0aee5e6cb7099ecba9772)) +* ✨ sticky组件支持支付宝平台 ([3805882](https://github.com/Moonofweisheng/wot-design-uni/commit/3805882b8b1f8ad165d8cda528fa0b5cf3f96c27)) + + +### ✏️ Documentation | 文档 + +* ✏️ 演示demo增加组件库版本号的显示 ([19a00e3](https://github.com/Moonofweisheng/wot-design-uni/commit/19a00e34652bf672f7fdfd28899625dac977a1b6)) + +### [0.3.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.3.0...v0.3.1) (2024-02-26) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复大尺寸checkbox选中样式异常的问题 ([413cf3b](https://github.com/Moonofweisheng/wot-design-uni/commit/413cf3b6a04358bca5284704d750cfd224c1d277)) + +## [0.3.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.23...v0.3.0) (2024-02-21) + + +### ✨ Features | 新功能 + +* ✨ 调整Button 按钮样式受主色控制并优化幽灵按钮显示效果 ([5f0d1f5](https://github.com/Moonofweisheng/wot-design-uni/commit/5f0d1f5f8bac81435d248348ec5823e82d35f7a4)) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复select-picker组件绑定值描述错误的问题 ([b287111](https://github.com/Moonofweisheng/wot-design-uni/commit/b2871114311656580ade25c25f0775d9246f32b7)), closes [#178](https://github.com/Moonofweisheng/wot-design-uni/issues/178) +* ✏️ 增加Button细边框幽灵按钮的使用说明 ([366c34b](https://github.com/Moonofweisheng/wot-design-uni/commit/366c34b69faedee4874221c604d1a6d5c8c1a8e0)) + +### [0.2.23](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.22...v0.2.23) (2024-02-07) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档支持显示友情链接 ([adac43f](https://github.com/Moonofweisheng/wot-design-uni/commit/adac43f2a1b300d4169249e108389b3a24ac9ffa)) +* ✏️ 友情链接支持来自线上配置 ([50896bb](https://github.com/Moonofweisheng/wot-design-uni/commit/50896bb475c5e1c5be42bdc22a56a47db9a51481)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 MessageBox 国际化不生效的问题 ([48404a1](https://github.com/Moonofweisheng/wot-design-uni/commit/48404a1ccccf9081cf3e9f9918e20cb58a6bb12f)), closes [#177](https://github.com/Moonofweisheng/wot-design-uni/issues/177) + +### [0.2.22](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.21...v0.2.22) (2024-01-30) + + +### ✏️ Documentation | 文档 + +* ✏️ 修正 Popover 组件文档中menuclick示例错误的问题 ([9df96e7](https://github.com/Moonofweisheng/wot-design-uni/commit/9df96e7629296bfba2b7f951b83508cc9e4a3935)) + +### [0.2.21](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.19...v0.2.21) (2024-01-28) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Dropdown 组件点击已展开项时无法关闭的问题 ([3846590](https://github.com/Moonofweisheng/wot-design-uni/commit/38465905e76b929a4d4af93dfe4ad9f31503b2ad)) + + +### ✨ Features | 新功能 + +* ✨ 支持国际化 ([#168](https://github.com/Moonofweisheng/wot-design-uni/issues/168)) ([ce9f192](https://github.com/Moonofweisheng/wot-design-uni/commit/ce9f19244e4d376c5104be2b89d57426bf722aee)) + +### [0.2.19](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.18...v0.2.19) (2024-01-25) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Input 绑定值无法为null的问题 ([f745e14](https://github.com/Moonofweisheng/wot-design-uni/commit/f745e14d10d64b643aa2f9c0170f72db3a99bb3e)) +* 🐛 修复多列、单复选选择器列更新时显示值未更新的问题 ([5ba45b9](https://github.com/Moonofweisheng/wot-design-uni/commit/5ba45b94b711e1129873fa29b243a616087ddc2a)), closes [#167](https://github.com/Moonofweisheng/wot-design-uni/issues/167) + +### [0.2.18](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.17...v0.2.18) (2024-01-24) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 CheckBox 组件的选中色无法应用到css变量的问题 ([febfb61](https://github.com/Moonofweisheng/wot-design-uni/commit/febfb61cab3b55a9f78920ed4715f05a232fb9f6)) +* 🐛 修复 Radio 组件的选中色无法应用到css变量的问题 ([b7e8631](https://github.com/Moonofweisheng/wot-design-uni/commit/b7e86314139cc6291e851c350219fce837f0f26e)) + +### [0.2.17](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.16...v0.2.17) (2024-01-23) + + +### ✨ Features | 新功能 + +* ✨ Form 表单组件提供开关控制是否model变化时重置提示信息 ([b9f46ba](https://github.com/Moonofweisheng/wot-design-uni/commit/b9f46ba0da85acd7312753a34dd0ad3f2f7379a2)), closes [#166](https://github.com/Moonofweisheng/wot-design-uni/issues/166) + +### [0.2.16](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.15...v0.2.16) (2024-01-21) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复文档中关于日期选择器最大日期描述错误的问题 ([bb76ce3](https://github.com/Moonofweisheng/wot-design-uni/commit/bb76ce332c6977cbae981790aa356bc27c0d9efa)) + +### [0.2.15](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.14...v0.2.15) (2024-01-15) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tab class类名属性错误的问题 ([dc87df7](https://github.com/Moonofweisheng/wot-design-uni/commit/dc87df70c7920d7cfabc571ace8beb2ce0dc2a7c)) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复 Upload 文档中before-upload钩子参数描述错误的问题 ([3ec7299](https://github.com/Moonofweisheng/wot-design-uni/commit/3ec7299ce724fce771b782f6110ba6ec29376291)) + +### [0.2.14](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.13...v0.2.14) (2024-01-14) + + +### ✨ Features | 新功能 + +* ✨ InputNumber步进器支持禁用输入框 ([933bce3](https://github.com/Moonofweisheng/wot-design-uni/commit/933bce314618956ff922daacef5b3594f36baf9b)) + +### [0.2.13](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.12...v0.2.13) (2024-01-12) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复演示文档刷新后指向localhost的问题 ([4cd8b16](https://github.com/Moonofweisheng/wot-design-uni/commit/4cd8b16bdf5ea8e93cff85396025844e9ebd031c)) + +### [0.2.12](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.11...v0.2.12) (2024-01-11) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tabbar 错误地抛出提示信息的问题 ([1c89ed0](https://github.com/Moonofweisheng/wot-design-uni/commit/1c89ed0a7158e79556e83c6aeb89bd1e93e4ea0d)) + + +### ✏️ Documentation | 文档 + +* ✏️ 增加 Circle 组件使用插槽的示例 ([6341594](https://github.com/Moonofweisheng/wot-design-uni/commit/6341594295732dac951c465d95537f36addbbf9c)) +* ✏️ 增加展示gitee的star徽标 ([1abf962](https://github.com/Moonofweisheng/wot-design-uni/commit/1abf962e37e27c1c1688bed2026c66022e63ce9b)) + +### [0.2.11](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.10...v0.2.11) (2024-01-09) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Overlay 类型声明错误的问题 ([930e59a](https://github.com/Moonofweisheng/wot-design-uni/commit/930e59a9b09aee535ec4c316e44ed3c0e31be628)) + + +### ✏️ Documentation | 文档 + +* ✏️ 提供托管在Giteee上的文档网站 ([6d62e9e](https://github.com/Moonofweisheng/wot-design-uni/commit/6d62e9e7ddda0bd9f51f2ad9e2893f1ed3709c63)) + +### [0.2.10](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.9...v0.2.10) (2024-01-08) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 col-picker 暗黑模式下标题文字颜色不清楚的问题 ([217ffb7](https://github.com/Moonofweisheng/wot-design-uni/commit/217ffb7dacb66b2017145c6e43fc8c873a6e9dd2)) +* 🐛 修复 steps 组件自定义图标显示异常的问题 ([0300f63](https://github.com/Moonofweisheng/wot-design-uni/commit/0300f63f35a5afcd278aba3b4ab721f498716d94)) +* 🐛 修复支付宝小程序暗黑模式下 Input、Textarea 组件显示异常的问题 ([8a9c344](https://github.com/Moonofweisheng/wot-design-uni/commit/8a9c344872bfcd81a73f71520f51b6b849f516d5)) + +### [0.2.9](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.8...v0.2.9) (2024-01-07) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 col-picker 组件首次打开指示线位置异常的问题 ([323fb00](https://github.com/Moonofweisheng/wot-design-uni/commit/323fb00942b7032b678d92ab03360dc7bb8faae8)) + +### [0.2.8](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.7...v0.2.8) (2024-01-06) + + +### ✏️ Documentation | 文档 + +* ✏️ 展示netlify支持 ([410b180](https://github.com/Moonofweisheng/wot-design-uni/commit/410b180ec9c660ab9c49d6eb203d53c35919c512)) + +### [0.2.7](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.5...v0.2.7) (2024-01-06) + + +### ✨ Features | 新功能 + +* ✨ 优化provide/inject的使用方式 ([892f467](https://github.com/Moonofweisheng/wot-design-uni/commit/892f4675a848ee3d4c965c36d5c4034aa5806b6d)) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档网站增加自定义footer ([dd8bc00](https://github.com/Moonofweisheng/wot-design-uni/commit/dd8bc003eedcdc43cdd60bb896c897d108dd4a51)) +* ✏️ 修复vitepress自定义footer展示错误的问题 ([c0701d5](https://github.com/Moonofweisheng/wot-design-uni/commit/c0701d584e5d9b84e6d913dd23666b80d803407b)) + +### [0.2.6](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.5...v0.2.6) (2024-01-06) + + +### ✨ Features | 新功能 + +* ✨ 优化provide/inject的使用方式 ([892f467](https://github.com/Moonofweisheng/wot-design-uni/commit/892f4675a848ee3d4c965c36d5c4034aa5806b6d)) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档网站增加自定义footer ([dd8bc00](https://github.com/Moonofweisheng/wot-design-uni/commit/dd8bc003eedcdc43cdd60bb896c897d108dd4a51)) + +### [0.2.5](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.4...v0.2.5) (2023-12-28) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Form 导入FormRules、ErrorMessage时未指定为type的问题 ([c88c84e](https://github.com/Moonofweisheng/wot-design-uni/commit/c88c84e8b71fc2404643a623c28f4953ffe36e71)) +* 🐛 修复 SwipeAction 组件在H5端导致页面无法上下滚动的问题 ([1f68ce1](https://github.com/Moonofweisheng/wot-design-uni/commit/1f68ce13c8109dd92ca4bf055f66aa8dff24c83d)), closes [#149](https://github.com/Moonofweisheng/wot-design-uni/issues/149) + +### [0.2.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.3...v0.2.4) (2023-12-27) + +### [0.2.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.2...v0.2.3) (2023-12-27) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复动态表单演示页面标题错误的问题 ([7c65359](https://github.com/Moonofweisheng/wot-design-uni/commit/7c65359c88614ae53c4800d0946d8e09ef547a26)) + +### [0.2.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.1...v0.2.2) (2023-12-26) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 移除 Swiper 的list中不必填的属性 ([672f680](https://github.com/Moonofweisheng/wot-design-uni/commit/672f680051009edd23a67d4e32722839f519d9ba)) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复 Textarea 文档示例错误的问题 ([7da3a4c](https://github.com/Moonofweisheng/wot-design-uni/commit/7da3a4cdfe35f87193f57139de0819130424d6ea)) +* ✏️ 优化 Form 相关组件的文档介绍 ([6a0a7a7](https://github.com/Moonofweisheng/wot-design-uni/commit/6a0a7a730fcd8904609f8a48339e1079baf3e9be)) + +### [0.2.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.2.0...v0.2.1) (2023-12-25) + + +### ✏️ Documentation | 文档 + +* ✏️ PassowrdInput 密码输入框组件增加文档标题 ([cccc4cc](https://github.com/Moonofweisheng/wot-design-uni/commit/cccc4cc0d4952f594e5387bad32a7248009ebd9e)) + +## [0.2.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.70...v0.2.0) (2023-12-24) + + +### ✨ Features | 新功能 + +* ✨ 新增 Form 表单组件 ([c8086d6](https://github.com/Moonofweisheng/wot-design-uni/commit/c8086d624c01bfbae3b9dfc324d33d6bfe46e041)) +* ✨ 新增 PasswordInput 密码输入框 ([b8c68f9](https://github.com/Moonofweisheng/wot-design-uni/commit/b8c68f92f7ddbf3ae2a58bf36593a0cd0340f225)) +* ✨ 新增 textarea 文本域组件 ([ed56bcd](https://github.com/Moonofweisheng/wot-design-uni/commit/ed56bcdb0337c198e8834182d47d1cd83513091d)) +* ✨ 增加父子组件 Provide/Inject 的hooks ([eb971d4](https://github.com/Moonofweisheng/wot-design-uni/commit/eb971d4e86733b0337de0c63f26b373424a842f0)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Input 组件在支付宝平台存在一个默认padding的问题 ([921c906](https://github.com/Moonofweisheng/wot-design-uni/commit/921c90606e05ea1b29cdee39cde7858907b2cd4d)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整主题定制相关文档 ([2d5b1af](https://github.com/Moonofweisheng/wot-design-uni/commit/2d5b1af2787d33ec24eb6e6ab9db6ff941d80c2b)) +* ✏️ 增加 textarea 文本域组件功能的迁移说明 ([61ebc7d](https://github.com/Moonofweisheng/wot-design-uni/commit/61ebc7db1e1db3e8634a87c24fae0869f4b6f17b)) +* ✏️ PasswordInput 密码输入框文档增加版本介绍 ([56ccf60](https://github.com/Moonofweisheng/wot-design-uni/commit/56ccf6005e502237e1ff45b5b52e852b402a10c9)) + +### [0.1.70](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.69...v0.1.70) (2023-12-23) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 picker 的列value为0时回显异常的问题 ([2ba93c3](https://github.com/Moonofweisheng/wot-design-uni/commit/2ba93c328c54c41b6e1e9ead946e9c46e278ebb9)), closes [#155](https://github.com/Moonofweisheng/wot-design-uni/issues/155) + +### [0.1.69](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.68...v0.1.69) (2023-12-13) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Notify 使用文档错误的问题 ([3fe6423](https://github.com/Moonofweisheng/wot-design-uni/commit/3fe6423c9c6727eaa3655029bf862b9be182b70b)), closes [#148](https://github.com/Moonofweisheng/wot-design-uni/issues/148) + +### [0.1.68](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.67...v0.1.68) (2023-12-07) + + +### ✏️ Documentation | 文档 + +* ✏️ 增加 Gap 组件的文档 ([9e3a8c1](https://github.com/Moonofweisheng/wot-design-uni/commit/9e3a8c1506f9ef93f9f0155ac948c8bc4d215ea8)) + +### [0.1.67](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.66...v0.1.67) (2023-12-06) + + +### ✨ Features | 新功能 + +* ✨ 新增 Gap 间隔槽组件 ([#147](https://github.com/Moonofweisheng/wot-design-uni/issues/147)) ([fa7cd16](https://github.com/Moonofweisheng/wot-design-uni/commit/fa7cd163810cbcd63fc2a99a6a92ccd8a803b2f1)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Picker组件v-model数据不更新的问题 ([e60f475](https://github.com/Moonofweisheng/wot-design-uni/commit/e60f47538130625a8c8f93e3a6795b7e71588002)), closes [#146](https://github.com/Moonofweisheng/wot-design-uni/issues/146) + +### [0.1.66](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.65...v0.1.66) (2023-12-01) + + +### ✨ Features | 新功能 + +* ✨ Tag 组件type增加属性值default ([#143](https://github.com/Moonofweisheng/wot-design-uni/issues/143)) ([48f0e4b](https://github.com/Moonofweisheng/wot-design-uni/commit/48f0e4b3c484755a0da4eb11fa814c6b52be74b1)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 ActionSheet 组件设置custom-class无效的问题 ([1e5bcf7](https://github.com/Moonofweisheng/wot-design-uni/commit/1e5bcf7d0a8be66b80de81a0359d3fb429fdf52d)) + +### [0.1.65](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.64...v0.1.65) (2023-11-29) + + +### ✨ Features | 新功能 + +* ✨ 新增 NumberKeyboard 数字键盘组件 ([#139](https://github.com/Moonofweisheng/wot-design-uni/issues/139)) ([7bb4455](https://github.com/Moonofweisheng/wot-design-uni/commit/7bb4455c6d9eca179ba174b8ad0da6ae8a09defc)) +* Tag新增类型标签添加slot ([7977dbb](https://github.com/Moonofweisheng/wot-design-uni/commit/7977dbbe3565eb06b700f2c55a31803647760fa9)) + + +### ✏️ Documentation | 文档 + +* ✏️ 新增关于 Tag 组件的add插槽的介绍 ([537fa5e](https://github.com/Moonofweisheng/wot-design-uni/commit/537fa5ebf8dcdc14ee12fc1f1e5a5f829653a14a)) + +### [0.1.64](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.63...v0.1.64) (2023-11-25) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复DateTimePicker标题展示和模式为区间时before-confirm参数错误的问题 ([7bcd12b](https://github.com/Moonofweisheng/wot-design-uni/commit/7bcd12ba633224dd42b160f0b43fadc99ac76707)) + +### [0.1.63](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.62...v0.1.63) (2023-11-23) + + +### ✨ Features | 新功能 + +* ✨ CountDown 倒计时组件支持custom-class和custom-style ([dd60d6d](https://github.com/Moonofweisheng/wot-design-uni/commit/dd60d6df855cc49eba36beb7bcfb9eeb96ed0c82)) +* ✨ Search 搜索组件支持自动聚焦和清空后自动聚焦 ([2e3ab63](https://github.com/Moonofweisheng/wot-design-uni/commit/2e3ab63d3dad582c44d9d9f8d2b57e21ee22f380)) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复文档中config-provider等页面的错误 ([f71e641](https://github.com/Moonofweisheng/wot-design-uni/commit/f71e6412e770f2043e4cb9a35950a68aacf0e542)) + +### [0.1.62](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.61...v0.1.62) (2023-11-22) + + +### ✨ Features | 新功能 + +* ✨ Badge 徽标组件支持控制是否显示0值 ([65cfb2c](https://github.com/Moonofweisheng/wot-design-uni/commit/65cfb2ca15c29783f6de48de0bda4ddc3d43664a)) +* ✨ Upload 上传组件支持h5端获取文件后缀名 ([59fe70c](https://github.com/Moonofweisheng/wot-design-uni/commit/59fe70c0d0c55c7ecca26902b41599be94e34fe3)) + + +### ✏️ Documentation | 文档 + +* ✏️ 优化 Upload 文档中关于云存储内容的样式 ([607ce05](https://github.com/Moonofweisheng/wot-design-uni/commit/607ce05100ffef9c5c98b503e580a718551f5552)) + +### [0.1.61](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.60...v0.1.61) (2023-11-20) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复 Tag 标签组件文档错乱的问题 ([502203b](https://github.com/Moonofweisheng/wot-design-uni/commit/502203bebf08d7e6851b8dd2f94768f6c620da26)) +* ✏️ ImgCropper 组件演示页面增加微信小程序隐私协议弹框 ([3af9246](https://github.com/Moonofweisheng/wot-design-uni/commit/3af9246d1f1876ba3c83f6829a9716ad37ae5829)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Calendar 日历组件存在未定义属性导致警告的问题 ([d0d3152](https://github.com/Moonofweisheng/wot-design-uni/commit/d0d3152a5ca1a3e06135b12f4565211258619d1f)) +* 🐛 修复 CountDown 倒计时组件文档手动控制示例错误的问题 ([3c373fb](https://github.com/Moonofweisheng/wot-design-uni/commit/3c373fbf3af02c8a73ddd3a4063f9408ec4f33ff)) +* 🐛 修复 SelectPicker 组件loading状态仍可以滚动的问题 ([c5a1bff](https://github.com/Moonofweisheng/wot-design-uni/commit/c5a1bfff576aad8a6f03288a6a12a8ed24f776f2)) + + +### ✨ Features | 新功能 + +* ✨ Upload 上传组件支持上传至云存储 ([523a6be](https://github.com/Moonofweisheng/wot-design-uni/commit/523a6be40b065c4cc28cfe81fdcb200142d9a455)) + +### [0.1.60](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.59...v0.1.60) (2023-11-20) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复 CountDown 倒计时组件默认slot用法的介绍错误的问题 ([2fbb88f](https://github.com/Moonofweisheng/wot-design-uni/commit/2fbb88fcd9fe21de09637d48149278d9aef5e1d9)) + +### [0.1.59](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.58...v0.1.59) (2023-11-19) + +### [0.1.58](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.57...v0.1.58) (2023-11-19) + + +### ✨ Features | 新功能 + +* ✨ 新增 CountDown 倒计时组件 ([a805d04](https://github.com/Moonofweisheng/wot-design-uni/commit/a805d04827600525c08fbc1848cb3a524b48e81a)) +* ✨ CountDown 倒计时组件支持小程序 ([22f249a](https://github.com/Moonofweisheng/wot-design-uni/commit/22f249ae5bdedea1ecebfe31350c7b5a1e394f2e)) + +### [0.1.57](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.56...v0.1.57) (2023-11-17) + + +### ✨ Features | 新功能 + +* ✨ 新增 Fab 悬浮动作按钮组件 ([3c526fe](https://github.com/Moonofweisheng/wot-design-uni/commit/3c526feb102ccf17da0678a6e1c004bb82d57f0f)) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复 Cell 组件点击反馈的介绍错误的问题 ([9096d81](https://github.com/Moonofweisheng/wot-design-uni/commit/9096d81f514348d6103f33590387d0406b217198)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Table 表格组件数字英文换行失效的问题 ([47ac339](https://github.com/Moonofweisheng/wot-design-uni/commit/47ac3390cb58d250129a9db6ade8d90f980855a1)) + +### [0.1.56](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.55...v0.1.56) (2023-11-12) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tabbar 标签栏组件 bordered 属性无效的问题 ([69c2656](https://github.com/Moonofweisheng/wot-design-uni/commit/69c265638c6fc36a1479a37c052a572da333006f)) + +### [0.1.55](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.54...v0.1.55) (2023-11-12) + + +### 🐛 Bug Fixes | Bug 修复 + +* 修正README.md 中[贡献指南]链接错误,跳转失败的问题。 ([071de88](https://github.com/Moonofweisheng/wot-design-uni/commit/071de88f98fa90492032193606941fbcdfe9283d)) + + +### ✨ Features | 新功能 + +* ✨ Swiper 轮播图组件增加imageMode属性支持自定义图片裁剪缩放模式 ([4205c01](https://github.com/Moonofweisheng/wot-design-uni/commit/4205c0149d3224e318ef21563e96f0a843ad13bc)) + +### [0.1.54](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.53...v0.1.54) (2023-11-10) + + +### 🐛 Bug Fixes | Bug 修复 + +* 修正ColPicker多列选择器v-model类型提示使用Record[]实际上的数据是单维数组的问题 ([c490ac6](https://github.com/Moonofweisheng/wot-design-uni/commit/c490ac607e6f9eb7207b90943b83ce1696a30fd4)) + +### [0.1.53](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.52...v0.1.53) (2023-11-09) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Input 输入框组件包含无用显示内容的问题 ([13a3106](https://github.com/Moonofweisheng/wot-design-uni/commit/13a3106055d66083d640912bfff67f2e08781f03)) + +### [0.1.52](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.51...v0.1.52) (2023-11-09) + + +### ✨ Features | 新功能 + +* ✨ Input绑定值为null时的警告从error改为warn ([70f1407](https://github.com/Moonofweisheng/wot-design-uni/commit/70f1407eec057668da0117c9861b523ab667da70)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Badge 徽标组件暗黑模式下边框颜色未兼容的问题 ([c0a0b5a](https://github.com/Moonofweisheng/wot-design-uni/commit/c0a0b5aaea238f144978a3a9b2ab6db202dfdc21)), closes [#115](https://github.com/Moonofweisheng/wot-design-uni/issues/115) + +### [0.1.51](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.50...v0.1.51) (2023-11-06) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复引入错误依赖的问题 ([15bc876](https://github.com/Moonofweisheng/wot-design-uni/commit/15bc876a3026319c88ce4b757593243f9869ce39)) + +### [0.1.50](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.49...v0.1.50) (2023-11-06) + + +### ✨ Features | 新功能 + +* ✨ SidebarItem、TabbarItem、GridItem组件增加徽标自定义属性badge-props ([7143098](https://github.com/Moonofweisheng/wot-design-uni/commit/71430989bff81a137fc5199eeeefe0a4da3ce31d)) + +### [0.1.49](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.48...v0.1.49) (2023-11-05) + + +### ✨ Features | 新功能 + +* ✨ 新增 Sidebar 侧边栏组件 ([#113](https://github.com/Moonofweisheng/wot-design-uni/issues/113)) ([d189378](https://github.com/Moonofweisheng/wot-design-uni/commit/d189378a02aeb36c275218358849a187e88ce687)) + +### [0.1.48](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.47...v0.1.48) (2023-11-04) + + +### ✨ Features | 新功能 + +* ✨ Input 输入框增加支持微信小程序原生属性always-embed ([57d00ec](https://github.com/Moonofweisheng/wot-design-uni/commit/57d00ececd9849a2d21f59fc863b6ad8933419d8)) + +### [0.1.47](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.46...v0.1.47) (2023-11-02) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复 Image 图片组件演示demo样式不友好的问题 ([cbdab19](https://github.com/Moonofweisheng/wot-design-uni/commit/cbdab1959efff642a60a351ffd6454dcd173b9a4)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Input 组件为textarea类型时show-confirm-bar不生效的问题 ([eebec8a](https://github.com/Moonofweisheng/wot-design-uni/commit/eebec8a74fa9399bfd305cadb1a9b6a526e88568)) +* 🐛 img 预览demo布局错位 ([0397809](https://github.com/Moonofweisheng/wot-design-uni/commit/0397809d81010e109c238eefea56c82bd06a50cb)) + + +### ✨ Features | 新功能 + +* ✨ 图片添加圆角大小设置 ([98edaed](https://github.com/Moonofweisheng/wot-design-uni/commit/98edaed6cb1c81b9ed6e05561814aaa51b31b2b3)) +* ✨ Badge 徽标组件增加customStyle自定义样式 ([d194106](https://github.com/Moonofweisheng/wot-design-uni/commit/d194106f07fb46f6a979967ba327dee1b41ca70e)) + +### [0.1.46](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.45...v0.1.46) (2023-11-02) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tabs 组件在微信小程序端有概率不绘制下划线的问题 ([d70ec65](https://github.com/Moonofweisheng/wot-design-uni/commit/d70ec65998d1ca1fbdbd3b4ef1af4a292a597f55)) + +### [0.1.45](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.44...v0.1.45) (2023-11-01) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Switch 开关组件自定义大小无效的问题 ([15ffa1f](https://github.com/Moonofweisheng/wot-design-uni/commit/15ffa1f9172d3c11722c71ca370c1016e25f2b41)) + +### [0.1.44](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.43...v0.1.44) (2023-11-01) + + +### ✨ Features | 新功能 + +* ✨ 使用 useQueue hook替换clickOut实现关闭多个气泡等组件的功能 ([3a24999](https://github.com/Moonofweisheng/wot-design-uni/commit/3a24999c1e28414b12806cad3c3bc6f7a445593f)) + + +### ✏️ Documentation | 文档 + +* ✏️ 优化演示项目首页样式 ([e98f30e](https://github.com/Moonofweisheng/wot-design-uni/commit/e98f30e0125e287d2bc5cdbcfff69a35cb7436d8)) + +### [0.1.43](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.42...v0.1.43) (2023-10-31) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tooltip 文字提示组件微信端关闭按钮样式错误的问题 ([ec1b949](https://github.com/Moonofweisheng/wot-design-uni/commit/ec1b9490b9517d0e4ebe4a5130a418a684b1a589)) + +### [0.1.42](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.41...v0.1.42) (2023-10-31) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Popover、Tooltip 组件展开过程中无法遮盖图片的问题 ([db009c1](https://github.com/Moonofweisheng/wot-design-uni/commit/db009c1229413f7ecc446e3e3a1db4d7678268b3)) + +### [0.1.41](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.40...v0.1.41) (2023-10-31) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Popover、Tooltip 组件展开切换动画不流畅的问题 ([c765b08](https://github.com/Moonofweisheng/wot-design-uni/commit/c765b085a6018433bb95fd7647c091393e2e6e7c)), closes [#101](https://github.com/Moonofweisheng/wot-design-uni/issues/101) + +### [0.1.40](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.39...v0.1.40) (2023-10-30) + + +### ✏️ Documentation | 文档 + +* ✏️ 移除文档中 Search 组件未支持的插槽 ([325e140](https://github.com/Moonofweisheng/wot-design-uni/commit/325e14046de38eb7c4e792a64a290c9997af5cba)) + +### [0.1.39](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.38...v0.1.39) (2023-10-29) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 DateTimePicker 日期选择器组件双向绑定错误的问题 ([1b13873](https://github.com/Moonofweisheng/wot-design-uni/commit/1b13873cef4b7c760698abce7dca500cd548c660)) + + +### ✨ Features | 新功能 + +* ✨ 新增 Table 表格组件 ([#98](https://github.com/Moonofweisheng/wot-design-uni/issues/98)) ([c8395f8](https://github.com/Moonofweisheng/wot-design-uni/commit/c8395f8a7e1ad041b003672081b715a7c755adc1)) +* ✨ Collapse 折叠面板组件增加分割线 ([adc6633](https://github.com/Moonofweisheng/wot-design-uni/commit/adc6633ad80b74e801a48a50917c9a2d378de9e0)), closes [#97](https://github.com/Moonofweisheng/wot-design-uni/issues/97) + +### [0.1.38](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.37...v0.1.38) (2023-10-25) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Upload 组件showLimitNum属性名拼写错误的问题 ([301cbff](https://github.com/Moonofweisheng/wot-design-uni/commit/301cbff20facf60b5645108972f22c8c14235f87)) + +### [0.1.37](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.36...v0.1.37) (2023-10-25) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复Tabbar组件类型警告的问题并优化文档相关链接 ([28c3cef](https://github.com/Moonofweisheng/wot-design-uni/commit/28c3cefdfc24f3f6f2669de5f93456a0db281f72)) +* ✏️ issues 模板更新 ([e34c5cd](https://github.com/Moonofweisheng/wot-design-uni/commit/e34c5cded1c850d22165c544a3c6a351701479ec)) + +### [0.1.36](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.35...v0.1.36) (2023-10-21) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tabs 指定name时双向绑定值仍为index的问题 ([756cad8](https://github.com/Moonofweisheng/wot-design-uni/commit/756cad8d6fcaefb0bf73f1cd2b9f4a24f5827b37)), closes [#91](https://github.com/Moonofweisheng/wot-design-uni/issues/91) + +### [0.1.35](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.34...v0.1.35) (2023-10-21) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tabs 组件通过name匹配时抛出异常的问题 ([b36fb1f](https://github.com/Moonofweisheng/wot-design-uni/commit/b36fb1f9def0aa99c521ffc20c6cae8074b56838)), closes [#91](https://github.com/Moonofweisheng/wot-design-uni/issues/91) + +### [0.1.34](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.33...v0.1.34) (2023-10-18) + + +### ✨ Features | 新功能 + +* ✨ SelectPicker 单复选选择器增加 scroll-into-view 属性支持定位到选中值 ([00b27c1](https://github.com/Moonofweisheng/wot-design-uni/commit/00b27c187438426471dab2ea15bc39d627773ab2)), closes [#68](https://github.com/Moonofweisheng/wot-design-uni/issues/68) + +### [0.1.33](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.32...v0.1.33) (2023-10-17) + + +### ✨ Features | 新功能 + +* ✨ 新增 Navbar 导航栏组件 ([#86](https://github.com/Moonofweisheng/wot-design-uni/issues/86)) ([5f66f71](https://github.com/Moonofweisheng/wot-design-uni/commit/5f66f713fae9e693fda4a472bc3e0767a1a6d3e8)) + +### [0.1.32](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.31...v0.1.32) (2023-10-16) + + +### ✨ Features | 新功能 + +* ✨ Tabs 组件调整为受控组件 ([b2a70bc](https://github.com/Moonofweisheng/wot-design-uni/commit/b2a70bc8f32800119924b29283db760af8a3ddb1)), closes [#82](https://github.com/Moonofweisheng/wot-design-uni/issues/82) + +### [0.1.31](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.30...v0.1.31) (2023-10-16) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复wd-popup组件的click-modal方法错误调用的问题 ([224e3e5](https://github.com/Moonofweisheng/wot-design-uni/commit/224e3e53f912a236e8e24f8afef64fa09f6a89aa)) + + +### ✏️ Documentation | 文档 + +* ✏️ 更新文档中关于组件数量的介绍 ([4fa7355](https://github.com/Moonofweisheng/wot-design-uni/commit/4fa7355e69a8bb32d1c9924cfc717caaf3345ee5)) +* ✏️ 增加 Overlay 遮罩层组件的文档 ([3bca4b6](https://github.com/Moonofweisheng/wot-design-uni/commit/3bca4b65c2bc7cd7f90e8b9513c619799f9a438b)) + +### [0.1.30](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.29...v0.1.30) (2023-10-14) + + +### ✨ Features | 新功能 + +* ✨ 新增 Overlay 遮罩层组件 ([41b2c4f](https://github.com/Moonofweisheng/wot-design-uni/commit/41b2c4f3677dcce9c3e18875b7a1ec32d02b3d6a)) +* ✨ Popup 弹出层组件增加 lock-scroll 属性 ([a6987e6](https://github.com/Moonofweisheng/wot-design-uni/commit/a6987e65da2f121d4e95c1b5cb271ed8f9a06e58)) + +### [0.1.29](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.28...v0.1.29) (2023-10-13) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Tabbar 标签栏组件固定底部时不设置placeholder情况下仍占据相应空间的问题 ([b58f9df](https://github.com/Moonofweisheng/wot-design-uni/commit/b58f9dfc8230e9427f2af658c8315c5b022b232c)) + +### [0.1.28](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.27...v0.1.28) (2023-10-12) + + +### ✏️ Documentation | 文档 + +* ✏️ 文档样式优化 ([f21ecb9](https://github.com/Moonofweisheng/wot-design-uni/commit/f21ecb9dfbfbf0afe49a760d24ebdc08e4799717)) + +### [0.1.27](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.26...v0.1.27) (2023-10-12) + + +### ⚡ Performance Improvements | 性能优化 + +* ⚡ Segmented 分段器组件兼容支付宝小程序 ([3fd57a6](https://github.com/Moonofweisheng/wot-design-uni/commit/3fd57a600b537b945a8224bb97344baa9b0929e0)) + + +### ✏️ Documentation | 文档 + +* ✏️ 调整文档中图片的CDN地址 ([f704568](https://github.com/Moonofweisheng/wot-design-uni/commit/f704568f0299acbd3cc2d88934bfa1641b6cc792)) +* ✏️ 修复文档中根节点错写为根结点的问题 ([6da4145](https://github.com/Moonofweisheng/wot-design-uni/commit/6da414503ceb8b6de680b10332af45dbbbe7229d)) + + +### ✨ Features | 新功能 + +* ✨ 新增 Tabbar 标签栏组件 ([aa0bf19](https://github.com/Moonofweisheng/wot-design-uni/commit/aa0bf194865e381af41f7afa18e46105e0c812a9)) +* ✨ Icon 组件新增图标并支持第三方iconfont ([bc241ac](https://github.com/Moonofweisheng/wot-design-uni/commit/bc241acfc103309f196f4c04e08288526a056073)) + +### [0.1.26](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.25...v0.1.26) (2023-10-10) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Slider 滑块组件双向滑动时右边滑块百分比计算错误的问题 ([92db0f2](https://github.com/Moonofweisheng/wot-design-uni/commit/92db0f2c7fb60b04e1562c55f6296b1b2b456144)) + +### [0.1.25](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.24...v0.1.25) (2023-10-10) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Silder 滑块组件双向滑动时自定义最大值小于100无法滚动到最大值的问题 ([a70afa4](https://github.com/Moonofweisheng/wot-design-uni/commit/a70afa43239bc233ee0250e26227dbacd5c7021b)), closes [#69](https://github.com/Moonofweisheng/wot-design-uni/issues/69) + +### [0.1.24](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.23...v0.1.24) (2023-10-10) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 优化 Badge 徽标组件超出max的显示并修复分段器组件错误依赖的问题 ([a48adc8](https://github.com/Moonofweisheng/wot-design-uni/commit/a48adc8395ab167bb88a7a647420b467d7e4c46d)) + +### [0.1.23](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.22...v0.1.23) (2023-09-28) + + +### ✨ Features | 新功能 + +* ✨ 增加 segmented 分段器组件 ([00f52c8](https://github.com/Moonofweisheng/wot-design-uni/commit/00f52c89e0aebc86f70aa8a7391ce1f17412333d)) + +### [0.1.22](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.21...v0.1.22) (2023-09-25) + + +### ✨ Features | 新功能 + +* ✨ 新增 Swiper 轮播图组件 ([cf9fe98](https://github.com/Moonofweisheng/wot-design-uni/commit/cf9fe9807efe863e786bc56eedf506647ac143d2)) + +### [0.1.21](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.20...v0.1.21) (2023-09-22) + +### [0.1.20](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.19...v0.1.20) (2023-09-20) + + +### ✏️ Documentation | 文档 + +* ✏️ 恢复展示 Circle 组件的演示Demo ([c2cba05](https://github.com/Moonofweisheng/wot-design-uni/commit/c2cba056578593172998f03592652ab63ed23aef)) +* ✏️ 文档演示项目 Circle 页面文件调整为大写 ([fff8de8](https://github.com/Moonofweisheng/wot-design-uni/commit/fff8de8f8d5f829c5b054d863905a7bb116f45f4)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Circle 组件重复创建canvas导致警告的问题 ([6917201](https://github.com/Moonofweisheng/wot-design-uni/commit/69172016ba840458dd40755050929a8231fd4cd5)) +* 🐛 修复 Skeleton 骨架屏组件编译到APP端异常的问题([#52](https://github.com/Moonofweisheng/wot-design-uni/issues/52)) ([7a9a31b](https://github.com/Moonofweisheng/wot-design-uni/commit/7a9a31bd5db76419408a114fbed02c108b972049)) +* 🐛 修复 Tag 组件编译到微信小程序平台样式错误的问题([#53](https://github.com/Moonofweisheng/wot-design-uni/issues/53)) ([6aec241](https://github.com/Moonofweisheng/wot-design-uni/commit/6aec2414a384c68e7b4b09f57d028173be942f7b)) + +### [0.1.19](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.18...v0.1.19) (2023-09-20) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Cell、Grid 组件跳转方法在编译到H5端失效的问题([#49](https://github.com/Moonofweisheng/wot-design-uni/issues/49)) ([51425b1](https://github.com/Moonofweisheng/wot-design-uni/commit/51425b107a8b262bf9c1f0c7ee41bb8d56a12837)) + + +### ✨ Features | 新功能 + +* ✨ 新增 Circle 环形进度条组件,支持进度渐变动画 ([7c38a6f](https://github.com/Moonofweisheng/wot-design-uni/commit/7c38a6f03e76d91d82a80d2a4cdd875acfb7290b)) + +### [0.1.18](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.17...v0.1.18) (2023-09-19) + + +### ✏️ Documentation | 文档 + +* ✏️ README中增加展示 star-history ([e7cd794](https://github.com/Moonofweisheng/wot-design-uni/commit/e7cd794201435ae8109b562daf70def74ab4ac98)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 PickerView 组件选中框被遮盖的问题([#46](https://github.com/Moonofweisheng/wot-design-uni/issues/46)) ([a60440b](https://github.com/Moonofweisheng/wot-design-uni/commit/a60440b8c52723e4c194b103e9b1b236a7cb29fe)) + +### [0.1.17](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.16...v0.1.17) (2023-09-19) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复 Slider 滑块组件最大值和最小值不生效的问题([#43](https://github.com/Moonofweisheng/wot-design-uni/issues/43)) ([0fa7f46](https://github.com/Moonofweisheng/wot-design-uni/commit/0fa7f46718e918007491a3d9494292a003924243)) + +### [0.1.16](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.15...v0.1.16) (2023-09-18) + + +### ✨ Features | 新功能 + +* ✨ 新增 WaterMark 水印组件 ([70d8c25](https://github.com/Moonofweisheng/wot-design-uni/commit/70d8c2546135fce1709edb0e1ba0c3b66c1e9e2e)) + +### [0.1.15](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.14...v0.1.15) (2023-09-18) + + +### ✏️ Documentation | 文档 + +* ✏️ 优化DateTimePicker组件关于time类型选择器绑定值格式的介绍 ([9e958c7](https://github.com/Moonofweisheng/wot-design-uni/commit/9e958c73f1d09ee0e02097e3ca8eeabfcc1bc59b)) + +### [0.1.14](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.13...v0.1.14) (2023-09-14) + + +### ✏️ Documentation | 文档 + +* ✏️ 增加QQ群沟通渠道 ([80efad9](https://github.com/Moonofweisheng/wot-design-uni/commit/80efad950613d65e7e65d305ad6efe7cd0e201d8)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复SelectPicker 单复选选择器单选可搜索状态搜索报错的问题([#38](https://github.com/Moonofweisheng/wot-design-uni/issues/38)) ([01cf01d](https://github.com/Moonofweisheng/wot-design-uni/commit/01cf01d46fbc4ac35f0c09e3db6f6d18b2d3455e)) + +### [0.1.13](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.12...v0.1.13) (2023-09-12) + + +### ✨ Features | 新功能 + +* ✨ Tabs组件增加animated属性支持切换动画 ([2572ea4](https://github.com/Moonofweisheng/wot-design-uni/commit/2572ea4c31f834bb9c8776322c24148ca2bda4e2)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Popover组件content属性必填警告的问题 ([4d8f8e6](https://github.com/Moonofweisheng/wot-design-uni/commit/4d8f8e640742b0588b91b0a5b82a062b976f8306)) + +### [0.1.12](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.11...v0.1.12) (2023-09-12) + + +### ✏️ Documentation | 文档 + +* ✏️ 修复文档中定制主题和反馈组件404的问题 ([c0302ad](https://github.com/Moonofweisheng/wot-design-uni/commit/c0302ada89ea15039ef516f4a425b5e18512c2d5)) +* ✏️ 修复Button组件文档中loading属性重复的问题 ([b26da5a](https://github.com/Moonofweisheng/wot-design-uni/commit/b26da5aba7d698adc75c3e1d143660a698ce5de8)) + +### [0.1.11](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.10...v0.1.11) (2023-09-08) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复文档中部分页面存在死链问题 ([b3e5cbe](https://github.com/Moonofweisheng/wot-design-uni/commit/b3e5cbef1116d9a356f7c9c18dffc1caec20ea22)) + +### [0.1.10](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.9...v0.1.10) (2023-09-08) + + +### ✏️ Documentation | 文档 + +* ✏️ 将驼峰命名的文档文件改为短横线命名便于爬虫爬取及搜索 ([497e991](https://github.com/Moonofweisheng/wot-design-uni/commit/497e991903559c9d62dcb1b00842ee377d70b445)) +* ✏️ 优化icon组件文档的体验,支持点击图标复制使用示例 ([ce0526b](https://github.com/Moonofweisheng/wot-design-uni/commit/ce0526b99dcd203d3f1081a8fd6a0551da88b9b8)) + +### [0.1.9](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.8...v0.1.9) (2023-09-08) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复npm包未配置主入口导致在使用Hbx创建的项目中通过npm安装编译警告的问题 ([fa95a0d](https://github.com/Moonofweisheng/wot-design-uni/commit/fa95a0d19b6e13157154405ddaa2525545bd9f7e)) + +### [0.1.8](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.7...v0.1.8) (2023-09-07) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复ActionSheet等组件在H5端隐藏导航栏或在tabbar页面高度计算错误的问题 ([39201cb](https://github.com/Moonofweisheng/wot-design-uni/commit/39201cbeddde1c7ea883ad331c0607bced755475)) +* 🐛 修复pmpm安装时ts导入类型信息在H5平台报错的问题 ([237c03c](https://github.com/Moonofweisheng/wot-design-uni/commit/237c03c6ae8d041c565ca6bb984765be4418f9e1)) + +### [0.1.7](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.6...v0.1.7) (2023-09-06) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复tabs组件change事件执行两次的问题 ([819059a](https://github.com/Moonofweisheng/wot-design-uni/commit/819059abe19fcf8f9646703fcc7a472b6ae62d4e)) + +### [0.1.6](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.5...v0.1.6) (2023-09-06) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Input组件内置变量showClear和showWordCount定义为props的问题 ([8021a35](https://github.com/Moonofweisheng/wot-design-uni/commit/8021a35ac9d05d549909531ff4f1c7325127833e)) +* 🐛 修复pnpm安装时运行到h5平台Ref导入报错的问题 ([39c68bf](https://github.com/Moonofweisheng/wot-design-uni/commit/39c68bf57720c1a12b99412c96e46b341cf536b5)) + +### [0.1.5](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.4...v0.1.5) (2023-09-05) + + +### ✏️ Documentation | 文档 + +* ✏️ 增加Stickty和Tabs组件关于H5端自定义导航栏的offset-top的处理方案 ([8a03c4d](https://github.com/Moonofweisheng/wot-design-uni/commit/8a03c4da64296e88a7b3aff5efed4ac04cd039b6)) + +### [0.1.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.3...v0.1.4) (2023-09-05) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复CollapseItem组件在微信小程序中展开/收起时指向图标未跟随转动的问题 ([7d0eeae](https://github.com/Moonofweisheng/wot-design-uni/commit/7d0eeae92f2f7b7664a23f7d548187ed8075d5b0)) + +### [0.1.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.2...v0.1.3) (2023-09-03) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复通过npm安装时配置自动导入Notify、Toast、Message组件无法打开的问题 ([f45b739](https://github.com/Moonofweisheng/wot-design-uni/commit/f45b73907227c25d9c2fd7b7f0018cc2ab5c47d1)) + +### [0.1.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.1...v0.1.2) (2023-09-03) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复部分js引入路径问题 ([67cdfae](https://github.com/Moonofweisheng/wot-design-uni/commit/67cdfaebf9478e286758b2ef851e1a44dc8565a6)) + +### [0.1.1](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.1.0...v0.1.1) (2023-09-02) + +## [0.1.0](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.14...v0.1.0) (2023-09-02) + + +### ✏️ Documentation | 文档 + +* ✏️ ConfigProvider组件演示页面增加手动切换暗黑模式 ([e5f55c7](https://github.com/Moonofweisheng/wot-design-uni/commit/e5f55c72fc1ed6e603f22e501d6cff9d8212a976)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Grid组件不展示border的问题 ([819bbbc](https://github.com/Moonofweisheng/wot-design-uni/commit/819bbbca6ab1c999096936da5e9d2dd664e480ce)) +* 🐛 修复MessageBox组件取消按钮不展示的问题 ([d8563d8](https://github.com/Moonofweisheng/wot-design-uni/commit/d8563d833d75b27d0c497c6c945fae8c00ef8dc7)) + +### [0.0.14](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.13...v0.0.14) (2023-09-02) + + +### ✨ Features | 新功能 + +* ✨ 优化缺省状态组件StautsTip,增加支持自定义url和图片大小 ([f463d32](https://github.com/Moonofweisheng/wot-design-uni/commit/f463d3258a954e64352df36004d34b0f12be9a8f)) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复util中addUnit无法处理有单位的字符串的问题 ([8967540](https://github.com/Moonofweisheng/wot-design-uni/commit/8967540ad0f3f0ad7426ee79571cfc4dee6c4d0c)) + + +### ✏️ Documentation | 文档 + +* ✏️ 完善和修复文档中不详细不正确的内容 ([d1b118e](https://github.com/Moonofweisheng/wot-design-uni/commit/d1b118ea78a797499f465269d3a838c0770d993a)) + +### [0.0.13](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.12...v0.0.13) (2023-09-01) + + +### ✏️ Documentation | 文档 + +* ✏️ 官网地址迁移至阿里云oss ([a98868a](https://github.com/Moonofweisheng/wot-design-uni/commit/a98868ae6213c7d7002e5a88893aabe1d0f5d11b)) + +### [0.0.12](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.11...v0.0.12) (2023-08-30) + +### [0.0.11](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.10...v0.0.11) (2023-08-30) + + +### ✨ Features | 新功能 + +* ✨ util工具类提供更好的类型提示 ([4fed439](https://github.com/Moonofweisheng/wot-design-uni/commit/4fed43926f49be6a86ebab54bb36a1a086df4ac6)) + +### [0.0.10](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.9...v0.0.10) (2023-08-27) + + +### ✨ Features | 新功能 + +* ✨ 新增Notify组件、演示demo、文档 ([#9](https://github.com/Moonofweisheng/wot-design-uni/issues/9)) ([996fc39](https://github.com/Moonofweisheng/wot-design-uni/commit/996fc39d708699214faf2e54224b8d38a8a706f7)) +* ✨ 新增Skeleton组件、演示demo、文档 ([#12](https://github.com/Moonofweisheng/wot-design-uni/issues/12)) ([a49e22c](https://github.com/Moonofweisheng/wot-design-uni/commit/a49e22c370163ec3c93bbeb360cc89b3b3c0abc0)) + +### [0.0.9](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.8...v0.0.9) (2023-08-25) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复Cell 单格组件 is-link 不触发 click ([ece5568](https://github.com/Moonofweisheng/wot-design-uni/commit/ece5568ecc03fd8470c2c02120b94c1ee27d55e7)) + +### [0.0.8](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.7...v0.0.8) (2023-08-24) + + +### ✨ Features | 新功能 + +* ✨ 演示项目新增用户隐私保护指引的处理 ([4dd7efe](https://github.com/Moonofweisheng/wot-design-uni/commit/4dd7efe4049c4c815ea1bc57a7fd1819055f10bc)) +* ✨ ActionSheet组件调整为使用v-model设置显示与隐藏 ([aa92332](https://github.com/Moonofweisheng/wot-design-uni/commit/aa92332f3913be000d1aef36a8aed7f34b736ad6)) + +### [0.0.7](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.6...v0.0.7) (2023-08-23) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复部分组件某些属性必填警告的问题 ([1b866c0](https://github.com/Moonofweisheng/wot-design-uni/commit/1b866c062eb7a4ab894d5b2ecd7b7b3fd50ef864)) + +### [0.0.6](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.5...v0.0.6) (2023-08-22) + +### [0.0.5](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.4...v0.0.5) (2023-08-22) + +### [0.0.4](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.3...v0.0.4) (2023-08-21) + + +### ✨ Features | 新功能 + +* ✨ Picker组件优化性能 ([24dd43f](https://github.com/Moonofweisheng/wot-design-uni/commit/24dd43f3a05b7b4ce6bb897219a215f8198e64ac)) + +### [0.0.3](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.2...v0.0.3) (2023-08-18) + +### [0.0.2](https://github.com/Moonofweisheng/wot-design-uni/compare/v0.0.1...v0.0.2) (2023-08-18) + + +### 🐛 Bug Fixes | Bug 修复 + +* 🐛 修复CheckBoxGroup组件的disabled属性作用在子组件上失效的问题 ([1bab820](https://github.com/Moonofweisheng/wot-design-uni/commit/1bab820c0335c89e099c597caa47af16bb998d83)) + +### 0.0.1 (2023-08-16) + + +### ✨ Features | 新功能 + +* ✨ 适配暗黑模式 ([f5946a4](https://github.com/Moonofweisheng/wot-design-uni/commit/f5946a4b7134fed161bc123d66485e7bc91cdc68)) +* ✨ 新增 50+ 组件 diff --git a/src/uni_modules/wot-design-uni/components/common/AbortablePromise.ts b/src/uni_modules/wot-design-uni/components/common/AbortablePromise.ts new file mode 100644 index 0000000..efe5167 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/AbortablePromise.ts @@ -0,0 +1,28 @@ +export class AbortablePromise { + promise: Promise + private _reject: ((res?: any) => void) | null = null + + constructor(executor: (resolve: (value: T | PromiseLike) => void, reject: (reason?: any) => void) => void) { + this.promise = new Promise((resolve, reject) => { + executor(resolve, reject) + this._reject = reject // 保存reject方法的引用,以便在abort时调用 + }) + } + // 提供abort方法来中止Promise + abort(error?: any) { + if (this._reject) { + this._reject(error) // 调用reject方法来中止Promise + } + } + + then( + onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, + onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null + ): Promise { + return this.promise.then(onfulfilled, onrejected) + } + + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): Promise { + return this.promise.catch(onrejected) + } +} diff --git a/src/uni_modules/wot-design-uni/components/common/abstracts/_config.scss b/src/uni_modules/wot-design-uni/components/common/abstracts/_config.scss new file mode 100644 index 0000000..fe65cb4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/abstracts/_config.scss @@ -0,0 +1,7 @@ +/** + * SCSS 配置项:命名空间以及BEM + */ +$namespace: 'wd'; +$elementSeparator: '__'; +$modifierSeparator: '--'; +$state-prefix: 'is-'; \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/common/abstracts/_function.scss b/src/uni_modules/wot-design-uni/components/common/abstracts/_function.scss new file mode 100644 index 0000000..24c0ca0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/abstracts/_function.scss @@ -0,0 +1,89 @@ +/** + * 辅助函数 + */ +@import 'config'; +$default-theme: #4d80f0 !default; // 正常色 + +/* 转换成字符串 */ +@function selectorToString($selector) { + $selector: inspect($selector); + $selector: str-slice($selector, 2, -2); + + @return $selector; +} + +/* 判断是否存在 Modifier */ +@function containsModifier($selector) { + $selector: selectorToString($selector); + + @if str-index($selector, $modifierSeparator) { + @return true; + } + + @else { + @return false; + } +} + +/* 判断是否存在伪类 */ +@function containsPseudo($selector) { + $selector: selectorToString($selector); + + @if str-index($selector, ':') { + @return true; + } + + @else { + @return false; + } +} + + +/** + * 主题色切换 + * @params $theme-color 主题色 + * @params $type 变暗’dark‘ 变亮 'light' + * @params $mix-color 自己设置的混色 + */ +@function themeColor($theme-color, $type: "", $mix-color: "") { + @if $default-theme !=#4d80f0 { + @if $type=="dark" { + @return darken($theme-color, 10%); + } + + @else if $type=="light" { + @return lighten($theme-color, 10%); + } + + @else { + @return $theme-color; + } + } + + @else { + @return $mix-color; + } +} + +/** + * 颜色结果切换, 如果开启线性渐变色 使用渐变色,如果没有开启,那么使用主题色 + * @params $open-linear 是否开启线性渐变色 + * @params $deg 渐变色角度 + * @params $theme-color 当前配色 + * @params [Array] $set 主题色明暗设置,与 $color-list 数量对应 + * @params [Array] $color-list 渐变色顺序, $color-list 和 $per-list 数量相同 + * @params [Array] $per-list 渐变色比例 + */ +@function resultColor($deg, $theme-color, $set, $color-list, $per-list) { + // 开启渐变 + + $len: length($color-list); + $arg: $deg; + + @for $i from 1 through $len { + $arg: $arg + ","+ themeColor($theme-color, nth($set, $i), nth($color-list, $i)) + " "+ nth($per-list, $i); + } + + @return linear-gradient(unquote($arg)); + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/common/abstracts/_mixin.scss b/src/uni_modules/wot-design-uni/components/common/abstracts/_mixin.scss new file mode 100644 index 0000000..3d1cd94 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/abstracts/_mixin.scss @@ -0,0 +1,385 @@ +/** + * 混合宏 + */ +@import "config"; +@import "function"; + +/** + * BEM,定义块(b) + */ +@mixin b($block) { + $B: $namespace + "-"+ $block !global; + + .#{$B} { + @content; + } +} + +/* 定义元素(e),对于伪类,会自动将 e 嵌套在 伪类 底下 */ +@mixin e($element...) { + $selector: &; + $selectors: ""; + + @if containsPseudo($selector) { + @each $item in $element { + $selectors: #{$selectors + "." + $B + $elementSeparator + $item + ","}; + } + + @at-root { + #{$selector} { + #{$selectors} { + @content; + } + } + } + } + + @else { + @each $item in $element { + $selectors: #{$selectors + $selector + $elementSeparator + $item + ","}; + } + + @at-root { + #{$selectors} { + @content; + } + } + } +} + + + +/* 此方法用于生成穿透样式 */ + +/* 定义元素(e),对于伪类,会自动将 e 嵌套在 伪类 底下 */ +@mixin edeep($element...) { + $selector: &; + $selectors: ""; + + @if containsPseudo($selector) { + @each $item in $element { + $selectors: #{$selectors + "." + $B + $elementSeparator + $item + ","}; + } + + @at-root { + #{$selector} { + :deep() { + #{$selectors} { + @content; + } + } + } + } + } + + @else { + @each $item in $element { + $selectors: #{$selectors + $selector + $elementSeparator + $item + ","}; + } + + @at-root { + :deep() { + #{$selectors} { + @content; + } + } + } + } +} + + +/* 定义状态(m) */ +@mixin m($modifier...) { + $selectors: ""; + + @each $item in $modifier { + $selectors: #{$selectors + & + $modifierSeparator + $item + ","}; + } + + @at-root { + #{$selectors} { + @content; + } + } +} + +/* 定义状态(m) */ +@mixin mdeep($modifier...) { + $selectors: ""; + + @each $item in $modifier { + $selectors: #{$selectors + & + $modifierSeparator + $item + ","}; + } + + @at-root { + :deep() { + #{$selectors} { + @content; + } + } + } +} + +/* 对于需要需要嵌套在 m 底下的 e,调用这个混合宏,一般在切换整个组件的状态,如切换颜色的时候 */ +@mixin me($element...) { + $selector: &; + $selectors: ""; + + @if containsModifier($selector) { + @each $item in $element { + $selectors: #{$selectors + "." + $B + $elementSeparator + $item + ","}; + } + + @at-root { + #{$selector} { + #{$selectors} { + @content; + } + } + } + } + + @else { + @each $item in $element { + $selectors: #{$selectors + $selector + $elementSeparator + $item + ","}; + } + + @at-root { + #{$selectors} { + @content; + } + } + } +} + +/* 状态,生成 is-$state 类名 */ +@mixin when($states...) { + @at-root { + @each $state in $states { + &.#{$state-prefix + $state} { + @content; + } + } + } +} + +/** + * 常用混合宏 + */ + +/* 单行超出隐藏 */ +@mixin lineEllipsis { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +/* 多行超出隐藏 */ +@mixin multiEllipsis($lineNumber: 3) { + display: -webkit-box; + -webkit-box-orient: vertical; + -webkit-line-clamp: $lineNumber; + overflow: hidden; +} + +/* 清除浮动 */ +@mixin clearFloat { + &::after { + display: block; + content: ""; + height: 0; + clear: both; + overflow: hidden; + visibility: hidden; + } +} + +/* 0.5px 边框 指定方向*/ +@mixin halfPixelBorder($direction: "bottom", $left: 0, $color: $-color-border-light) { + position: relative; + + &::after { + position: absolute; + display: block; + content: ""; + + @if ($left==0) { + width: 100%; + } + + @else { + width: calc(100% - #{$left}); + } + + height: 1px; + left: $left; + + @if ($direction=="bottom") { + bottom: 0; + } + + @else { + top: 0; + } + + transform: scaleY(0.5); + background: $color; + } +} + + +/* 0.5px 边框 环绕 */ +@mixin halfPixelBorderSurround($color: $-color-border-light) { + position: relative; + + &::after { + position: absolute; + display: block; + content: ' '; + pointer-events: none; + width: 200%; + height: 200%; + left: 0; + top: 0; + border: 1px solid $color; + transform: scale(0.5); + box-sizing: border-box; + transform-origin: left top; + } +} + +@mixin buttonClear { + outline: none; + -webkit-appearance: none; + -webkit-tap-highlight-color: transparent; + background: transparent; +} + +/** + * 三角形实现尖角样式,适用于背景透明情况 + * @param $size 三角形高,底边为 $size * 2 + * @param $bg 三角形背景颜色 + */ +@mixin triangleArrow($size, $bg) { + @include e(arrow) { + position: absolute; + width: 0; + height: 0; + } + + @include e(arrow-down) { + border-left: $size solid transparent; + border-right: $size solid transparent; + border-top: $size solid $bg; + transform: translateX(-50%); + bottom: calc(-1 * $size) + } + + @include e(arrow-up) { + border-left: $size solid transparent; + border-right: $size solid transparent; + border-bottom: $size solid $bg; + transform: translateX(-50%); + top: calc(-1 * $size) + } + + @include e(arrow-left) { + border-top: $size solid transparent; + border-bottom: $size solid transparent; + border-right: $size solid $bg; + transform: translateY(-50%); + left: calc(-1 * $size) + } + + @include e(arrow-right) { + border-top: $size solid transparent; + border-bottom: $size solid transparent; + border-left: $size solid $bg; + transform: translateY(-50%); + right: calc(-1 * $size) + } +} + +/** + * 正方形实现尖角样式,适用于背景不透明情况 + * @param $size 正方形边长 + * @param $bg 正方形背景颜色 + * @param $z-index z-index属性值,不得大于外部包裹器 + * @param $box-shadow 阴影 +*/ +@mixin squareArrow($size, $bg, $z-index, $box-shadow) { + @include e(arrow) { + position: absolute; + width: $size; + height: $size; + z-index: $z-index; + } + + @include e(arrow-down) { + transform: translateX(-50%); + bottom: 0; + + &:after { + content: ""; + width: $size; + height: $size; + background-color: $bg; + position: absolute; + left: 0; + bottom: calc(-1 * $size / 2); + transform: rotateZ(45deg); + box-shadow: $box-shadow; + } + } + + @include e(arrow-up) { + transform: translateX(-50%); + top: 0; + + &:after { + content: ""; + width: $size; + height: $size; + background-color: $bg; + position: absolute; + left: 0; + top: calc(-1 * $size / 2); + transform: rotateZ(45deg); + box-shadow: $box-shadow; + } + } + + @include e(arrow-left) { + transform: translateY(-50%); + left: 0; + + &:after { + content: ""; + width: $size; + height: $size; + background-color: $bg; + position: absolute; + left: calc(-1 * $size / 2); + top: 0; + transform: rotateZ(45deg); + box-shadow: $box-shadow; + } + } + + @include e(arrow-right) { + transform: translateY(-50%); + right: 0; + + &:after { + content: ""; + width: $size; + height: $size; + background-color: $bg; + position: absolute; + right: calc(-1 * $size / 2); + top: 0; + transform: rotateZ(45deg); + box-shadow: $box-shadow; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss b/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss new file mode 100644 index 0000000..d8ee70b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/abstracts/variable.scss @@ -0,0 +1,974 @@ +@import './function'; + +/** + * UI规范基础变量 + */ +/*----------------------------------------- Theme color. start ----------------------------------------*/ +/* 主题颜色 */ +$-color-theme: var(--wot-color-theme, $default-theme) !default; // 主题色 +$-color-white: var(--wot-color-white, rgb(255, 255, 255)) !default; // 用于mix的白色 +$-color-black: var(--wot-color-black, rgb(0, 0, 0)) !default; // 用于mix的黑色 + +/* 辅助色 */ +$-color-success: var(--wot-color-success, #34d19d) !default; // 成功色 +$-color-warning: var(--wot-color-warning, #f0883a) !default; // 警告色 +$-color-danger: var(--wot-color-danger, #fa4350) !default; // 危险出错色 +$-color-purple: var(--wot-color-purple, #8268de) !default; // 紫色 +$-color-yellow: var(--wot-color-yellow, #f0cd1d) !default; // 黄色 +$-color-blue: var(--wot-color-blue, #2bb3ed) !default; // 蓝色 +$-color-info: var(--wot-color-info, #909399) !default; + +$-color-gray-1: var(--wot-color-gray-1, #f7f8fa) !default; +$-color-gray-2: var(--wot-color-gray-2, #f2f3f5) !default; +$-color-gray-3: var(--wot-color-gray-3, #ebedf0) !default; +$-color-gray-4: var(--wot-color-gray-4, #dcdee0) !default; +$-color-gray-5: var(--wot-color-gray-5, #c8c9cc) !default; +$-color-gray-6: var(--wot-color-gray-6, #969799) !default; +$-color-gray-7: var(--wot-color-gray-7, #646566) !default; +$-color-gray-8: var(--wot-color-gray-8, #323233) !default; + +$-font-gray-1: var(--wot-font-gray-1, rgba(0, 0, 0, 0.9)); +$-font-gray-2: var(--wot-font-gray-2, rgba(0, 0, 0, 0.6)); +$-font-gray-3: var(--wot-font-gray-3, rgba(0, 0, 0, 0.4)); +$-font-gray-4: var(--wot-font-gray-4, rgba(0, 0, 0, 0.26)); + +$-font-white-1: var(--wot-font-white-1, rgba(255, 255, 255, 1)); +$-font-white-2: var(--wot-font-white-2, rgba(255, 255, 255, 0.55)); +$-font-white-3: var(--wot-font-white-3, rgba(255, 255, 255, 0.35)); +$-font-white-4: var(--wot-font-white-4, rgba(255, 255, 255, 0.22)); + +/* 文字颜色(默认浅色背景下 */ +$-color-title: var(--wot-color-title, $-color-black) !default; // 模块标题/重要正文 000 +$-color-content: var(--wot-color-content, #262626) !default; // 普通正文 262626 +$-color-secondary: var(--wot-color-secondary, #595959) !default; // 次要信息,注释/补充/正文 595959 +$-color-aid: var(--wot-color-aid, #8c8c8c) !default; // 辅助文字字号,弱化信息,引导性/不可点文字 8c8c8c +$-color-tip: var(--wot-color-tip, #bfbfbf) !default; // 失效、默认提示文字 bfbfbf +$-color-border: var(--wot-color-border, #d9d9d9) !default; // 控件边框线 d9d9d9 +$-color-border-light: var(--wot-color-border-light, #e8e8e8) !default; // 分割线颜色 e8e8e8 +$-color-bg: var(--wot-color-bg, #f5f5f5) !default; // 背景色、禁用填充色 f5f5f5 + +/* 暗黑模式 */ +$-dark-background: var(--wot-dark-background, #131313) !default; +$-dark-background2: var(--wot-dark-background2, #1b1b1b) !default; +$-dark-background3: var(--wot-dark-background3, #141414) !default; +$-dark-background4: var(--wot-dark-background4, #323233) !default; +$-dark-background5: var(--wot-dark-background5, #646566) !default; +$-dark-background6: var(--wot-dark-background6, #380e08) !default; +$-dark-background7: var(--wot-dark-background7, #707070) !default; +$-dark-color: var(--wot-dark-color, $-color-white) !default; +$-dark-color2: var(--wot-dark-color2, #f2270c) !default; +$-dark-color3: var(--wot-dark-color3, rgba(232, 230, 227, 0.8)) !default; +$-dark-color-gray: var(--wot-dark-color-gray, $-color-secondary) !default; +$-dark-border-color: var(--wot-dark-border-color, #3a3a3c) !default; + +/* 图形颜色 */ +$-color-icon: var(--wot-color-icon, #d9d9d9) !default; // icon颜色 +$-color-icon-active: var(--wot-color-icon-active, #eee) !default; // icon颜色hover +$-color-icon-disabled: var(--wot-color-icon-disabled, #a7a7a7) !default; // icon颜色disabled + +/*----------------------------------------- Theme color. end -------------------------------------------*/ + +/*-------------------------------- Theme color application size. start --------------------------------*/ + +/* 文字字号 */ +$-fs-big: var(--wot-fs-big, 24px) !default; // 大型标题 +$-fs-important: var(--wot-fs-important, 19px) !default; // 重要数据 +$-fs-title: var(--wot-fs-title, 16px) !default; // 标题字号/重要正文字号 +$-fs-content: var(--wot-fs-content, 14px) !default; // 普通正文 +$-fs-secondary: var(--wot-fs-secondary, 12px) !default; // 次要信息,注释/补充/正文 +$-fs-aid: var(--wot-fs-aid, 10px) !default; // 辅助文字字号,弱化信息,引导性/不可点文字 + +/* 文字字重 */ +$-fw-medium: var(--wot-fw-medium, 500) !default; // PingFangSC-Medium +$-fw-semibold: var(--wot-fw-semibold, 600) !default; // PingFangSC-Semibold + +/* 尺寸 */ +$-size-side-padding: var(--wot-size-side-padding, 15px) !default; // 屏幕两边留白 +$-size-side-padding-small: var(--wot-size-side-padding-small, 6px) !default; // 屏幕两边留白小值 + +/*-------------------------------- Theme color application size. end --------------------------------*/ + +/* component var */ + +/* action-sheet */ +$-action-sheet-weight: var(--wot-action-sheet-weight, 500) !default; // 面板字重 +$-action-sheet-radius: var(--wot-action-sheet-radius, 16px) !default; // 面板圆角大小 +$-action-sheet-loading-size: var(--wot-action-sheet-loading-size, 20px) !default; // loading动画尺寸 +$-action-sheet-action-height: var(--wot-action-sheet-action-height, 48px) !default; // 单条菜单高度 +$-action-sheet-color: var(--wot-action-sheet-color, rgba(0, 0, 0, 0.85)) !default; // 选项名称颜色 +$-action-sheet-fs: var(--wot-action-sheet-fs, $-fs-title) !default; // 选项名称字号 +$-action-sheet-active-color: var(--wot-action-sheet-active-color, $-color-bg) !default; // 点击高亮颜色 +$-action-sheet-subname-fs: var(--wot-action-sheet-subname-fs, $-fs-secondary) !default; // 描述信息字号 +$-action-sheet-subname-color: var(--wot-action-sheet-subname-color, rgba(0, 0, 0, 0.45)) !default; // 描述信息颜色 +$-action-sheet-disabled-color: var(--wot-action-sheet-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 禁用颜色 +$-action-sheet-bg: var(--wot-action-sheet-bg, $-color-white) !default; // 菜单容器颜色(取消按钮上方的颜色) +$-action-sheet-title-height: var(--wot-action-sheet-title-height, 64px) !default; // 标题高度 +$-action-sheet-title-fs: var(--wot-action-sheet-title-fs, $-fs-title) !default; // 标题字号 +$-action-sheet-close-fs: var(--wot-action-sheet-close-fs, $-fs-title) !default; // 关闭按钮大小 +$-action-sheet-close-color: var(--wot-action-sheet-close-color, rgba(0, 0, 0, 0.65)) !default; // 关闭按钮颜色 +$-action-sheet-close-top: var(--wot-action-sheet-close-top, 25px) !default; // 关闭按钮距离标题顶部距离 +$-action-sheet-close-right: var(--wot-action-sheet-close-right, 15px) !default; // 关闭按钮距离标题右侧距离 +$-action-sheet-cancel-color: var(--wot-action-sheet-cancel-color, #131415) !default; // 取消按钮颜色 +$-action-sheet-cancel-height: var(--wot-action-sheet-cancel-height, 44px) !default; // 取消按钮高度 +$-action-sheet-cancel-bg: var(--wot-action-sheet-cancel-bg, rgba(240, 240, 240, 1)) !default; // 取消按钮背景色 +$-action-sheet-cancel-radius: var(--wot-action-sheet-cancel-radius, 22px) !default; // 取消按钮圆角大小 +$-action-sheet-panel-padding: var(--wot-action-sheet-panel-padding, 12px 0 11px) !default; // 自定义面板内边距大小 +$-action-sheet-panel-img-fs: var(--wot-action-sheet-panel-img-fs, 40px) !default; // 自定义面板图片大小 +$-action-sheet-panel-img-radius: var(--wot-action-sheet-panel-img-radius, 4px) !default; // 自定义面板图片圆角大小 + +/* badge */ +$-badge-bg: var(--wot-badge-bg, $-color-danger) !default; // 背景填充颜色 +$-badge-color: var(--wot-badge-color, #fff) !default; // 文字颜色 +$-badge-fs: var(--wot-badge-fs, 12px) !default; // 文字字号 +$-badge-padding: var(--wot-badge-padding, 0 5px) !default; // padding +$-badge-height: var(--wot-badge-height, 16px) !default; // 高度 +$-badge-primary: var(--wot-badge-primary, $-color-theme) !default; +$-badge-success: var(--wot-badge-success, $-color-success) !default; +$-badge-warning: var(--wot-badge-warning, $-color-warning) !default; +$-badge-danger: var(--wot-badge-danger, $-color-danger) !default; +$-badge-info: var(--wot-badge-info, $-color-info) !default; +$-badge-dot-size: var(--wot-badge-dot-size, 6px) !default; // dot 类型大小 +$-badge-border: var(--wot-badge-border, 2px solid $-badge-color) !default; // 边框样式 + +/* button */ +$-button-disabled-opacity: var(--wot-button-disabled-opacity, 0.6) !default; // button禁用透明度 +$-button-small-height: var(--wot-button-small-height, 28px) !default; // 小型按钮高度 +$-button-small-padding: var(--wot-button-small-padding, 0 12px) !default; // 小型按钮padding +$-button-small-fs: var(--wot-button-small-fs, $-fs-secondary) !default; // 小型按钮字号 +$-button-small-radius: var(--wot-button-small-radius, 2px) !default; // 小型按钮圆角大小 +$-button-small-loading: var(--wot-button-small-loading, 14px) !default; // 小型按钮loading图标大小 +$-button-medium-height: var(--wot-button-medium-height, 36px) !default; // 中型按钮高度 +$-button-medium-padding: var(--wot-button-medium-padding, 0 16px) !default; // 中型按钮padding +$-button-medium-fs: var(--wot-button-medium-fs, $-fs-content) !default; // 中型按钮字号 +$-button-medium-radius: var(--wot-button-medium-radius, 4px) !default; // 中型按钮圆角大小 +$-button-medium-loading: var(--wot-button-medium-loading, 18px) !default; // 中型按钮loading图标大小 +$-button-medium-box-shadow-size: var(--wot-button-medium-box-shadow-size, 0px 2px 4px 0px) !default; // 中尺寸阴影尺寸 +$-button-large-height: var(--wot-button-large-height, 44px) !default; // 大型按钮高度 +$-button-large-padding: var(--wot-button-large-padding, 0 36px) !default; // 大型按钮padding +$-button-large-fs: var(--wot-button-large-fs, $-fs-title) !default; // 大型按钮字号 +$-button-large-radius: var(--wot-button-large-radius, 8px) !default; // 大型按钮圆角大小 +$-button-large-loading: var(--wot-button-large-loading, 24px) !default; // 大小按钮loading图标大小 +$-button-large-box-shadow-size: var(--wot-button-large-box-shadow-size, 0px 4px 8px 0px) !default; // 大尺寸阴影尺寸 +$-button-icon-fs: var(--wot-button-icon-fs, 18px) !default; // 带图标的按钮的图标大小 +$-button-icon-size: var(--wot-button-icon-size, 40px) !default; // icon 类型按钮尺寸 +$-button-icon-color: var(--wot-button-icon-color, rgba(0, 0, 0, 0.65)) !default; // icon 类型按钮颜色 +$-button-icon-disabled-color: var(--wot-button-icon-disabled-color, $-color-icon-disabled) !default; // icon 类型按钮禁用颜色 +$-button-normal-color: var(--wot-button-normal-color, $-color-title) !default; // 文字颜色 +$-button-normal-disabled-color: var(--wot-button-normal-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 默认按钮禁用文字色 +$-button-plain-bg-color: var(--wot-button-plain-bg-color, $-color-white) !default; // 幽灵按钮背景色 +$-button-primary-color: var(--wot-button-primary-color, $-color-white) !default; // 主要按钮颜色 +$-button-primary-bg-color: var(--wot-button-primary-bg-color, $-color-theme) !default; // 主要按钮背景颜色 +$-button-success-color: var(--wot-button-success-color, $-color-white) !default; // 成功按钮文字颜色 +$-button-success-bg-color: var(--wot-button-success-bg-color, $-color-success) !default; // 成功按钮颜色 +$-button-info-color: var(--wot-button-info-color, $-color-title) !default; // 信息按钮颜色 +$-button-info-bg-color: var(--wot-button-info-bg-color, #f0f0f0) !default; // 信息按钮背景颜色 +$-button-info-plain-border-color: var(--wot-button-info-plain-border-color, rgba(0, 0, 0, 0.45)) !default; // 信息按钮禁用颜色 +$-button-info-plain-normal-color: var(--wot-button-info-plain-normal-color, rgba(0, 0, 0, 0.85)) !default; // 信息幽灵按钮默认颜色 +$-button-warning-color: var(--wot-button-warning-color, $-color-white) !default; // 警告按钮字体颜色 +$-button-warning-bg-color: var(--wot-button-warning-bg-color, $-color-warning) !default; // 警告按钮背景颜色 +$-button-error-color: var(--wot-button-error-color, $-color-white) !default; // 错误按钮颜色 +$-button-error-bg-color: var(--wot-button-error-bg-color, $-color-danger) !default; // 错误按钮背景颜色 +$-button-text-hover-opacity: var(--wot-button-text-hover-opacity, 0.7) !default; // 文字button激活时透明度 + +/* cell */ +$-cell-padding: var(--wot-cell-padding, $-size-side-padding) !default; // cell 左右padding距离 +$-cell-line-height: var(--wot-cell-line-height, 24px) !default; // 行高 + +$-cell-group-title-fs: var(--wot-cell-group-title-fs, $-fs-title) !default; // 组标题字号 +$-cell-group-padding: var(--wot-cell-group-padding, 13px $-cell-padding) !default; // 组padding +$-cell-group-title-color: var(--wot-cell-group-title-color, rgba(0, 0, 0, 0.85)) !default; // 组标题文字颜色 +$-cell-group-value-fs: var(--wot-cell-group-value-fs, $-fs-content) !default; // 组值字号 +$-cell-group-value-color: var(--wot-cell-group-value-color, $-color-content) !default; // 组值文字颜色 + +$-cell-wrapper-padding: var(--wot-cell-wrapper-padding, 10px) !default; // cell 容器padding +$-cell-wrapper-padding-large: var(--wot-cell-wrapper-padding-large, 12px) !default; // large类型cell容器padding + +$-cell-wrapper-padding-with-label: var(--wot-cell-wrapper-padding-with-label, 16px) !default; // cell 容器上下padding(有label情况下) +$-cell-icon-right: var(--wot-cell-icon-right, 4px) !default; // 图标距离右边缘 +$-cell-icon-size: var(--wot-cell-icon-size, 16px) !default; // 图标大小 +$-cell-title-fs: var(--wot-cell-title-fs, 14px) !default; // 标题字号 +$-cell-title-color: var(--wot-cell-title-color, rgba(0, 0, 0, 0.85)) !default; // 标题文字颜色 +$-cell-label-fs: var(--wot-cell-label-fs, 12px) !default; // 描述信息字号 +$-cell-label-color: var(--wot-cell-label-color, rgba(0, 0, 0, 0.45)) !default; // 描述信息文字颜色 +$-cell-value-fs: var(--wot-cell-value-fs, 14px) !default; // 右侧内容字号 +$-cell-value-fs-large: var(--wot-cell-value-fs-large, 16px) !default; // 大尺寸右侧内容字号 +$-cell-value-color: var(--wot-cell-value-color, rgba(0, 0, 0, 0.85)) !default; // 右侧内容文字颜色 +$-cell-arrow-size: var(--wot-cell-arrow-size, 18px) !default; // 右箭头大小 +$-cell-arrow-color: var(--wot-cell-arrow-color, rgba(0, 0, 0, 0.25)) !default; // 右箭头颜色 +$-cell-clear-color: var(--wot-cell-clear-color, #585858) !default; // 清空按钮颜色 +$-cell-tap-bg: var(--wot-cell-tap-bg, rgba(0, 0, 0, 0.06)) !default; // 点击态背景色 + +$-cell-title-fs-large: var(--wot-cell-title-fs-large, 16px) !default; // 大尺寸标题字号 +$-cell-label-fs-large: var(--wot-cell-label-fs-large, 14px) !default; // 描述信息字号 +$-cell-icon-size-large: var(--wot-cell-icon-size-large, 18px) !default; // 图标大小 + +$-cell-required-color: var(--wot-cell-required-color, $-color-danger) !default; // 要求必填*颜色 +$-cell-required-size: var(--wot-cell-required-size, 18px) !default; // 必填*字号 +$-cell-required-margin: var(--wot-cell-required-margin, 4px) !default; // 必填*间距 +$-cell-vertical-top: var(--wot-cell-vertical-top, 16px) !default; // 表单类型-上下结构的间距 + +/* calendar */ +$-calendar-fs: var(--wot-calendar-fs, 16px) !default; +$-calendar-panel-padding: var(--wot-calendar-panel-padding, 0 12px) !default; +$-calendar-panel-title-fs: var(--wot-calendar-panel-title-fs, 14px) !default; +$-calendar-panel-title-color: var(--wot-calendar-panel-title-color, rgba(0, 0, 0, 0.85)) !default; +$-calendar-week-color: var(--wot-calendar-week-color, rgba(0, 0, 0, 0.85)) !default; +$-calendar-week-height: var(--wot-calendar-week-height, 36px) !default; +$-calendar-week-fs: var(--wot-calendar-week-fs, 12px) !default; +$-calendar-day-fs: var(--wot-calendar-day-fs, 16px) !default; +$-calendar-day-color: var(--wot-calendar-day-color, rgba(0, 0, 0, 0.85)) !default; +$-calendar-day-fw: var(--wot-calendar-day-fw, 500) !default; +$-calendar-day-height: var(--wot-calendar-day-height, 64px) !default; +$-calendar-month-width: var(--wot-calendar-month-width, 50px) !default; +$-calendar-active-color: var(--wot-calendar-active-color, $-color-theme) !default; +$-calendar-selected-color: var(--wot-calendar-selected-color, $-color-white) !default; +$-calendar-disabled-color: var(--wot-calendar-disabled-color, rgba(0, 0, 0, 0.25)) !default; +$-calendar-range-color: var(--wot-calendar-range-color, rgba(#4d80f0, 0.09)) !default; +$-calendar-active-border: var(--wot-calendar-active-border, 8px) !default; +$-calendar-info-fs: var(--wot-calendar-info-fs, 10px) !default; +$-calendar-item-margin-bottom: var(--wot-calendar-item-margin-bottom, 4px) !default; + + +/* checkbox */ +$-checkbox-margin: var(--wot-checkbox-margin, 10px) !default; // 多个复选框距离 +$-checkbox-bg: var(--wot-checkbox-bg, $-color-white) !default; // 多个复选框距离 +$-checkbox-label-margin: var(--wot-checkbox-label-margin, 9px) !default; // 右侧文字与左侧图标距离 +$-checkbox-size: var(--wot-checkbox-size, 16px) !default; // 左侧图标尺寸 +$-checkbox-icon-size: var(--wot-checkbox-icon-size, 14px) !default; // 左侧图标尺寸 +$-checkbox-border-color: var(--wot-checkbox-border-color, #dcdcdc) !default; // 左侧图标边框颜色 +$-checkbox-check-color: var(--wot-checkbox-check-color, $-color-white) !default; // 左侧图标边框颜色 +$-checkbox-label-fs: var(--wot-checkbox-label-fs, 14px) !default; // 右侧文字字号 +$-checkbox-label-color: var(--wot-checkbox-label-color, rgba(0, 0, 0, 0.85)) !default; // 右侧文字颜色 +$-checkbox-checked-color: var(--wot-checkbox-checked-color, $-color-theme) !default; // 选中颜色 + +$-checkbox-disabled-color: var(--wot-checkbox-disabled-color, rgba(0, 0, 0, 0.04)) !default; // 禁用背景颜色 +$-checkbox-disabled-label-color: var(--wot-checkbox-disabled-label-color, rgba(0, 0, 0, 0.25)) !default; // 禁用文字颜色 +$-checkbox-disabled-check-color: var(--wot-checkbox-disabled-check-color, rgba(0, 0, 0, 0.15)) !default; // 禁用图标颜色 +$-checkbox-disabled-check-bg: var(--wot-checkbox-disabled-check-bg, rgba(0, 0, 0, 0.15)) !default; // 禁用边框背景颜色 +$-checkbox-square-radius: var(--wot-checkbox-square-radius, 4px) !default; // 方型圆角大小 + +$-checkbox-large-size: var(--wot-checkbox-large-size, 18px) !default; // 左侧图标尺寸 +$-checkbox-large-label-fs: var(--wot-checkbox-large-label-fs, 16px) !default; // 右侧文字字号 + +$-checkbox-button-height: var(--wot-checkbox-button-height, 32px) !default; // 按钮模式复选框高 +$-checkbox-button-min-width: var(--wot-checkbox-button-min-width, 78px) !default; // 按钮模式最小宽 +$-checkbox-button-radius: var(--wot-checkbox-button-radius, 16px) !default; // 按钮圆角大小 +$-checkbox-button-bg: var(--wot-checkbox-button-bg, rgba(0, 0, 0, 0.04)) !default; // 按钮模式背景颜色 +$-checkbox-button-font-size: var(--wot-checkbox-button-font-size, 14px) !default; // 按钮模式字号 +$-checkbox-button-border: var(--wot-checkbox-button-border, #f5f5f5) !default; // 按钮边框颜色 +$-checkbox-button-disabled-border: var(--wot-checkbox-button-disabled-border, rgba(0, 0, 0, 0.15)) !default; // 按钮禁用边框颜色 + +/* collapse */ +$-collapse-side-padding: var(--wot-collapse-side-padding, $-size-side-padding) !default; // 左右间距 +$-collapse-body-padding: var(--wot-collapse-body-padding, 14px $-size-side-padding) !default; // body padding +$-collapse-header-padding: var(--wot-collapse-header-padding, 13px $-size-side-padding) !default; // 头部padding +$-collapse-title-color: var(--wot-collapse-title-color, rgba(0, 0, 0, 0.85)) !default; // 标题颜色 +$-collapse-title-fs: var(--wot-collapse-title-fs, 16px) !default; // 标题字号 +$-collapse-arrow-size: var(--wot-collapse-arrow-size, 18px) !default; // 箭头大小 +$-collapse-arrow-color: var(--wot-collapse-arrow-color, #d8d8d8) !default; // 箭头颜色 +$-collapse-body-fs: var(--wot-collapse-body-fs, 14px) !default; // 内容字号 +$-collapse-body-color: var(--wot-collapse-body-color, rgba(0, 0, 0, 0.65)) !default; // 内容颜色 +$-collapse-disabled-color: var(--wot-collapse-disabled-color, rgba(0, 0, 0, 0.15)) !default; // 禁用颜色 +$-collapse-retract-fs: var(--wot-collapse-retract-fs, 14px) !default; // 更多 字号 +$-collapse-more-color: var(--wot-collapse-more-color, $-color-theme) !default; // 更多 颜色 + +/* divider */ +$-divider-padding: var(--wot-divider-padding, 0 $-size-side-padding) !default; // 两边间距 +$-divider-margin: var(--wot-divider-margin, 16px 0) !default; // 上下间距 +$-divider-color: var(--wot-divider-color, rgba(0, 0, 0, 0.45)) !default; // 字体颜色 +$-divider-line-color: var(--wot-divider-line-color, currentColor) !default; // 线条颜色 +$-divider-line-height: var(--wot-divider-line-height, 1px) !default; // 线条高度 +$-divider-fs: var(--wot-divider-fs, 14px) !default; // 字体大小 +$-divider-content-left-width: var(--wot-divider-content-left-width, 10%) !default; // 左侧内容宽度 +$-divider-content-left-margin: var(--wot-divider-content-left-margin, 12px) !default; // 左侧内容距离线距离 +$-divider-content-right-margin: var(--wot-divider-content-right-margin, 12px) !default; // 右侧内容距离线距离 +$-divider-content-right-width: var(--wot-divider-content-right-width, 10%) !default; // 右侧内容宽度 +$-divider-vertical-height: var(--wot-divider-vertical-height, 16px) !default; // 垂直分割线高度 +$-divider-vertical-content-margin: var(--wot-divider-vertical-content-margin, 0 8px) !default; // 垂直分割线内容间距 +$-divider-vertical-line-width: var(--wot-divider-vertical-line-width, 1px) !default; // 线条高度 + + + + +/* drop-menu */ +$-drop-menu-height: var(--wot-drop-menu-height, 48px) !default; // 展示选中项的高度 +$-drop-menu-color: var(--wot-drop-menu-color, $-color-content) !default; // 展示选中项的颜色 +$-drop-menu-fs: var(--wot-drop-menu-fs, $-fs-content) !default; // 展示选中项的字号 +$-drop-menu-arrow-fs: var(--wot-drop-menu-arrow-fs, $-fs-secondary) !default; // 箭头图标大小 + +$-drop-menu-side-padding: var(--wot-drop-menu-side-padding, $-size-side-padding) !default; // 两边留白间距 +$-drop-menu-disabled-color: var(--wot-drop-menu-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 禁用颜色 +$-drop-menu-item-height: var(--wot-drop-menu-item-height, 48px) !default; // 选项高度 +$-drop-menu-item-color: var(--wot-drop-menu-item-color, $-color-content) !default; // 选项颜色 +$-drop-menu-item-fs: var(--wot-drop-menu-item-fs, $-fs-content) !default; // 选项字号 +$-drop-menu-item-color-active: var(--wot-drop-menu-item-color-active, $-color-theme) !default; // 选中颜色 +$-drop-menu-item-color-tip: var(--wot-drop-menu-item-color-tip, rgba(0, 0, 0, 0.45)) !default; // 提示文字颜色 +$-drop-menu-item-fs-tip: var(--wot-drop-menu-item-fs-tip, $-fs-secondary) !default; // 提示文字字号 +$-drop-menu-option-check-size: var(--wot-drop-menu-option-check-size, 20px) !default; // check 图标大小 +$-drop-menu-line-color: var(--wot-drop-menu-line-color, $-color-theme) !default; // 下划线颜色 +$-drop-menu-line-height: var(--wot-drop-menu-line-height, 3px) !default; // 下划线高度 + +/* input-number */ +$-input-number-color: var(--wot-input-number-color, #262626) !default; // 文字颜色 +$-input-number-border-color: var(--wot-input-number-border-color, #e8e8e8) !default; // 边框颜色 +$-input-number-disabled-color: var(--wot-input-number-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 禁用颜色 +$-input-number-height: var(--wot-input-number-height, 24px) !default; // 加减号按钮高度 +$-input-number-btn-width: var(--wot-input-number-btn-width, 26px) !default; // 加减号按钮宽度 +$-input-number-input-width: var(--wot-input-number-input-width, 36px) !default; // 输入框宽度 +$-input-number-radius: var(--wot-input-number-radius, 4px) !default; // 加减号按钮圆角大小 +$-input-number-fs: var(--wot-input-number-fs, 12px) !default; // 输入框字号 +$-input-number-icon-size: var(--wot-input-number-icon-size, 14px) !default; // 加减号图标大小 +$-input-number-icon-color: var(--wot-input-number-icon-color, rgba(0, 0, 0, 0.65)) !default; // icon颜色 + +/* input */ +$-input-padding: var(--wot-input-padding, $-size-side-padding) !default; // input 左右padding距离 +$-input-border-color: var(--wot-input-border-color, #dadada) !default; // 无label边框颜色 +$-input-not-empty-border-color: var(--wot-input-not-empty-border-color, #262626) !default; // 输入框有值时 无label边框颜色 +$-input-fs: var(--wot-input-fs, $-cell-title-fs) !default; // 字号 +$-input-fs-large: var(--wot-input-fs-large, $-cell-title-fs-large) !default; // 大尺寸字号 +$-input-icon-margin: var(--wot-input-icon-margin, 8px) !default; // 图标距离 +$-input-color: var(--wot-input-color, #262626) !default; // 文字颜色 +$-input-placeholder-color: var(--wot-input-placeholder-color, #bfbfbf) !default; // 占位符颜色 +$-input-disabled-color: var(--wot-input-disabled-color, #d9d9d9) !default; // 输入框禁用颜色 +$-input-error-color: var(--wot-input-error-color, $-color-danger) !default; // 输入框错误颜色 +$-input-icon-color: var(--wot-input-icon-color, #bfbfbf) !default; // 图标颜色 +$-input-clear-color: var(--wot-input-clear-color, #585858) !default; // 关闭按钮颜色 +$-input-count-color: var(--wot-input-count-color, #bfbfbf) !default; // 计数文字颜色 +$-input-count-current-color: var(--wot-input-count-current-color, #262626) !default; // 当前长度颜色 +$-input-bg: var(--wot-input-bg, $-color-white) !default; // 默认背景颜色 + +$-input-cell-bg: var(--wot-input-cell-bg, $-color-white) !default; // cell 类型背景色 +$-input-cell-border-color: var(--wot-input-cell-border-color, $-color-border-light) !default; // cell 类型边框颜色 +$-input-cell-padding: var(--wot-input-cell-padding, 10px) !default; // cell 容器padding +$-input-cell-padding-large: var(--wot-input-cell-padding-large, 12px) !default; // large类型cell容器padding +$-input-cell-height: var(--wot-input-cell-height, 24px) !default; // cell 高度 +$-input-cell-label-width: var(--wot-input-cell-label-width, 33%) !default; // cell 下 label 的宽度 +$-input-inner-height: var(--wot-input-inner-height, 34px) !default; // 非cell和textarea下的高度 +$-input-inner-height-no-border: var(--wot-input-inner-height-no-border, 24px) !default; // 无边框下的高度 +$-input-count-fs: var(--wot-input-count-fs, 14px) !default; // 计数字号 +$-input-count-fs-large: var(--wot-input-count-fs-large, 14px) !default; // 大尺寸计数字号 +$-input-icon-size: var(--wot-input-icon-size, 16px) !default; // 图标大小 +$-input-icon-size-large: var(--wot-input-icon-size-large, 18px) !default; // 大尺寸图标大小 + +/* textarea */ +$-textarea-padding: var(--wot-textarea-padding, $-size-side-padding) !default; // textarea 左右padding距离 +$-textarea-border-color: var(--wot-textarea-border-color, #dadada) !default; // 无label边框颜色 +$-textarea-not-empty-border-color: var(--wot-textarea-not-empty-border-color, #262626) !default; // 输入框有值时 无label边框颜色 +$-textarea-fs: var(--wot-textarea-fs, $-cell-title-fs) !default; // 字号 +$-textarea-fs-large: var(--wot-textarea-fs-large, $-cell-title-fs-large) !default; // 大尺寸字号 +$-textarea-icon-margin: var(--wot-textarea-icon-margin, 8px) !default; // 图标距离 +$-textarea-color: var(--wot-textarea-color, #262626) !default; // 文字颜色 +$-textarea-icon-color: var(--wot-textarea-icon-color, #bfbfbf) !default; // 图标颜色 +$-textarea-clear-color: var(--wot-textarea-clear-color, #585858) !default; // 关闭按钮颜色 +$-textarea-count-color: var(--wot-textarea-count-color, #bfbfbf) !default; // 计数文字颜色 +$-textarea-count-current-color: var(--wot-textarea-count-current-color, #262626) !default; // 当前长度颜色 +$-textarea-bg: var(--wot-textarea-bg, $-color-white) !default; // 默认背景颜色 +$-textarea-cell-border-color: var(--wot-textarea-cell-border-color, $-color-border-light) !default; // cell 类型边框颜色 +$-textarea-cell-padding: var(--wot-textarea-cell-padding, 10px) !default; // cell 容器padding +$-textarea-cell-padding-large: var(--wot-textarea-cell-padding-large, 12px) !default; // large类型cell容器padding +$-textarea-cell-height: var(--wot-textarea-cell-height, 24px) !default; // cell 高度 +$-textarea-count-fs: var(--wot-textarea-count-fs, 14px) !default; // 计数字号 +$-textarea-count-fs-large: var(--wot-textarea-count-fs-large, 14px) !default; // 大尺寸计数字号 +$-textarea-icon-size: var(--wot-textarea-icon-size, 16px) !default; // 图标大小 +$-textarea-icon-size-large: var(--wot-textarea-icon-size-large, 18px) !default; // 大尺寸图标大小 + +/* loadmore */ +$-loadmore-height: var(--wot-loadmore-height, 48px) !default; // 高度 +$-loadmore-color: var(--wot-loadmore-color, rgba(0, 0, 0, 0.45)) !default; // 颜色 +$-loadmore-fs: var(--wot-loadmore-fs, 14px) !default; // 字号 +$-loadmore-error-color: var(--wot-loadmore-error-color, $-color-theme) !default; // 点击重试颜色 +$-loadmore-refresh-fs: var(--wot-loadmore-refresh-fs, $-fs-title) !default; // refresh图标字号 +$-loadmore-loading-size: var(--wot-loadmore-loading-size, $-fs-title) !default; // loading尺寸 + +/* message-box */ +$-message-box-width: var(--wot-message-box-width, 300px) !default; // 宽度 +$-message-box-bg: var(--wot-message-box-bg, $-color-white) !default; // 默认背景颜色 +$-message-box-radius: var(--wot-message-box-radius, 16px) !default; // 圆角大小 +$-message-box-padding: var(--wot-message-box-padding, 25px 24px 0) !default; // 主体内容padding +$-message-box-title-fs: var(--wot-message-box-title-fs, 16px) !default; // 标题字号 +$-message-box-title-color: var(--wot-message-box-title-color, rgba(0, 0, 0, 0.85)) !default; // 标题颜色 +$-message-box-content-fs: var(--wot-message-box-content-fs, 14px) !default; // 内容字号 +$-message-box-content-color: var(--wot-message-box-content-color, #666666) !default; // 内容颜色 +$-message-box-content-max-height: var(--wot-message-box-content-max-height, 264px) !default; // 内容最大高度 +$-message-box-content-scrollbar-width: var(--wot-message-box-content-scrollbar-width, 4px) !default; // 内容滚动条宽度 +$-message-box-content-scrollbar-color: var(--wot-message-box-content-scrollbar-color, rgba(0, 0, 0, 0.1)) !default; // 内容滚动条颜色 +$-message-box-input-error-color: var(--wot-message-box-input-error-color, $-input-error-color) !default; // 输入框错误颜色 + +/* notice-bar */ +$-notice-bar-fs: var(--wot-notice-bar-fs, 12px) !default; // 字号 +$-notice-bar-line-height: var(--wot-notice-bar-line-height, 18px) !default; // 行高 +$-notice-bar-border-radius: var(--wot-notice-bar-border-radius, 8px) !default; // 圆角 +$-notice-bar-padding: var(--wot-notice-bar-padding, 9px 20px 9px 15px) !default; // 非换行下的padding +$-notice-bar-warning-bg: var(--wot-notice-bar-warning-bg, #fff6c8) !default; // 背景色 +$-notice-bar-info-bg: var(--wot-notice-bar-info-bg, #f4f9ff) !default; // 背景色 +$-notice-bar-danger-bg: var(--wot-notice-bar-danger-bg, #feeced) !default; // 背景色 +$-notice-bar-warning-color: var(--wot-notice-bar-warning-color, $-color-warning) !default; // 文字和图标颜色 +$-notice-bar-info-color: var(--wot-notice-bar-info-color, $-color-theme) !default; // 文字和图标颜色 +$-notice-bar-danger-color: var(--wot-notice-bar-danger-color, $-color-danger) !default; // 文字和图标颜色 +$-notice-bar-prefix-size: var(--wot-notice-bar-prefix-size, 18px) !default; // 图标大小 +$-notice-bar-close-bg: var(--wot-notice-bar-close-bg, rgba(0, 0, 0, 0.15)) !default; // 右侧关闭按钮背景颜色 +$-notice-bar-close-size: var(--wot-notice-bar-close-size, 18px) !default; // 右侧关闭按钮背景颜色 +$-notice-bar-close-color: var(--wot-notice-bar-close-color, $-color-white) !default; // 右侧关闭按钮颜色 +$-notice-bar-wrap-padding: var(--wot-notice-bar-wrap-padding, 14px $-size-side-padding) !default; // 换行下的padding + +/* pagination */ +$-pagination-content-padding: var(--wot-pagination-content-padding, 10px 15px) !default; +$-pagination-message-padding: var(--wot-pagination-message-padding, 1px 0 16px 0) !default; +$-pagination-message-fs: var(--wot-pagination-message-fs, 12px) !default; +$-pagination-message-color: var(--wot-pagination-message-color, rgba(0, 0, 0, 0.69)) !default; +$-pagination-nav-border: var(--wot-pagination-nav-border, 1px solid rgba(0, 0, 0, 0.45)) !default; +$-pagination-nav-border-radius: var(--wot-pagination-nav-border-radius, 16px) !default; +$-pagination-nav-fs: var(--wot-pagination-nav-fs, 12px) !default; +$-pagination-nav-width: var(--wot-pagination-nav-width, 60px) !default; +$-pagination-nav-color: var(--wot-pagination-nav-color, rgba(0, 0, 0, 0.85)) !default; +$-pagination-nav-content-fs: var(--wot-pagination-nav-content-fs, 12px) !default; +$-pagination-nav-sepatator-padding: var(--wot-pagination-nav-sepatator-padding, 0 4px) !default; +$-pagination-nav-current-color: var(--wot-pagination-nav-current-color, $-color-theme) !default; +$-pagination-icon-size: var(--wot-pagination-icon-size, $-fs-content) !default; + +/* picker */ +$-picker-toolbar-height: var(--wot-picker-toolbar-height, 54px) !default; // toolbar 操作条的高度 +$-picker-action-height: var(--wot-picker-action-height, 16px) !default; // toolbar 操作条的高度 +$-picker-toolbar-finish-color: var(--wot-picker-toolbar-finish-color, $-color-theme) !default; // toolbar 操作条完成按钮的颜色 +$-picker-toolbar-cancel-color: var(--wot-picker-toolbar-cancel-color, #666666) !default; // toolbar 操作条的边框颜色 +$-picker-toolbar-fs: var(--wot-picker-toolbar-fs, $-fs-title) !default; // toolbar 操作条的字号 +$-picker-toolbar-title-color: var(--wot-picker-toolbar-title-color, rgba(0, 0, 0, 0.85)) !default; // toolbar 操作台的标题颜色 +$-picker-column-fs: var(--wot-picker-column-fs, 16px) !default; // 选择器选项的字号 +$-picker-bg: var(--wot-picker-bg, $-color-white) !default; // 选择器选项的字号 +$-picker-column-active-fs: var(--wot-picker-column-active-fs, 18px) !default; // 选择器选项被选中的字号 +$-picker-column-color: var(--wot-picker-column-color, rgba(0, 0, 0, 0.85)) !default; // 选择器选项的颜色 +$-picker-column-height: var(--wot-picker-column-height, 210px) !default; // 列高 滚筒外部的高度 +$-picker-column-item-height: var(--wot-picker-column-item-height, 35px) !default; // 列高 滚筒外部的高度 +$-picker-column-select-bg: var(--wot-picker-column-select-bg, #f5f5f5) !default; +$-picker-loading-button-color: var(--wot-picker-loading-button-color, rgba(0, 0, 0, 0.25)) !default; // loading 背景颜色 +$-picker-column-padding: var(--wot-picker-column-padding, 0 $-size-side-padding-small) !default; // 选项内间距 + +$-picker-column-disabled-color: var(--wot-picker-column-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 选择器选项禁用的颜色 +$-picker-mask: var(--wot-picker-mask, linear-gradient(180deg, hsla(0, 0%, 100%, 0.9), hsla(0, 0%, 100%, 0.25))) + linear-gradient(0deg, hsla(0, 0%, 100%, 0.9), hsla(0, 0%, 100%, 0.25)) !default; // 上下阴影 +$-picker-loading-bg: var(--wot-picker-loading-bg, rgba($-color-white, 0.8)) !default; // loading 背景颜色 +$-picker-region-separator-color: var(--wot-picker-region-separator-color, rgba(0, 0, 0, 0.65)) !default; // 区域选择文字颜色 +$-picker-cell-arrow-size-large: var(--wot-picker-cell-arrow-size-large, $-cell-icon-size) !default; // cell 类型的大尺寸 右侧icon尺寸 + +$-picker-region-color: var(--wot-picker-region-color, rgba(0, 0, 0, 0.45)) !default; // 区域选择文字颜色 +$-picker-region-bg-active-color: var(--wot-picker-region-bg-active-color, $-color-theme) !default; // 区域选择激活选中背景颜色 + +$-picker-region-fs: var(--wot-picker-region-fs, 14px) !default; // 区域选择文字字号 + +/* col-picker */ +$-col-picker-selected-height: var(--wot-col-picker-selected-height, 44px) !default; // 弹框顶部值高度 +$-col-picker-selected-padding: var(--wot-col-picker-selected-padding, 0 16px) !default; // 弹框顶部值左右间距 +$-col-picker-selected-fs: var(--wot-col-picker-selected-fs, 14px) !default; // 弹框顶部值字号 +$-col-picker-selected-color: var(--wot-col-picker-selected-color, rgba(0, 0, 0, 0.85)) !default; // 弹框顶部值文字颜色 +$-col-picker-selected-fw: var(--wot-col-picker-selected-fw, 700) !default; // 弹框顶部值高亮字重 +$-col-picker-line-width: var(--wot-col-picker-line-width, 16px) !default; // 弹框顶部值高亮线条宽度 +$-col-picker-line-height: var(--wot-col-picker-line-height, 3px) !default; // 弹框顶部值高亮线条高度 +$-col-picker-line-color: var( + --wot-col-picker-line-color, + linear-gradient(315deg, rgba(81, 124, 240, 1), rgba(118, 158, 245, 1)) +) !default; // 弹框顶部值高亮线条颜色 +$-col-picker-line-box-shadow: var(--wot-col-picker-line-box-shadow, 0px 1px 2px 0px rgba(1, 87, 255, 0.2)) !default; // 弹框顶部值高亮线条阴影 +$-col-picker-list-height: var(--wot-col-picker-list-height, 53vh) !default; // 弹框列表高度 +$-col-picker-list-padding-bottom: var(--wot-col-picker-list-padding-bottom, 30px) !default; // 弹框列表底部间距 +$-col-picker-list-color: var(--wot-col-picker-list-color, rgba(0, 0, 0, 0.85)) !default; // 弹框列表文字颜色 +$-col-picker-list-color-disabled: var(--wot-col-picker-list-color-disabled, rgba(0, 0, 0, 0.15)) !default; // 弹框列表文字禁用颜色 +$-col-picker-list-color-tip: var(--wot-col-picker-list-color-tip, rgba(0, 0, 0, 0.45)) !default; // 弹框列表提示文字颜色 +$-col-picker-list-fs: var(--wot-col-picker-list-fs, 14px) !default; // 弹框列表文字字号 +$-col-picker-list-fs-tip: var(--wot-col-picker-list-fs-tip, 12px) !default; // 弹框列表提示文字字号 +$-col-picker-list-item-padding: var(--wot-col-picker-list-item-padding, 12px 15px) !default; // 弹框列表选项间距 +$-col-picker-list-checked-icon-size: var(--wot-col-picker-list-checked-icon-size, 18px) !default; // 弹框列表选中箭头大小 +$-col-picker-list-color-checked: var(--wot-col-picker-list-color-checked, $-color-theme) !default; // 弹框列表选中选项颜色 + +/* overlay */ +$-overlay-bg: var(--wot-overlay-bg, rgba(0, 0, 0, 0.65)) !default; +$-overlay-bg-dark: var(--wot-overlay-bg-dark, rgba(0, 0, 0, 0.75)) !default; + +/* popup */ +$-popup-close-size: var(--wot-popup-close-size, 24px) !default; // 关闭按钮尺寸 +$-popup-close-color: var(--wot-popup-close-color, #666) !default; // 关闭按钮颜色 + +/* progress */ +$-progress-padding: var(--wot-progress-padding, 9px 0 8px) !default; // 进度条内边距 +$-progress-bg: var(--wot-progress-bg, rgba(229, 229, 229, 1)) !default; // 进度条底色 +$-progress-danger-color: var(--wot-progress-danger-color, $-color-danger) !default; // 进度条danger颜色 +$-progress-success-color: var(--wot-progress-success-color, $-color-success) !default; // 进度条success进度条颜色 +$-progress-warning-color: var(--wot-progress-warning-color, $-color-warning) !default; // 进度条warning进度条颜色 + +$-progress-color: var(--wot-progress-color, $-color-theme) !default; // 进度条颜色 +$-progress-height: var(--wot-progress-height, 3px) !default; // 进度条高度 +$-progress-label-color: var(--wot-progress-label-color, #333) !default; // 文字颜色 +$-progress-label-fs: var(--wot-progress-label-fs, 14px) !default; // 文字字号 +$-progress-icon-fs: var(--wot-progress-icon-fs, 18px) !default; // 图标字号 + +/* radio */ +$-radio-margin: var(--wot-radio-margin, $-checkbox-margin) !default; // 多个单选框距离 +$-radio-label-margin: var(--wot-radio-label-margin, $-checkbox-label-margin) !default; // 右侧文字与左侧图标距离 +$-radio-size: var(--wot-radio-size, 16px) !default; // 左侧图标尺寸 +$-radio-bg: var(--wot-radio-bg, $-color-white) !default; // 左侧图标尺寸 +$-radio-label-fs: var(--wot-radio-label-fs, $-checkbox-label-fs) !default; // 右侧文字字号 +$-radio-label-color: var(--wot-radio-label-color, $-checkbox-label-color) !default; // 右侧文字颜色 +$-radio-checked-color: var(--wot-radio-checked-color, $-checkbox-checked-color) !default; // 选中颜色 +$-radio-disabled-color: var(--wot-radio-disabled-color, $-checkbox-disabled-color) !default; // 禁用颜色 +$-radio-disabled-label-color: var(--wot-radio-disabled-label-color, $-checkbox-disabled-label-color) !default; // 禁用文字颜色 + +$-radio-large-size: var(--wot-radio-large-size, $-checkbox-large-size) !default; // 左侧图标尺寸 +$-radio-large-label-fs: var(--wot-radio-large-label-fs, $-checkbox-large-label-fs) !default; // 右侧文字字号 + +$-radio-button-height: var(--wot-radio-button-height, $-checkbox-button-height) !default; // 按钮模式复选框高 +$-radio-button-min-width: var(--wot-radio-button-min-width, 60px) !default; // 按钮模式最小宽 +$-radio-button-max-width: var(--wot-radio-button-max-width, 144px) !default; // 按钮模式最大宽 +$-radio-button-radius: var(--wot-radio-button-radius, $-checkbox-button-radius) !default; // 按钮圆角大小 +$-radio-button-bg: var(--wot-radio-button-bg, $-checkbox-button-bg) !default; // 按钮模式背景颜色 +$-radio-button-fs: var(--wot-radio-button-fs, $-checkbox-button-font-size) !default; // 按钮模式字号 +$-radio-button-border: var(--wot-radio-button-border, $-checkbox-button-border) !default; // 按钮边框颜色 +$-radio-button-disabled-border: var(--wot-radio-button-disabled-border, $-checkbox-button-disabled-border) !default; // 按钮禁用边框颜色 + +$-radio-dot-size: var(--wot-radio-dot-size, 8px) !default; // 单选dot模式圆点尺寸 +$-radio-dot-large-size: var(--wot-radio-dot-large-size, 10px) !default; // 单选dot模式大尺寸圆点尺寸 +$-radio-dot-checked-bg: var(--wot-radio-dot-checked-bg, $-color-theme) !default; // 单选dot模式选中背景色 +$-radio-dot-checked-border-color: var(--wot-radio-dot-checked-border-color, $-color-theme) !default; // 单选dot模式选中边框色 +$-radio-dot-border-color: var(--wot-radio-dot-border-color, #dcdcdc) !default; // 单选dot模式边框色 +$-radio-dot-disabled-border: var(--wot-radio-dot-disabled-border, #d9d9d9) !default; // 单选dot模式禁用边框颜色 +$-radio-dot-disabled-bg: var(--wot-radio-dot-disabled-bg, #d9d9d9) !default; // 单选dot模式禁用背景颜色 + +/* search */ +$-search-side-padding: var(--wot-search-side-padding, $-size-side-padding) !default; // 左右间距 +$-search-padding: var(--wot-search-padding, 10px 0 10px $-search-side-padding) !default; // 不包含取消按钮的间距 +$-search-input-radius: var(--wot-search-input-radius, 15px) !default; // 输入框圆角大小 +$-search-input-bg: var(--wot-search-input-bg, $-color-bg) !default; // 输入框背景色 +$-search-input-height: var(--wot-search-input-height, 30px) !default; // 输入框高度 +$-search-input-padding: var(--wot-search-input-padding, 0 32px 0 42px) !default; // 输入框间距 +$-search-input-fs: var(--wot-search-input-fs, $-fs-content) !default; // 输入框字号 +$-search-input-color: var(--wot-search-input-color, #262626) !default; // 输入框文字颜色 +$-search-icon-color: var(--wot-search-icon-color, $-color-icon) !default; // 图标颜色 +$-search-icon-size: var(--wot-search-icon-size, 18px) !default; // 图标大小 +$-search-clear-icon-size: var(--wot-search-clear-icon-size, $-fs-title) !default; // 清除图标大小 +$-search-placeholder-color: var(--wot-search-placeholder-color, #bfbfbf) !default; // placeholder 颜色 +$-search-cancel-padding: var(--wot-search-cancel-padding, 0 $-search-side-padding 0 10px) !default; // 取消按钮间距 +$-search-cancel-fs: var(--wot-search-cancel-fs, $-fs-title) !default; // 取消按钮字号 +$-search-cancel-color: var(--wot-search-cancel-color, rgba(0, 0, 0, 0.65)) !default; // 取消按钮颜色 +$-search-light-bg: var(--wot-search-light-bg, $-color-bg) !default; // light 类型的容器背景色 + +/* slider */ +$-slider-fs: var(--wot-slider-fs, $-fs-content) !default; // 字体大小 +$-slider-handle-radius: var(--wot-slider-handle-radius, 12px) !default; // 滑块半径 +$-slider-handle-bg: var(--wot-slider-handle-bg, resultColor(139deg, $-color-theme, 'dark' 'light', #ffffff #f7f7f7, 0% 100%)) !default; // 滑块背景 +$-slider-axie-height: var(--wot-slider-axie-height, 3px) !default; // 滑轴高度 +$-slider-color: var(--wot-slider-color, #333) !default; // 字体颜色 +$-slider-axie-bg: var(--wot-slider-axie-bg, #e5e5e5) !default; // 滑轴的默认背景色 +$-slider-line-color: var( + --wot-slider-line-color, + resultColor(315deg, $-color-theme, 'dark' 'light', #517cf0 #769ef5, 0% 100%) +) !default; // 进度条颜色 +$-slider-disabled-color: var(--wot-slider-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 禁用状态下字体颜色 + +/* sort-button */ +$-sort-button-fs: var(--wot-sort-button-fs, $-fs-content) !default; // 字号 +$-sort-button-color: var(--wot-sort-button-color, $-color-content) !default; // 颜色 +$-sort-button-height: var(--wot-sort-button-height, 48px) !default; // 高度 +$-sort-button-line-height: var(--wot-sort-button-line-height, 3px) !default; // 下划线高度 +$-sort-button-line-color: var(--wot-sort-button-line-color, $-color-theme) !default; // 下划线颜色 + +/* steps */ +$-steps-icon-size: var(--wot-steps-icon-size, 22px) !default; // 图标尺寸 +$-steps-inactive-color: var(--wot-steps-inactive-color, rgba(0, 0, 0, 0.25)) !default; // 等待状态文字颜色 +$-steps-finished-color: var(--wot-steps-finished-color, $-color-theme) !default; // 完成文字颜色 +$-steps-icon-text-fs: var(--wot-steps-icon-text-fs, $-fs-content) !default; // 数字图标文字字号 +$-steps-error-color: var(--wot-steps-error-color, $-color-danger) !default; // 异常颜色 +$-steps-title-fs: var(--wot-steps-title-fs, $-fs-content) !default; // 标题字号 +$-steps-title-fw: var(--wot-steps-title-fw, $-fw-medium) !default; // 标题字重 +$-steps-label-fs: var(--wot-steps-label-fs, $-fs-secondary) !default; // 描述信息字号 +$-steps-description-color: var(--wot-steps-description-color, rgba(0, 0, 0, 0.45)) !default; // 描述信息颜色 +$-steps-is-icon-width: var(--wot-steps-is-icon-width, 30px) !default; // 自定义图标的宽度,给左右留白 +$-steps-line-color: var(--wot-steps-line-color, rgba(0, 0, 0, 0.15)) !default; // 线条颜色 +$-steps-dot-size: var(--wot-steps-dot-size, 7px) !default; // 点状大小 +$-steps-dot-active-size: var(--wot-steps-dot-active-size, 9px) !default; // 点状高亮大小 + +/* switch */ +$-switch-size: var(--wot-switch-size, 28px) !default; // switch大小 +$-switch-width: var(--wot-switch-width, calc(1.8em + 4px)) !default; // 宽度 +$-switch-height: var(--wot-switch-height, calc(1em + 4px)) !default; // 高度 +$-switch-circle-size: var(--wot-switch-circle-size, 1em) !default; // 圆点大小 +$-switch-border-color: var(--wot-switch-border-color, #e5e5e5) !default; // 边框颜色选中状态背景颜色 +$-switch-active-color: var(--wot-switch-active-color, $-color-theme) !default; // 选中状态背景 +$-switch-active-shadow-color: var(--wot-switch-active-shadow-color, rgba(0, 83, 162, 0.5)) !default; // 选中状态shadow颜色 +$-switch-inactive-color: var(--wot-switch-inactive-color, #eaeaea) !default; // 非选中背景颜色 +$-switch-inactive-shadow-color: var(--wot-switch-inactive-shadow-color, rgba(155, 155, 155, 0.5)) !default; // 非选中状态shadow颜色 + +/* tabs */ +$-tabs-nav-arrow-fs: var(--wot-tabs-nav-arrow-fs, 18px) !default; // 全部Icon字号 +$-tabs-nav-arrow-open-fs: var(--wot-tabs-nav-arrow-open-fs, 14px) !default; // 展开Icon字号 +$-tabs-nav-width: var(--wot-tabs-nav-width, 100vw) !default; // tabs 头部切换宽度 +$-tabs-nav-height: var(--wot-tabs-nav-height, 42px) !default; // 头部切换高度 +$-tabs-nav-fs: var(--wot-tabs-nav-fs, $-fs-content) !default; // 头部切换文字大小 +$-tabs-nav-color: var(--wot-tabs-nav-color, rgba(0, 0, 0, 0.85)) !default; // 头部切换文字颜色 +$-tabs-nav-bg: var(--wot-tabs-nav-bg, $-color-white) !default; // 背景颜色 +$-tabs-nav-active-color: var(--wot-tabs-nav-active-color, $-color-theme) !default; // 头部高亮颜色 +$-tabs-nav-disabled-color: var(--wot-tabs-nav-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 头部禁用颜色 +$-tabs-nav-line-height: var(--wot-tabs-nav-line-height, 3px) !default; // 高亮边框高度 +$-tabs-nav-line-width: var(--wot-tabs-nav-line-width, 19px) !default; // 高亮边框宽度 +$-tabs-nav-line-bg-color: var(--wot-tabs-nav-line-bg-color, $-color-theme) !default; // 底部条颜色 +$-tabs-nav-map-fs: var(--wot-tabs-nav-map-fs, $-fs-content) !default; // map 类型按钮字号 +$-tabs-nav-map-color: var(--wot-tabs-nav-map-color, rgba(0, 0, 0, 0.85)) !default; // map 类型按钮文字颜色 +$-tabs-nav-map-arrow-color: var(--wot-tabs-nav-map-arrow-color, rgba(0, 0, 0, 0.65)) !default; // map 类型箭头颜色 +$-tabs-nav-map-btn-before-bg: var( + --wot-tabs-nav-map-btn-before-bg, + linear-gradient(270deg, rgba(255, 255, 255, 1) 1%, rgba(255, 255, 255, 0) 100%) +) !default; // 左侧map遮罩阴影 +$-tabs-nav-map-button-back-color: var(--wot-tabs-nav-map-button-back-color, rgba(0, 0, 0, 0.04)) !default; // map 类型按钮边框颜色 +$-tabs-nav-map-button-radius: var(--wot-tabs-nav-map-button-radius, 16px) !default; // map 类型按钮圆角大小 +$-tabs-nav-map-modal-bg: var(--wot-tabs-nav-map-modal-bg, $-overlay-bg) !default; // map 类型蒙层背景色 + +/* tag */ +$-tag-fs: var(--wot-tag-fs, $-fs-secondary) !default; // 字号 +$-tag-color: var(--wot-tag-color, $-color-white) !default; // 字体颜色 +$-tag-small-fs: var(--wot-tag-small-fs, $-fs-aid) !default; // 小尺寸字号 +$-tag-info-color: var(--wot-tag-info-color, #585858) !default; // info 颜色 +$-tag-primary-color: var(--wot-tag-primary-color, $-color-theme) !default; // 主颜色 +$-tag-danger-color: var(--wot-tag-danger-color, $-color-danger) !default; // danger 颜色 +$-tag-warning-color: var(--wot-tag-warning-color, $-color-warning) !default; // warning 颜色 +$-tag-success-color: var(--wot-tag-success-color, $-color-success) !default; // success 颜色 +$-tag-info-bg: var(--wot-tag-info-bg, resultColor(49deg, $-color-black, 'dark' 'light', #808080 #999999, 0% 100%)) !default; // info 背景颜色 +$-tag-primary-bg: var(--wot-tag-primary-bg, $-color-theme) !default; // 主背景颜色 +$-tag-danger-bg: var(--wot-tag-danger-bg, $-color-danger) !default; // danger 背景颜色 +$-tag-warning-bg: var(--wot-tag-warning-bg, $-color-warning) !default; // warning 背景颜色 +$-tag-success-bg: var(--wot-tag-success-bg, $-color-success) !default; // success 背景颜色 +$-tag-round-color: var(--wot-tag-round-color, rgba(102, 102, 102, 1)) !default; // round 字体颜色 +$-tag-round-border-color: var(--wot-tag-round-border-color, rgba(225, 225, 225, 1)) !default; // round 边框颜色 +$-tag-round-radius: var(--wot-tag-round-radius, 12px) !default; // round 圆角大小 +$-tag-mark-radius: var(--wot-tag-mark-radius, 6px 2px 6px 2px) !default; // mark 圆角大小 +$-tag-close-size: var(--wot-tag-close-size, 14px) !default; // 关闭按钮字号 +$-tag-close-color: var(--wot-tag-close-color, $-tag-info-color) !default; // 关闭按钮颜色 +$-tag-close-active-color: var(--wot-tag-close-active-color, rgba(0, 0, 0, 0.45)) !default; // 关闭按钮 active 颜色 + +/* toast */ +$-toast-color: var(--wot-toast-color, $-color-white) !default; // 文字颜色 +$-toast-padding: var(--wot-toast-padding, 16px 24px) !default; // padding +$-toast-max-width: var(--wot-toast-max-width, 300px) !default; // 最大宽度 +$-toast-radius: var(--wot-toast-radius, 8px) !default; // 圆角大小 +$-toast-bg: var(--wot-toast-bg, $-overlay-bg) !default; // 背景色 +$-toast-fs: var(--wot-toast-fs, $-fs-content) !default; // 字号 +$-toast-line-height: var(--wot-toast-line-height, 20px) !default; // 行高 +$-toast-with-icon-min-width: var(--wot-toast-with-icon-min-width, 150px) !default; // 有图标的情况下最小宽度 +$-toast-icon-size: var(--wot-toast-icon-size, 32px) !default; // 图标大小 +$-toast-icon-margin-right: var(--wot-toast-icon-margin-right, 12px) !default; // 图标右边距 +$-toast-icon-margin-bottom: var(--wot-toast-icon-margin-bottom, 12px) !default; // 图标下边距 +$-toast-loading-padding: var(--wot-toast-loading-padding, 10px) !default; // loading状态下的padding +$-toast-loading-margin-bottom: var(--wot-toast-loading-margin-bottom, 16px) !default; // loading动画的margin-bottom +$-toast-box-shadow: var(--wot-toast-box-shadow, 0px 6px 16px 0px rgba(0, 0, 0, 0.08)) !default; // 外部阴影 + +/* loading */ +$-loading-size: var(--wot-loading-size, 32px) !default; // loading 大小 + +/* tooltip */ +$-tooltip-bg: var(--wot-tooltip-bg, rgba(38, 39, 40, 0.8)) !default; // 背景色 +$-tooltip-color: var(--wot-tooltip-color, $-color-white) !default; // 文字颜色 +$-tooltip-radius: var(--wot-tooltip-radius, 8px) !default; // 圆角大小 +$-tooltip-arrow-size: var(--wot-tooltip-arrow-size, 5px) !default; // 箭头大小 +$-tooltip-fs: var(--wot-tooltip-fs, $-fs-content) !default; // 字号 +$-tooltip-blur: var(--wot-tooltip-blur, 10px) !default; // 背景高斯模糊效果 +$-tooltip-padding: var(--wot-tooltip-padding, 9px 20px) !default; // 间距 +$-tooltip-close-size: var(--wot-tooltip-close-size, 6px) !default; // 背景高斯模糊效果 +$-tooltip-z-index: var(--wot-tooltip-z-index, 500) !default; +$-tooltip-line-height: var(--wot-tooltip-line-height, 18px) !default; // 行高 + +/* popover */ +$-popover-bg: var(--wot-popover-bg, $-color-white) !default; // 背景色 +$-popover-color: var(--wot-popover-color, rgba(0, 0, 0, 0.85)) !default; // 文字颜色 +$-popover-box-shadow: var(--wot-popover-box-shadow, 0px 2px 10px 0px rgba(0, 0, 0, 0.1)) !default; // 阴影颜色 +$-popover-arrow-box-shadow: var(--wot-popover-arrow-box-shadow, 0px 2px 10px 0px rgba(0, 0, 0, 0.2)) !default; // 阴影颜色 +$-popover-border-color: var(--wot-popover-border-color, rgba(0, 0, 0, 0.09)) !default; // 阴影颜色 +$-popover-radius: var(--wot-popover-radius, 4px) !default; // 圆角大小 +$-popover-arrow-size: var(--wot-popover-arrow-size, 6px) !default; // 箭头大小 +$-popover-fs: var(--wot-popover-fs, $-fs-content) !default; // 字号 +$-popover-padding: var(--wot-popover-padding, 15px) !default; // 间距 +$-popover-line-height: var(--wot-popover-line-height, 18px) !default; // 行高 +$-popover-z-index: var(--wot-popover-z-index, $-tooltip-z-index) !default; + +/* grid-item */ +$-grid-item-fs: var(--wot-grid-item-fs, 12px) !default; // 字号 +$-grid-item-bg: var(--wot-grid-item-bg, $-color-white) !default; // 字号 +$-grid-item-padding: var(--wot-grid-item-padding, 14px 0px) !default; // 内容的 padding +$-grid-item-border-color: var(--wot-grid-item-border-color, $-color-border-light) !default; // 边框颜色 +$-grid-item-hover-bg: var(--wot-grid-item-hover-bg, $-color-gray-3) !default; // hover背景色 +$-grid-item-hover-bg-dark: var(--wot-grid-item-hover-bg-dark, $-color-gray-7) !default; // 暗黑模式hover背景色 + +/* statustip */ +$-statustip-fs: var(--wot-statustip-fs, $-fs-content) !default; // 字号 +$-statustip-color: var(--wot-statustip-color, rgba(0, 0, 0, 0.45)) !default; // 文字颜色 +$-statustip-line-height: var(--wot-statustip-line-height, 16px) !default; // 文字行高 +$-statustip-padding: var(--wot-statustip-padding, 5px 10px) !default; // 间距 + +/* card */ +$-card-bg: var(--wot-card-bg, $-color-white) !default; // 背景色 +$-card-fs: var(--wot-card-fs, $-fs-content) !default; // 卡片字号 +$-card-padding: var(--wot-card-padding, 0 $-size-side-padding) !default; // 内边距 +$-card-footer-padding: var(--wot-card-footer-padding, 12px 0 16px) !default; // 底部内边距 +$-card-shadow-color: var(--wot-card-shadow-color, 0px 4px 8px 0px rgba(0, 0, 0, 0.02)) !default; // 阴影 +$-card-radius: var(--wot-card-radius, 8px) !default; // 圆角大小 +$-card-line-height: var(--wot-card-line-height, 1.1) !default; // 行高 +$-card-margin: var(--wot-card-margin, 0 $-size-side-padding) !default; // 外边距 +$-card-title-color: var(--wot-card-title-color, rgba(0, 0, 0, 0.85)) !default; // 标题颜色 +$-card-title-fs: var(--wot-card-title-fs, $-fs-title) !default; // 矩形卡片标题字号 +$-card-content-border-color: var(--wot-card-content-border-color, rgba(0, 0, 0, 0.09)) !default; // 内容边框 +$-card-rectangle-title-padding: var(--wot-card-rectangle-title-padding, 15px 15px 12px) !default; // 矩形卡片头部内边距 +$-card-rectangle-content-padding: var(--wot-card-rectangle-content-padding, 16px 0) !default; // 矩形卡片内容内边距 +$-card-rectangle-footer-padding: var(--wot-card-rectangle-footer-padding, 12px 0) !default; // 矩形卡片底部内边距 +$-card-content-color: var(--wot-card-content-color, rgba(0, 0, 0, 0.45)) !default; // 文本内容颜色 +$-card-content-line-height: var(--wot-card-content-line-height, 1.428) !default; // 文本内容行高 +$-card-content-margin: var(--wot-card-content-margin, 13px 0 12px) !default; // 内容外边距 +$-card-content-rectangle-margin: var(--wot-card-content-rectangle-margin, 14px 0 12px) !default; // 矩形卡片内容外边距 + +/* upload */ +$-upload-size: var(--wot-upload-size, 80px) !default; // upload的外边框默认尺寸 +$-upload-evoke-icon-size: var(--wot-upload-evoke-icon-size, 32px) !default; // 唤起项的图标大小 +$-upload-evoke-bg: var(--wot-upload-evoke-bg, rgba(0, 0, 0, 0.04)) !default; // 唤起项的背景色 +$-upload-evoke-color: var(--wot-upload-evoke-color, rgba(0, 0, 0, 0.25)) !default; // 唤起项的图标颜色 +$-upload-evoke-disabled-color: var(--wot-upload-evoke-disabled-color, rgba(0, 0, 0, 0.09)) !default; // 唤起项禁用颜色 +$-upload-close-icon-size: var(--wot-upload-close-icon-size, 16px) !default; // 移除按钮尺寸 +$-upload-close-icon-color: var(--wot-upload-close-icon-color, rgba(0, 0, 0, 0.65)) !default; // 移除按钮颜色 +$-upload-progress-fs: var(--wot-upload-progress-fs, 14px) !default; // 进度文字字号 +$-upload-file-fs: var(--wot-upload-file-fs, 12px) !default; // 文件名字号 +$-upload-file-color: var(--wot-upload-file-color, $-color-secondary) !default; // 文件名字颜色 +$-upload-preview-name-fs: var(--wot-upload-preview-name-fs, 12px) !default; // 预览图片名字号 +$-upload-preview-icon-size: var(--wot-upload-preview-icon-size, 24px) !default; // 预览内部图标尺寸 +$-upload-preview-name-bg: var(--wot-upload-preview-name-bg, rgba(0, 0, 0, 0.6)) !default; // 预览文件名背景色 +$-upload-preview-name-height: var(--wot-upload-preview-name-height, 22px) !default; // 预览文件名背景高度 +$-upload-cover-icon-size: var(--wot-upload-cover-icon-size, 22px) !default; // 视频/文件图标尺寸 + +/* curtain */ +$-curtain-content-radius: var(--wot-curtain-content-radius, 24px) !default; // 内容圆角 +$-curtain-content-close-color: var(--wot-curtain-content-close-color, $-color-white) !default; // 关闭按钮颜色 +$-curtain-content-close-fs: var(--wot-curtain-content-close-fs, $-fs-big) !default; // 关闭按钮大小 + +/* notify */ +$-notify-text-color: var(--wot-notify-text-color, $-color-white) !default; +$-notify-padding: var(--wot-notify-padding, 8px 16px) !default; +$-notify-font-size: var(--wot-notify-font-size, $-fs-content) !default; +$-notify-line-height: var(--wot-notify-line-height, 20px) !default; +$-notify-primary-background: var(--wot-notify-primary-background, $-color-theme) !default; +$-notify-success-background: var(--wot-notify-success-background, $-color-success) !default; +$-notify-danger-background: var(--wot-notify-danger-background, $-color-danger) !default; +$-notify-warning-background: var(--wot-notify-warning-background, $-color-warning) !default; + +/* skeleton */ +$-skeleton-background-color: var(--wot-skeleton-background-color, #eee) !default; +$-skeleton-animation-gradient: var(--wot-skeleton-animation-gradient, rgba(0, 0, 0, 0.04)) !default; +$-skeleton-animation-flashed: var(--wot-skeleton-animation-flashed, rgba(230, 230, 230, 0.3)) !default; +$-skeleton-text-height-default: var(--wot-skeleton-text-height-default, 16px) !default; +$-skeleton-rect-height-default: var(--wot-skeleton-rect-height-default, 16px) !default; +$-skeleton-circle-height-default: var(--wot-skeleton-circle-height-default, 48px) !default; +$-skeleton-row-margin-bottom: var(--wot-skeleton-row-margin-bottom, 16px) !default; +$-skeleton-border-radius-text: var(--wot-skeleton-border-radius-text, 2px) !default; +$-skeleton-border-radius-rect: var(--wot-skeleton-border-radius-rect, 4px) !default; +$-skeleton-border-radius-circle: var(--wot-skeleton-border-radius-circle, 50%) !default; + +/* circle */ +$-circle-text-color: var(--wot-circle-text-color, $-color-content) !default; // circle文字颜色 + +/* swiper */ +$-swiper-radius: var(--wot-swiper-radius, 8px); +$-swiper-item-padding: var(--wot-swiper-item-padding, 0); +$-swiper-item-text-color: var(--wot-swiper-item-text-color, #ffffff); +$-swiper-item-text-fs: var(--wot-swiper-item-text-fs, $-fs-title); + + +/* swiper-nav */ +// dot & dots-bar +$-swiper-nav-dot-color: var(--wot-swiper-nav-dot-color, $-font-white-2) !default; +$-swiper-nav-dot-active-color: var(--wot-swiper-nav-dot-active-color, $-font-white-1) !default; +$-swiper-nav-dot-size: var(--wot-swiper-nav-dot-size, 12rpx) !default; +$-swiper-nav-dots-bar-active-width: var(--wot-swiper-nav-dots-bar-active-width, 40rpx) !default; +// fraction +$-swiper-nav-fraction-color: var(--wot-swiper-nav-fraction-color, $-font-white-1) !default; +$-swiper-nav-fraction-bg-color: var(--wot-swiper-nav-fraction-bg-color, $-font-gray-3) !default; +$-swiper-nav-fraction-height: var(--wot-swiper-nav-fraction-height, 48rpx) !default; +$-swiper-nav-fraction-font-size: var(--wot-swiper-nav-fraction-font-size, 24rpx) !default; +// button +$-swiper-nav-btn-color: var(--wot-swiper-nav-btn-color, $-font-white-1) !default; +$-swiper-nav-btn-bg-color: var(--wot-swiper-nav-btn-bg-color, $-font-gray-3) !default; +$-swiper-nav-btn-size: var(--wot-swiper-nav-btn-size, 48rpx) !default; + +/* segmented */ +$-segmented-padding: var(--wot-segmented-padding, 4px) !default; // 分段器padding +$-segmented-item-bg-color: var(--wot-segmented-item-bg-color, #eeeeee) !default; +$-segmented-item-color: var(--wot-segmented-item-color, rgba(0, 0, 0, 0.85)) !default; // 标题文字颜色 +$-segmented-item-acitve-bg: var(--wot-segmented-item-acitve-bg, #ffffff) !default; // 标题文字颜色 +$-segmented-item-disabled-color: var(--wot-segmented-item-disabled-color, rgba(0, 0, 0, 0.25)) !default; // 标题文字禁用颜色 + +/* tabbar */ +$-tabbar-height: var(--wot-tabbar-height, 50px) !default; +$-tabbar-box-shadow: var( + --wot-tabbar-box-shadow, + 0 6px 30px 5px rgba(0, 0, 0, 0.05), + 0 16px 24px 2px rgba(0, 0, 0, 0.04), + 0 8px 10px -5px rgba(0, 0, 0, 0.08) +) !default; // round类型tabbar阴影 + +/* tabbar-item */ +$-tabbar-item-title-font-size: var(--wot-tabbar-item-title-font-size, 10px) !default; // tabbar选项文字大小 +$-tabbar-item-title-line-height: var(--wot-tabbar-item-title-line-height, initial) !default; // tabbar选项标题文字行高 +$-tabbar-inactive-color: var(--wot-tabbar-inactive-color, $-color-title) !default; // 标题文字和图标颜色 +$-tabbar-active-color: var(--wot-tabbar-active-color, $-color-theme) !default; // 选中文字和图标颜色 +$-tabbar-item-icon-size: var(--wot-tabbar-item-icon-size, 20px) !default; // tabbar选项图标大小 + +/* navbar */ +$-navbar-height: var(--wot-navbar-height, 44px) !default; // navbar高度 +$-navbar-color: var(--wot-navbar-color, $-font-gray-1) !default; // navbar字体颜色 +$-navbar-background: var(--wot-navbar-background, $-color-white) !default; // navbar背景颜色 +$-navbar-arrow-size: var(--wot-navbar-arrow-size, 24px) !default; // navbar左箭头图标大小 +$-navbar-desc-font-size: var(--wot-navbar-desc-font-size, 16px); // navbar 左箭头字体大小 +$-navbar-desc-font-color: var(--wot-navbar-desc-font-color, $-font-gray-1) !default; // navbar左右两侧字体颜色 +$-navbar-title-font-size: var(--wot-navbar-title-font-size, 18px); // navbar title字体大小 +$-navbar-title-font-weight: var(--wot-navbar-title-font-weight, 600); // navbar title字重 +$-navbar-disabled-opacity: var(--wot-navbar-disabled-opacity, 0.6) !default; // navbar左右两侧字体禁用 +$-navbar-hover-color: var(--wot-navbar-hover-color, #eee) !default; // navbar hover样式 + +/* navbar-capsule */ +$-navbar-capsule-border-color: var(--wot-navbar-capsule-border-color, #e7e7e7) !default; +$-navbar-capsule-border-radius: var(--wot-navbar-capsule-border-radius, 16px) !default; +$-navbar-capsule-width: var(--wot-navbar-capsule-width, 88px) !default; +$-navbar-capsule-height: var(--wot-navbar-capsule-height, 32px) !default; +$-navbar-capsule-icon-size: var(--wot-navbar-capsule-icon-size, 20px) !default; // navbar capsule图标大小 + +/* table */ +$-table-color: var(--wot-table-color, $-font-gray-1) !default; // 表格字体颜色 +$-table-bg: var(--wot-table-bg, #ffffff) !default; // 表格背景颜色 +$-table-stripe-bg: var(--wot-table-stripe-bg, #f3f3f3) !default; // 表格背景颜色 +$-table-border-color: var(--wot-table-border-color, #ececec) !default; // 表格边框颜色 +$-table-font-size: var(--wot-table-font-size, 13px) !default; // 表格字体大小 + +/* sidebar */ +$-sidebar-bg: var(--wot-sidebar-bg, $-color-gray-1) !default; // 侧边栏背景色 +$-sidebar-width: var(--wot-sidebar-width, 104px) !default; // 侧边栏宽度 +$-sidebar-height: var(--wot-sidebar-height, 100%) !default; // 侧边栏高度 + +/* sidebar-item */ +$-sidebar-color: var(--wot-sidebar-color, $-font-gray-1) !default; +$-sidebar-item-height: var(--wot-sidebar-item-height, 56px) !default; +$-sidebar-item-line-height: var(--wot-sidebar-item-line-height, 24px) !default; +$-sidebar-disabled-color: var(--wot-side-bar-disabled-color, $-font-gray-4) !default; +$-sidebar-active-color: var(--wot-sidebar-active-color, $-color-theme) !default; // 激活项字体颜色 +$-sidebar-active-bg: var(--wot-sidebar-active-bg, $-color-white) !default; // 激活项背景颜色 +$-sidebar-hover-bg: var(--wot-sidebar-hover-bg, $-color-gray-2) !default; // 激活项点击背景颜色 +$-sidebar-border-radius: var(--wot-sidebar-border-radius, 8px) !default; +$-sidebar-font-size: var(--wot-sidebar-font-size, 16px) !default; +$-sidebar-icon-size: var(--wot-sidebar-icon-size, 20px) !default; +$-sidebar-active-border-width: var(--wot-sidebar-active-border-width, 4px) !default; +$-sidebar-active-border-height: var(--wot-sidebar-active-border-height, 16px) !default; + +/* fab */ +$-fab-trigger-height: var(--wot-fab-trigger-height, 56px) !default; +$-fab-trigger-width: var(--wot-fab-trigger-width, 56px) !default; +$-fab-actions-padding: var(--wot-actions-padding, 12px) !default; +$-fab-icon-fs: var(--wot-fab-icon-fs, 20px) !default; + +/* count-down */ +$-count-down-text-color: var(--wot-count-down-text-color, $-color-gray-8) !default; +$-count-down-font-size: var(--wot-count-down-font-size, $-fs-content) !default; +$-count-down-line-height: var(--wot-count-down-line-height, 20px) !default; + +/* keyboard */ +$-keyboard-key-height: var(--wot-keyboard-key-height, 48px) !default; +$-keyboard-key-font-size: var(--wot-keyboard-key-font-size, 28px) !default; +$-keyboard-key-background: var(--wot-keyboard-key-background, $-color-white) !default; +$-keyboard-key-border-radius: var(--wot-keyboard-key-border-radius, 8px) !default; +$-keyboard-delete-font-size: var(--wot-keyboard-delete-font-size, 16px) !default; +$-keyboard-key-active-color: var(--wot-keyboard-key-active-color, $-color-gray-3) !default; +$-keyboard-button-text-color: var(--wot-keyboard-button-text-color, $-color-white) !default; +$-keyboard-button-background: var(--wot-keyboard--button-background, $-color-theme) !default; +$-keyboard-button-active-opacity: var(--wot-keyboard-button-active-opacity, 0.6) !default; +$-keyboard-background: var(--wot-keyboard-background, $-color-gray-2) !default; +$-keyboard-title-height: var(--wot-keyboard-title-height, 34px) !default; +$-keyboard-title-color: var(--wot-keyboard-title-color, $-color-gray-7) !default; +$-keyboard-title-font-size: var(--wot-keyboard-title-font-size, 16px) !default; +$-keyboard-close-padding: var(--wot-keyboard-title-font-size, 0 16px) !default; +$-keyboard-close-color: var(--wot-keyboard-close-color, $-color-theme) !default; +$-keyboard-close-font-size: var(--wot-keyboard-close-font-size, 14px) !default; +$-keyboard-icon-size: var(--wot-keyboard-icon-size, 22px) !default; + +/* number-keyboard */ +$-number-keyboard-key-height: var(--wot-number-keyboard-key-height, 48px) !default; +$-number-keyboard-key-font-size: var(--wot-number-keyboard-key-font-size, 28px) !default; +$-number-keyboard-key-background: var(--wot-number-keyboard-key-background, $-color-white) !default; +$-number-keyboard-key-border-radius: var(--wot-number-keyboard-key-border-radius, 8px) !default; +$-number-keyboard-delete-font-size: var(--wot-number-keyboard-delete-font-size, 16px) !default; +$-number-keyboard-key-active-color: var(--wot-number-keyboard-key-active-color, $-color-gray-3) !default; +$-number-keyboard-button-text-color: var(--wot-number-keyboard-button-text-color, $-color-white) !default; +$-number-keyboard-button-background: var(--wot-number-keyboard--button-background, $-color-theme) !default; +$-number-keyboard-button-active-opacity: var(--wot-number-keyboard-button-active-opacity, 0.6) !default; +$-number-keyboard-background: var(--wot-number-keyboard-background, $-color-gray-2) !default; +$-number-keyboard-title-height: var(--wot-number-keyboard-title-height, 34px) !default; +$-number-keyboard-title-color: var(--wot-number-keyboard-title-color, $-color-gray-7) !default; +$-number-keyboard-title-font-size: var(--wot-number-keyboard-title-font-size, 16px) !default; +$-number-keyboard-close-padding: var(--wot-number-keyboard-title-font-size, 0 16px) !default; +$-number-keyboard-close-color: var(--wot-number-keyboard-close-color, $-color-theme) !default; +$-number-keyboard-close-font-size: var(--wot-number-keyboard-close-font-size, 14px) !default; +$-number-keyboard-icon-size: var(--wot-number-keyboard-icon-size, 22px) !default; + +/* passwod-input */ +$-password-input-height: var(--wot-password-input-height, 50px); +$-password-input-margin: var(--wot-password-input-margin, 16px); +$-password-input-font-size: var(--wot-password-input-margin, 20px); +$-password-input-radius: var(--wot-password-input-radius, 6px); +$-password-input-background: var(--wot-password-input-background, #fff); +$-password-input-info-color: var(--wot-password-input-info-color, $-color-info); +$-password-input-info-font-size: var(--wot-password-input-info-font-size, $-fs-content); +$-password-input-border-color: var(--wot-password-border-color, #ebedf0); +$-password-input-error-info-color: var(--wot-password-input-error-info-color, $-color-danger); +$-password-input-dot-size: var(--wot-password-input-dot-size, 10px); +$-password-input-dot-color: var(--wot-password-input-dot-color, $-color-gray-8); +$-password-input-text-color: var(--wot-password-input-text-color, $-color-gray-8); +$-password-input-cursor-color: var(--wot-password-input-cursor-color, $-color-gray-8); +$-password-input-cursor-width: var(--wot-password-input-cursor-width, 1px); +$-password-input-cursor-height: var(--wot-password-input-cursor-height, 40%); +$-password-input-cursor-duration: var(--wot-password-input-cursor-duration, 1s); + +/* form-item */ +$-form-item-error-message-color: var(--wot-form-item-error-message-color, $-color-danger) !default; +$-form-item-error-message-font-size: var(--wot-form-item-error-message-font-size, $-fs-secondary) !default; +$-form-item-error-message-line-height: var(--wot-form-item-error-message-line-height, 24px) !default; + +/* backtop */ +$-backtop-bg: var(--wot-backtop-bg, #e1e1e1) !default; +$-backtop-icon-size: var(--wot-backtop-icon-size, 20px) !default; + +/* index-bar */ +$-index-bar-index-font-size: var(--wot-index-bar-index-font-size, $-fs-aid) !default; + +/* text */ +$-text-info-color: var(--wot-text-info-color, $-color-info) !default; +$-text-primary-color: var(--wot-text-primary-color, $-color-theme) !default; +$-text-error-color: var(--wot-text-error-color, $-color-danger) !default; +$-text-warning-color: var(--wot-text-warning-color, $-color-warning) !default; +$-text-success-color: var(--wot-text-success-color, $-color-success) !default; + +/* video-preview */ +$-video-preview-bg: var(--wot-video-preview-bg, rgba(0, 0, 0, 0.8)) !default; // 背景色 +$-video-preview-close-color: var(--wot-video-preview-close-color, #fff) !default; // 图标颜色 +$-video-preview-close-font-size: var(--wot-video-preview-close-font-size, 20px) !default; // 图标大小 + +/* img-cropper */ +$-img-cropper-icon-size: var(--wot-img-cropper-icon-size, $-fs-big) !default; // 图标大小 +$-img-cropper-icon-color: var(--wot-img-cropper-icon-color, #fff) !default; // 图标颜色 + +/* floating-panel */ +$-floating-panel-bg: var(--wot-floating-panel-bg, $-color-white) !default; // 背景色 +$-floating-panel-radius: var(--wot-floating-panel-radius, 16px) !default; // 圆角 +$-floating-panel-z-index: var(--wot-floating-panel-z-index, 99) !default; // 层级 +$-floating-panel-header-height: var(--wot-floating-panel-header-height, 30px) !default; // 头部高度 +$-floating-panel-bar-width: var(--wot-floating-panel-bar-width, 20px) !default; // bar 宽度 +$-floating-panel-bar-height: var(--wot-floating-panel-bar-height, 3px) !default; // bar 高度 +$-floating-panel-bar-bg: var(--wot-floating-panel-bar-bg, $-color-gray-5) !default; // bar 背景色 +$-floating-panel-bar-radius: var(--wot-floating-panel-bar-radius, 4px) !default; // bar 圆角 +$-floating-panel-content-bg: var(--wot-floating-panel-content-bg, $-color-white) !default; // 内容背景色 + +/* signature */ +$-signature-bg: var(--wot-signature-bg, $-color-white) !default; // 背景色 +$-signature-radius: var(--wot-signature-radius, 4px) !default; // 圆角 +$-signature-border: var(--wot-signature-border, 1px solid $-color-gray-5) !default; // 边框圆角 +$-signature-footer-margin-top: var(--wot-signature-footer-margin-top, 8px) !default; // 底部按钮上边距 +$-signature-button-margin-left: var(--wot-signature-button-margin-left, 8px) !default; // 底部按钮左边距 + + + diff --git a/src/uni_modules/wot-design-uni/components/common/base64.ts b/src/uni_modules/wot-design-uni/components/common/base64.ts new file mode 100644 index 0000000..65aa2e8 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/base64.ts @@ -0,0 +1,29 @@ +const _b64chars: string[] = [...'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'] +const _mkUriSafe = (src: string): string => src.replace(/[+/]/g, (m0: string) => (m0 === '+' ? '-' : '_')).replace(/=+\$/m, '') +const fromUint8Array = (src: Uint8Array, rfc4648 = false): string => { + let b64 = '' + for (let i = 0, l = src.length; i < l; i += 3) { + const [a0, a1, a2] = [src[i], src[i + 1], src[i + 2]] + const ord = (a0 << 16) | (a1 << 8) | a2 + b64 += _b64chars[ord >>> 18] + b64 += _b64chars[(ord >>> 12) & 63] + b64 += typeof a1 !== 'undefined' ? _b64chars[(ord >>> 6) & 63] : '=' + b64 += typeof a2 !== 'undefined' ? _b64chars[ord & 63] : '=' + } + return rfc4648 ? _mkUriSafe(b64) : b64 +} +const _btoa: (s: string) => string = + typeof btoa === 'function' + ? (s: string) => btoa(s) + : (s: string) => { + if (s.charCodeAt(0) > 255) { + throw new RangeError('The string contains invalid characters.') + } + return fromUint8Array(Uint8Array.from(s, (c: string) => c.charCodeAt(0))) + } +const utob = (src: string): string => unescape(encodeURIComponent(src)) + +export default function encode(src: string, rfc4648 = false): string { + const b64 = _btoa(utob(src)) + return rfc4648 ? _mkUriSafe(b64) : b64 +} diff --git a/src/uni_modules/wot-design-uni/components/common/canvasHelper.ts b/src/uni_modules/wot-design-uni/components/common/canvasHelper.ts new file mode 100644 index 0000000..ee17e14 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/canvasHelper.ts @@ -0,0 +1,49 @@ +/** + * 适配 canvas 2d 上下文 + * @param ctx canvas 2d 上下文 + * @returns + */ +export function canvas2dAdapter(ctx: CanvasRenderingContext2D): UniApp.CanvasContext { + return Object.assign(ctx, { + setFillStyle(color: string | CanvasGradient) { + ctx.fillStyle = color + }, + setStrokeStyle(color: string | CanvasGradient | CanvasPattern) { + ctx.strokeStyle = color + }, + setLineWidth(lineWidth: number) { + ctx.lineWidth = lineWidth + }, + setLineCap(lineCap: 'butt' | 'round' | 'square') { + ctx.lineCap = lineCap + }, + + setFontSize(font: string) { + ctx.font = font + }, + setGlobalAlpha(alpha: number) { + ctx.globalAlpha = alpha + }, + setLineJoin(lineJoin: 'bevel' | 'round' | 'miter') { + ctx.lineJoin = lineJoin + }, + setTextAlign(align: 'left' | 'center' | 'right') { + ctx.textAlign = align + }, + setMiterLimit(miterLimit: number) { + ctx.miterLimit = miterLimit + }, + setShadow(offsetX: number, offsetY: number, blur: number, color: string) { + ctx.shadowOffsetX = offsetX + ctx.shadowOffsetY = offsetY + ctx.shadowBlur = blur + ctx.shadowColor = color + }, + setTextBaseline(textBaseline: 'top' | 'bottom' | 'middle') { + ctx.textBaseline = textBaseline + }, + createCircularGradient() {}, + draw() {}, + addColorStop() {} + }) as unknown as UniApp.CanvasContext +} diff --git a/src/uni_modules/wot-design-uni/components/common/clickoutside.ts b/src/uni_modules/wot-design-uni/components/common/clickoutside.ts new file mode 100644 index 0000000..0800afd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/clickoutside.ts @@ -0,0 +1,34 @@ +/* + * @Author: weisheng + * @Date: 2023-07-02 22:51:06 + * @LastEditTime: 2024-03-16 19:59:07 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/common/clickoutside.ts + * 记得注释 + */ +let queue: any[] = [] + +export function pushToQueue(comp: any) { + queue.push(comp) +} + +export function removeFromQueue(comp: any) { + queue = queue.filter((item) => { + return item.$.uid !== comp.$.uid + }) +} + +export function closeOther(comp: any) { + queue.forEach((item) => { + if (item.$.uid !== comp.$.uid) { + item.$.exposed.close() + } + }) +} + +export function closeOutside() { + queue.forEach((item) => { + item.$.exposed.close() + }) +} diff --git a/src/uni_modules/wot-design-uni/components/common/event.ts b/src/uni_modules/wot-design-uni/components/common/event.ts new file mode 100644 index 0000000..44a00e4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/event.ts @@ -0,0 +1,8 @@ +export const UPDATE_MODEL_EVENT = 'update:modelValue' +export const CHANGE_EVENT = 'change' +export const INPUT_EVENT = 'input' +export const CLICK_EVENT = 'click' +export const CLOSE_EVENT = 'close' +export const OPEN_EVENT = 'open' +export const CONFIRM_EVENT = 'confirm' +export const CANCEL_EVENT = 'cancel' diff --git a/src/uni_modules/wot-design-uni/components/common/interceptor.ts b/src/uni_modules/wot-design-uni/components/common/interceptor.ts new file mode 100644 index 0000000..d573491 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/interceptor.ts @@ -0,0 +1,43 @@ +import { isPromise } from './util' + +function noop() {} + +export type Interceptor = (...args: any[]) => Promise | boolean | undefined | void + +export function callInterceptor( + interceptor: Interceptor | undefined, + { + args = [], + done, + canceled, + error + }: { + args?: unknown[] + done: () => void + canceled?: () => void + error?: () => void + } +) { + if (interceptor) { + // eslint-disable-next-line prefer-spread + const returnVal = interceptor.apply(null, args) + + if (isPromise(returnVal)) { + returnVal + .then((value) => { + if (value) { + done() + } else if (canceled) { + canceled() + } + }) + .catch(error || noop) + } else if (returnVal) { + done() + } else if (canceled) { + canceled() + } + } else { + done() + } +} diff --git a/src/uni_modules/wot-design-uni/components/common/props.ts b/src/uni_modules/wot-design-uni/components/common/props.ts new file mode 100644 index 0000000..ebb9dc0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/props.ts @@ -0,0 +1,51 @@ +import type { PropType } from 'vue' + +export const unknownProp = null as unknown as PropType + +export const numericProp = [Number, String] + +export const truthProp = { + type: Boolean, + default: true as const +} + +export const makeRequiredProp = (type: T) => ({ + type, + required: true as const +}) + +export const makeArrayProp = () => ({ + type: Array as PropType, + default: () => [] +}) + +export const makeBooleanProp = (defaultVal: T) => ({ + type: Boolean, + default: defaultVal +}) + +export const makeNumberProp = (defaultVal: T) => ({ + type: Number, + default: defaultVal +}) + +export const makeNumericProp = (defaultVal: T) => ({ + type: numericProp, + default: defaultVal +}) + +export const makeStringProp = (defaultVal: T) => ({ + type: String as unknown as PropType, + default: defaultVal +}) + +export const baseProps = { + /** + * 自定义根节点样式 + */ + customStyle: makeStringProp(''), + /** + * 自定义根节点样式类 + */ + customClass: makeStringProp('') +} diff --git a/src/uni_modules/wot-design-uni/components/common/util.ts b/src/uni_modules/wot-design-uni/components/common/util.ts new file mode 100644 index 0000000..7f2819e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/common/util.ts @@ -0,0 +1,778 @@ +import { AbortablePromise } from './AbortablePromise' + +type NotUndefined = T extends undefined ? never : T + +/** + * 生成uuid + * @returns string + */ +export function uuid() { + return s4() + s4() + s4() + s4() + s4() + s4() + s4() + s4() +} + +function s4() { + return Math.floor((1 + Math.random()) * 0x10000) + .toString(16) + .substring(1) +} + +/** + * @description 对num自动填充px + * @param {Number} num + * @return {string} num+px + */ +export function addUnit(num: number | string) { + return Number.isNaN(Number(num)) ? `${num}` : `${num}px` +} + +/** + * @description 判断target是否对象 + * @param value + * @return {boolean} + */ +export function isObj(value: any): value is object { + return Object.prototype.toString.call(value) === '[object Object]' || typeof value === 'object' +} + +/** + * 获取目标原始类型 + * @param target 任意类型 + * @returns {string} type 数据类型 + */ +export function getType(target: unknown): string { + // 得到原生类型 + const typeStr = Object.prototype.toString.call(target) + // 拿到类型值 + const match = typeStr.match(/\[object (\w+)\]/) + const type = match && match.length ? match[1].toLowerCase() : '' + // 类型值转小写并返回 + return type +} + +/** + * @description 默认的外部格式化函数 - picker 组件 + * @param items - 要格式化的数据项数组或单个数据项 + * @param kv - 配置对象,包含 labelKey 作为键值 + * @returns 格式化后的字符串 + */ +export const defaultDisplayFormat = function (items: any[] | Record, kv?: { labelKey?: string }): string { + const labelKey: string = kv?.labelKey || 'value' + + if (Array.isArray(items)) { + return items.map((item) => item[labelKey]).join(', ') + } else { + return items[labelKey] + } +} + +/** + * @description 默认函数占位符 - pickerView组件 + * @param value 值 + * @return value + */ +export const defaultFunction = (value: T): T => value + +/** + * @description 检查值是否不为空 + * @param value 值 + * @return {Boolean} 是否不为空 + */ +export const isDef = (value: T): value is NonNullable => value !== undefined && value !== null + +/** + * @description 防止数字小于零 + * @param {number} num + * @param {string} label 标签 + */ +export const checkNumRange = (num: number, label: string = 'value'): void => { + if (num < 0) { + throw new Error(`${label} shouldn't be less than zero`) + } +} + +/** + * @description 防止 pixel 无意义 + * @param {number} num + * @param {string} label 标签 + */ +export const checkPixelRange = (num: number, label: string = 'value'): void => { + if (num <= 0) { + throw new Error(`${label} should be greater than zero`) + } +} + +/** + * 将 RGB 值转换为十六进制颜色代码。 + * @param {number} r - 红色分量 (0-255)。 + * @param {number} g - 绿色分量 (0-255)。 + * @param {number} b - 蓝色分量 (0-255)。 + * @returns {string} 十六进制颜色代码 (#RRGGBB)。 + */ +export function rgbToHex(r: number, g: number, b: number): string { + // 将 RGB 分量组合成一个十六进制数。 + const hex = ((r << 16) | (g << 8) | b).toString(16) + + // 使用零填充十六进制数,确保它有 6 位数字(RGB 范围)。 + const paddedHex = '#' + '0'.repeat(Math.max(0, 6 - hex.length)) + hex + + return paddedHex +} + +/** + * 将十六进制颜色代码转换为 RGB 颜色数组。 + * @param hex 十六进制颜色代码(例如:'#RRGGBB') + * @returns 包含红、绿、蓝三个颜色分量的数组 + */ +export function hexToRgb(hex: string): number[] { + const rgb: number[] = [] + + // 从第一个字符开始,每两个字符代表一个颜色分量 + for (let i = 1; i < 7; i += 2) { + // 将两个字符的十六进制转换为十进制,并添加到 rgb 数组中 + rgb.push(parseInt('0x' + hex.slice(i, i + 2), 16)) + } + + return rgb +} + +/** + * 计算渐变色的中间变量数组。 + * @param {string} startColor 开始颜色 + * @param {string} endColor 结束颜色 + * @param {number} step 获取渲染位置,默认为中间位置 + * @returns {string[]} 渐变色中间颜色变量数组 + */ +export const gradient = (startColor: string, endColor: string, step: number = 2): string[] => { + // 将hex转换为rgb + const sColor: number[] = hexToRgb(startColor) + const eColor: number[] = hexToRgb(endColor) + + // 计算R\G\B每一步的差值 + const rStep: number = (eColor[0] - sColor[0]) / step + const gStep: number = (eColor[1] - sColor[1]) / step + const bStep: number = (eColor[2] - sColor[2]) / step + + const gradientColorArr: string[] = [] + for (let i = 0; i < step; i++) { + // 计算每一步的hex值 + gradientColorArr.push( + rgbToHex(parseInt(String(rStep * i + sColor[0])), parseInt(String(gStep * i + sColor[1])), parseInt(String(bStep * i + sColor[2]))) + ) + } + return gradientColorArr +} + +/** + * 确保数值不超出指定范围。 + * @param {number} num 要限制范围的数值 + * @param {number} min 最小范围 + * @param {number} max 最大范围 + * @returns {number} 在指定范围内的数值 + */ +export const range = (num: number, min: number, max: number): number => { + // 使用 Math.min 和 Math.max 保证 num 不会超出指定范围 + return Math.min(Math.max(num, min), max) +} + +/** + * 比较两个值是否相等。 + * @param {any} value1 第一个值 + * @param {any} value2 第二个值 + * @returns {boolean} 如果值相等则为 true,否则为 false + */ +export const isEqual = (value1: any, value2: any): boolean => { + // 使用严格相等运算符比较值是否相等 + if (value1 === value2) { + return true + } + + // 如果其中一个值不是数组,则认为值不相等 + if (!Array.isArray(value1) || !Array.isArray(value2)) { + return false + } + + // 如果数组长度不相等,则认为值不相等 + if (value1.length !== value2.length) { + return false + } + + // 逐个比较数组元素是否相等 + for (let i = 0; i < value1.length; ++i) { + if (value1[i] !== value2[i]) { + return false + } + } + + // 所有比较均通过,则认为值相等 + return true +} + +/** + * 在数字前补零,使其达到指定长度。 + * @param {number | string} number 要补零的数字 + * @param {number} length 目标长度,默认为 2 + * @returns {string} 补零后的结果 + */ +export const padZero = (number: number | string, length: number = 2): string => { + // 将输入转换为字符串 + let numStr: string = number.toString() + + // 在数字前补零,直到达到指定长度 + while (numStr.length < length) { + numStr = '0' + numStr + } + + return numStr +} + +/** @description 全局变量id */ +export const context = { + id: 1000 +} + +export type RectResultType = T extends true ? UniApp.NodeInfo[] : UniApp.NodeInfo + +/** + * 获取节点信息 + * @param selector 节点选择器 #id,.class + * @param all 是否返回所有 selector 对应的节点 + * @param scope 作用域(支付宝小程序无效) + * @param useFields 是否使用 fields 方法获取节点信息 + * @returns 节点信息或节点信息数组 + */ +export function getRect(selector: string, all: T, scope?: any, useFields?: boolean): Promise> { + return new Promise>((resolve, reject) => { + let query: UniNamespace.SelectorQuery | null = null + if (scope) { + query = uni.createSelectorQuery().in(scope) + } else { + query = uni.createSelectorQuery() + } + + const method = all ? 'selectAll' : 'select' + + const callback = (rect: UniApp.NodeInfo | UniApp.NodeInfo[]) => { + if (all && isArray(rect) && rect.length > 0) { + resolve(rect as RectResultType) + } else if (!all && rect) { + resolve(rect as RectResultType) + } else { + reject(new Error('No nodes found')) + } + } + + if (useFields) { + query[method](selector).fields({ size: true, node: true }, callback).exec() + } else { + query[method](selector).boundingClientRect(callback).exec() + } + }) +} + +/** + * 将驼峰命名转换为短横线命名。 + * @param {string} word 待转换的词条 + * @returns {string} 转换后的结果 + */ +export function kebabCase(word: string): string { + // 使用正则表达式匹配所有大写字母,并在前面加上短横线,然后转换为小写 + const newWord: string = word + .replace(/[A-Z]/g, function (match) { + return '-' + match + }) + .toLowerCase() + + return newWord +} + +/** + * 将短横线链接转换为驼峰命名 + * @param word 需要转换的短横线链接 + * @returns 转换后的驼峰命名字符串 + */ +export function camelCase(word: string): string { + return word.replace(/-(\w)/g, (_, c) => c.toUpperCase()) +} + +/** + * 检查给定值是否为数组。 + * @param {any} value 要检查的值 + * @returns {boolean} 如果是数组则返回 true,否则返回 false + */ +export function isArray(value: any): value is Array { + // 如果 Array.isArray 函数可用,直接使用该函数检查 + if (typeof Array.isArray === 'function') { + return Array.isArray(value) + } + // 否则,使用对象原型的 toString 方法进行检查 + return Object.prototype.toString.call(value) === '[object Array]' +} + +/** + * 检查给定值是否为函数。 + * @param {any} value 要检查的值 + * @returns {boolean} 如果是函数则返回 true,否则返回 false + */ +// eslint-disable-next-line @typescript-eslint/ban-types +export function isFunction(value: any): value is T { + return getType(value) === 'function' || getType(value) === 'asyncfunction' +} + +/** + * 检查给定值是否为字符串。 + * @param {unknown} value 要检查的值 + * @returns {value is string} 如果是字符串则返回 true,否则返回 false + */ +export function isString(value: unknown): value is string { + return getType(value) === 'string' +} + +/** + * 否是数值 + * @param {*} value + */ +export function isNumber(value: any): value is number { + return getType(value) === 'number' +} + +/** + * 检查给定值是否为 Promise 对象。 + * @param {unknown} value 要检查的值 + * @returns {value is Promise} 如果是 Promise 对象则返回 true,否则返回 false + */ +export function isPromise(value: unknown): value is Promise { + // 先将 value 断言为 object 类型 + if (isObj(value) && isDef(value)) { + // 然后进一步检查 value 是否具有 then 和 catch 方法,并且它们是函数类型 + return isFunction((value as Promise).then) && isFunction((value as Promise).catch) + } + return false // 如果 value 不是对象类型,则肯定不是 Promise +} + +/** + * 检查给定的值是否为布尔类型 + * @param value 要检查的值 + * @returns 如果值为布尔类型,则返回true,否则返回false + */ +export function isBoolean(value: any): value is boolean { + return typeof value === 'boolean' +} + +export function isUndefined(value: any): value is undefined { + return typeof value === 'undefined' +} + +export function isNotUndefined(value: T): value is NotUndefined { + return !isUndefined(value) +} + +/** + * 检查给定的值是否为奇数 + * @param value 要检查的值 + * @returns + */ +export function isOdd(value: number): boolean { + if (typeof value !== 'number') { + throw new Error('输入必须为数字') + } + + // 使用取模运算符来判断是否为奇数 + // 如果 number 除以 2 的余数为 1,就是奇数 + // 否则是偶数 + return value % 2 === 1 +} + +/** + * 是否为base64图片 + * @param {string} url + * @return + */ +export function isBase64Image(url: string) { + // 使用正则表达式检查URL是否以"data:image"开头,这是Base64图片的常见前缀 + return /^data:image\/(png|jpg|jpeg|gif|bmp);base64,/.test(url) +} + +/** + * 将外部传入的样式格式化为可读的 CSS 样式。 + * @param {object | object[]} styles 外部传入的样式对象或数组 + * @returns {string} 格式化后的 CSS 样式字符串 + */ +export function objToStyle(styles: Record | Record[]): string { + // 如果 styles 是数组类型 + if (isArray(styles)) { + // 使用过滤函数去除空值和 null 值的元素 + // 对每个非空元素递归调用 objToStyle,然后通过分号连接 + const result = styles + .filter(function (item) { + return item != null && item !== '' + }) + .map(function (item) { + return objToStyle(item) + }) + .join(';') + + // 如果结果不为空,确保末尾有分号 + return result ? (result.endsWith(';') ? result : result + ';') : '' + } + + if (isString(styles)) { + // 如果是字符串且不为空,确保末尾有分号 + return styles ? (styles.endsWith(';') ? styles : styles + ';') : '' + } + + // 如果 styles 是对象类型 + if (isObj(styles)) { + // 使用 Object.keys 获取所有属性名 + // 使用过滤函数去除值为 null 或空字符串的属性 + // 对每个属性名和属性值进行格式化,通过分号连接 + const result = Object.keys(styles) + .filter(function (key) { + return styles[key] != null && styles[key] !== '' + }) + .map(function (key) { + // 使用 kebabCase 函数将属性名转换为 kebab-case 格式 + // 将属性名和属性值格式化为 CSS 样式的键值对 + return [kebabCase(key), styles[key]].join(':') + }) + .join(';') + + // 如果结果不为空,确保末尾有分号 + return result ? (result.endsWith(';') ? result : result + ';') : '' + } + // 如果 styles 不是对象也不是数组,则直接返回 + return '' +} + +/** + * 判断一个对象是否包含任何字段 + * @param obj 要检查的对象 + * @returns {boolean} 如果对象为空(不包含任何字段)则返回 true,否则返回 false + */ +export function hasFields(obj: unknown): boolean { + // 如果不是对象类型或为 null,则认为没有字段 + if (!isObj(obj) || obj === null) { + return false + } + + // 使用 Object.keys 检查对象是否有属性 + return Object.keys(obj).length > 0 +} + +/** + * 判断一个对象是否为空对象(不包含任何字段) + * @param obj 要检查的对象 + * @returns {boolean} 如果对象为空(不包含任何字段)则返回 true,否则返回 false + */ +export function isEmptyObj(obj: unknown): boolean { + return !hasFields(obj) +} + +export const requestAnimationFrame = (cb = () => {}) => { + return new AbortablePromise((resolve) => { + const timer = setInterval(() => { + clearInterval(timer) + resolve(true) + cb() + }, 1000 / 30) + }) +} + +/** + * 暂停指定时间函数 + * @param ms 延迟时间 + * @returns + */ +export const pause = (ms: number = 1000 / 30) => { + return new AbortablePromise((resolve) => { + const timer = setTimeout(() => { + clearTimeout(timer) + resolve(true) + }, ms) + }) +} + +/** + * 深拷贝函数,用于将对象进行完整复制。 + * @param obj 要深拷贝的对象 + * @param cache 用于缓存已复制的对象,防止循环引用 + * @returns 深拷贝后的对象副本 + */ +export function deepClone(obj: T, cache: Map = new Map()): T { + // 如果对象为 null 或或者不是对象类型,则直接返回该对象 + if (obj === null || typeof obj !== 'object') { + return obj + } + + // 处理特殊对象类型:日期、正则表达式、错误对象 + if (isDate(obj)) { + return new Date(obj.getTime()) as any + } + if (obj instanceof RegExp) { + return new RegExp(obj.source, obj.flags) as any + } + if (obj instanceof Error) { + const errorCopy = new Error(obj.message) as any + errorCopy.stack = obj.stack + return errorCopy + } + + // 检查缓存中是否已存在该对象的复制 + if (cache.has(obj)) { + return cache.get(obj) + } + + // 根据原始对象的类型创建对应的空对象或数组 + const copy: any = Array.isArray(obj) ? [] : {} + + // 将当前对象添加到缓存中 + cache.set(obj, copy) + + // 递归地深拷贝对象的每个属性 + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) { + copy[key] = deepClone(obj[key], cache) + } + } + + return copy as T +} + +/** + * 深度合并两个对象。 + * @param target 目标对象,将合并的结果存放在此对象中 + * @param source 源对象,要合并到目标对象的对象 + * @returns 合并后的目标对象 + */ +export function deepMerge>(target: T, source: Record): T { + // 深拷贝目标对象,避免修改原始对象 + target = deepClone(target) + + // 检查目标和源是否都是对象类型 + if (typeof target !== 'object' || typeof source !== 'object') { + throw new Error('Both target and source must be objects.') + } + + // 遍历源对象的属性 + for (const prop in source) { + // eslint-disable-next-line no-prototype-builtins + if (!source.hasOwnProperty(prop)) + continue + // 使用类型断言,告诉 TypeScript 这是有效的属性 + ;(target as Record)[prop] = source[prop] + } + + return target +} + +/** + * 深度合并两个对象。 + * @param target + * @param source + * @returns + */ +export function deepAssign(target: Record, source: Record): Record { + Object.keys(source).forEach((key) => { + const targetValue = target[key] + const newObjValue = source[key] + if (isObj(targetValue) && isObj(newObjValue)) { + deepAssign(targetValue, newObjValue) + } else { + target[key] = newObjValue + } + }) + return target +} + +/** + * 构建带参数的URL + * @param baseUrl 基础URL + * @param params 参数对象,键值对表示要添加到URL的参数 + * @returns 返回带有参数的URL + */ +export function buildUrlWithParams(baseUrl: string, params: Record) { + // 将参数对象转换为查询字符串 + const queryString = Object.entries(params) + .map(([key, value]) => `${key}=${encodeURIComponent(value)}`) + .join('&') + + // 检查基础URL是否已包含查询字符串,并选择适当的分隔符 + const separator = baseUrl.includes('?') ? '&' : '?' + + // 返回带有参数的URL + return `${baseUrl}${separator}${queryString}` +} + +type DebounceOptions = { + leading?: boolean // 是否在延迟时间开始时调用函数 + trailing?: boolean // 是否在延迟时间结束时调用函数 +} + +export function debounce any>(func: T, wait: number, options: DebounceOptions = {}): T { + let timeoutId: ReturnType | null = null + let lastArgs: any[] | undefined + let lastThis: any + let result: ReturnType | undefined + const leading = isDef(options.leading) ? options.leading : false + const trailing = isDef(options.trailing) ? options.trailing : true + + function invokeFunc() { + if (lastArgs !== undefined) { + result = func.apply(lastThis, lastArgs) + lastArgs = undefined + } + } + + function startTimer() { + timeoutId = setTimeout(() => { + timeoutId = null + if (trailing) { + invokeFunc() + } + }, wait) + } + + function cancelTimer() { + if (timeoutId !== null) { + clearTimeout(timeoutId) + timeoutId = null + } + } + + function debounced(this: any, ...args: Parameters): ReturnType | undefined { + lastArgs = args + lastThis = this + + if (timeoutId === null) { + if (leading) { + invokeFunc() + } + startTimer() + } else if (trailing) { + cancelTimer() + startTimer() + } + + return result + } + + return debounced as T +} + +// eslint-disable-next-line @typescript-eslint/ban-types +export function throttle(func: Function, wait: number): Function { + let timeout: ReturnType | null = null + let previous: number = 0 + + const throttled = function (this: any, ...args: any[]) { + const now = Date.now() + const remaining = wait - (now - previous) + + if (remaining <= 0) { + if (timeout) { + clearTimeout(timeout) + timeout = null + } + previous = now + func.apply(this, args) + } else if (!timeout) { + timeout = setTimeout(() => { + previous = Date.now() + timeout = null + func.apply(this, args) + }, remaining) + } + } + + return throttled +} + +/** + * 根据属性路径获取对象中的属性值 + * @param obj 目标对象 + * @param path 属性路径,可以是字符串或字符串数组 + * @returns 属性值,如果属性不存在或中间的属性为 null 或 undefined,则返回 undefined + */ +export const getPropByPath = (obj: any, path: string): any => { + const keys: string[] = path.split('.') + + try { + return keys.reduce((acc: any, key: string) => (acc !== undefined && acc !== null ? acc[key] : undefined), obj) + } catch (error) { + return undefined + } +} + +/** + * 检查一个值是否为Date类型 + * @param val 要检查的值 + * @returns 如果值是Date类型,则返回true,否则返回false + */ +export const isDate = (val: unknown): val is Date => Object.prototype.toString.call(val) === '[object Date]' && !Number.isNaN((val as Date).getTime()) + +/** + * 检查提供的URL是否为视频链接。 + * @param url 需要检查的URL字符串。 + * @returns 返回一个布尔值,如果URL是视频链接则为true,否则为false。 + */ +export function isVideoUrl(url: string): boolean { + // 使用正则表达式匹配视频文件类型的URL + const videoRegex = /\.(ogm|webm|ogv|asx|m4v|mp4|mpg|mpeg|dat|asf|avi|rm|rmvb|mov|wmv|flv|mkv|video)(?=$|[?#])/i + return videoRegex.test(url) +} + +/** + * 检查提供的URL是否为图片URL。 + * @param url 待检查的URL字符串。 + * @returns 返回一个布尔值,如果URL是图片格式,则为true;否则为false。 + */ +export function isImageUrl(url: string): boolean { + // 使用正则表达式匹配图片URL + const imageRegex = /\.(xbm|tif|pjp|apng|svgz|jpeg|jpg|heif|ico|tiff|heic|pjpeg|avif|gif|png|svg|webp|jfif|bmp|dpg|image)(?=$|[?#])/i + return imageRegex.test(url) +} + +/** + * 判断环境是否是H5 + */ +export const isH5 = (() => { + let isH5 = false + // #ifdef H5 + isH5 = true + // #endif + return isH5 +})() + +/** + * 剔除对象中的某些属性 + * @param obj + * @param predicate + * @returns + */ +export function omitBy>(obj: O, predicate: (value: any, key: keyof O) => boolean): Partial { + const newObj = deepClone(obj) + Object.keys(newObj).forEach((key) => predicate(newObj[key], key) && delete newObj[key]) // 遍历对象的键,删除值为不满足predicate的字段 + return newObj +} + +/** + * 缓动函数,用于在动画或过渡效果中根据时间参数计算当前值 + * @param t 当前时间,通常是从动画开始经过的时间 + * @param b 初始值,动画属性的初始值 + * @param c 变化量,动画属性的目标值与初始值的差值 + * @param d 持续时间,动画持续的总时间长度 + * @returns 计算出的当前值 + */ +export function easingFn(t: number = 0, b: number = 0, c: number = 0, d: number = 0): number { + return (c * (-Math.pow(2, (-10 * t) / d) + 1) * 1024) / 1023 + b +} + +/** + * 从数组中寻找最接近目标值的元素 + * + * @param arr 数组 + * @param target 目标值 + * @returns 最接近目标值的元素 + */ +export function closest(arr: number[], target: number) { + return arr.reduce((prev, curr) => (Math.abs(curr - target) < Math.abs(prev - target) ? curr : prev)) +} diff --git a/src/uni_modules/wot-design-uni/components/composables/index.ts b/src/uni_modules/wot-design-uni/components/composables/index.ts new file mode 100644 index 0000000..a483a46 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/index.ts @@ -0,0 +1,11 @@ +export { useCell } from './useCell' +export { useChildren, flattenVNodes, sortChildren } from './useChildren' +export { useCountDown } from './useCountDown' +export { useLockScroll } from './useLockScroll' +export { useParent } from './useParent' +export { usePopover } from './usePopover' +export { useQueue } from './useQueue' +export { useRaf } from './useRaf' +export { useTouch } from './useTouch' +export { useTranslate } from './useTranslate' +export { useUpload } from './useUpload' diff --git a/src/uni_modules/wot-design-uni/components/composables/useCell.ts b/src/uni_modules/wot-design-uni/components/composables/useCell.ts new file mode 100644 index 0000000..d245312 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useCell.ts @@ -0,0 +1,13 @@ +import { computed } from 'vue' +import { useParent } from './useParent' +import { CELL_GROUP_KEY } from '../wd-cell-group/types' + +export function useCell() { + const { parent: cellGroup, index } = useParent(CELL_GROUP_KEY) + + const border = computed(() => { + return cellGroup && cellGroup.props.border && index.value + }) + + return { border } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useChildren.ts b/src/uni_modules/wot-design-uni/components/composables/useChildren.ts new file mode 100644 index 0000000..b52ac9b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useChildren.ts @@ -0,0 +1,113 @@ +import { + provide, + reactive, + getCurrentInstance, + type VNode, + type InjectionKey, + type VNodeNormalizedChildren, + type ComponentPublicInstance, + type ComponentInternalInstance +} from 'vue' + +// 小程序端不支持从vue导出的isVNode方法,参考uni-mp-vue的实现 +function isVNode(value: any): value is VNode { + return value ? value.__v_isVNode === true : false +} + +export function flattenVNodes(children: VNodeNormalizedChildren) { + const result: VNode[] = [] + + const traverse = (children: VNodeNormalizedChildren) => { + if (Array.isArray(children)) { + children.forEach((child) => { + if (isVNode(child)) { + result.push(child) + + if (child.component?.subTree) { + result.push(child.component.subTree) + traverse(child.component.subTree.children) + } + + if (child.children) { + traverse(child.children) + } + } + }) + } + } + + traverse(children) + + return result +} + +const findVNodeIndex = (vnodes: VNode[], vnode: VNode) => { + const index = vnodes.indexOf(vnode) + if (index === -1) { + return vnodes.findIndex((item) => vnode.key !== undefined && vnode.key !== null && item.type === vnode.type && item.key === vnode.key) + } + return index +} + +// sort children instances by vnodes order +export function sortChildren( + parent: ComponentInternalInstance, + publicChildren: ComponentPublicInstance[], + internalChildren: ComponentInternalInstance[] +) { + const vnodes = parent && parent.subTree && parent.subTree.children ? flattenVNodes(parent.subTree.children) : [] + + internalChildren.sort((a, b) => findVNodeIndex(vnodes, a.vnode) - findVNodeIndex(vnodes, b.vnode)) + + const orderedPublicChildren = internalChildren.map((item) => item.proxy!) + + publicChildren.sort((a, b) => { + const indexA = orderedPublicChildren.indexOf(a) + const indexB = orderedPublicChildren.indexOf(b) + return indexA - indexB + }) +} + +export function useChildren< + // eslint-disable-next-line + Child extends ComponentPublicInstance = ComponentPublicInstance<{}, any>, + ProvideValue = never +>(key: InjectionKey) { + const publicChildren: Child[] = reactive([]) + const internalChildren: ComponentInternalInstance[] = reactive([]) + const parent = getCurrentInstance()! + + const linkChildren = (value?: ProvideValue) => { + const link = (child: ComponentInternalInstance) => { + if (child.proxy) { + internalChildren.push(child) + publicChildren.push(child.proxy as Child) + sortChildren(parent, publicChildren, internalChildren) + } + } + + const unlink = (child: ComponentInternalInstance) => { + const index = internalChildren.indexOf(child) + publicChildren.splice(index, 1) + internalChildren.splice(index, 1) + } + + provide( + key, + Object.assign( + { + link, + unlink, + children: publicChildren, + internalChildren + }, + value + ) + ) + } + + return { + children: publicChildren, + linkChildren + } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useCountDown.ts b/src/uni_modules/wot-design-uni/components/composables/useCountDown.ts new file mode 100644 index 0000000..50746e4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useCountDown.ts @@ -0,0 +1,138 @@ +import { ref, computed, onBeforeUnmount } from 'vue' +import { isDef } from '../common/util' +import { useRaf } from './useRaf' + +// 定义倒计时时间的数据结构 +export type CurrentTime = { + days: number + hours: number + total: number + minutes: number + seconds: number + milliseconds: number +} + +// 定义倒计时的配置项 +export type UseCountDownOptions = { + time: number // 倒计时总时间,单位为毫秒 + millisecond?: boolean // 是否开启毫秒级倒计时,默认为 false + onChange?: (current: CurrentTime) => void // 倒计时每次变化时的回调函数 + onFinish?: () => void // 倒计时结束时的回调函数 +} + +// 定义常量 +const SECOND = 1000 +const MINUTE = 60 * SECOND +const HOUR = 60 * MINUTE +const DAY = 24 * HOUR + +// 将时间转换为倒计时数据结构 +function parseTime(time: number): CurrentTime { + const days = Math.floor(time / DAY) + const hours = Math.floor((time % DAY) / HOUR) + const minutes = Math.floor((time % HOUR) / MINUTE) + const seconds = Math.floor((time % MINUTE) / SECOND) + const milliseconds = Math.floor(time % SECOND) + + return { + total: time, + days, + hours, + minutes, + seconds, + milliseconds + } +} + +// 判断两个时间是否在同一秒内 +function isSameSecond(time1: number, time2: number): boolean { + return Math.floor(time1 / 1000) === Math.floor(time2 / 1000) +} + +// 定义 useCountDown 函数 +export function useCountDown(options: UseCountDownOptions) { + let endTime: number // 结束时间 + let counting: boolean // 是否计时中 + + const { start: startRaf, cancel: cancelRaf } = useRaf(tick) + + const remain = ref(options.time) // 剩余时间 + const current = computed(() => parseTime(remain.value)) // 当前倒计时数据 + + // 暂停倒计时 + const pause = () => { + counting = false + cancelRaf() + } + + // 获取当前剩余时间 + const getCurrentRemain = () => Math.max(endTime - Date.now(), 0) + + // 设置剩余时间 + const setRemain = (value: number) => { + remain.value = value + isDef(options.onChange) && options.onChange(current.value) + if (value === 0) { + pause() + isDef(options.onFinish) && options.onFinish() + } + } + + // 每毫秒更新一次倒计时 + const microTick = () => { + if (counting) { + setRemain(getCurrentRemain()) + if (remain.value > 0) { + startRaf() + } + } + } + + // 每秒更新一次倒计时 + const macroTick = () => { + if (counting) { + const remainRemain = getCurrentRemain() + if (!isSameSecond(remainRemain, remain.value) || remainRemain === 0) { + setRemain(remainRemain) + } + + if (remain.value > 0) { + startRaf() + } + } + } + + // 根据配置项选择更新方式 + function tick() { + if (options.millisecond) { + microTick() + } else { + macroTick() + } + } + + // 开始倒计时 + const start = () => { + if (!counting) { + endTime = Date.now() + remain.value + counting = true + startRaf() + } + } + + // 重置倒计时 + const reset = (totalTime: number = options.time) => { + pause() + remain.value = totalTime + } + + // 在组件卸载前暂停倒计时 + onBeforeUnmount(pause) + + return { + start, + pause, + reset, + current + } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useLockScroll.ts b/src/uni_modules/wot-design-uni/components/composables/useLockScroll.ts new file mode 100644 index 0000000..89b3203 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useLockScroll.ts @@ -0,0 +1,37 @@ +import { onBeforeUnmount, onDeactivated, ref, watch } from 'vue' + +export function useLockScroll(shouldLock: () => boolean) { + const scrollLockCount = ref(0) + + const lock = () => { + if (scrollLockCount.value === 0) { + document.getElementsByTagName('body')[0].style.overflow = 'hidden' + } + scrollLockCount.value++ + } + + const unlock = () => { + if (scrollLockCount.value > 0) { + scrollLockCount.value-- + if (scrollLockCount.value === 0) { + document.getElementsByTagName('body')[0].style.overflow = '' + } + } + } + + const destroy = () => { + shouldLock() && unlock() + } + + watch(shouldLock, (value) => { + value ? lock() : unlock() + }) + + onDeactivated(destroy) + onBeforeUnmount(destroy) + + return { + lock, + unlock + } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useParent.ts b/src/uni_modules/wot-design-uni/components/composables/useParent.ts new file mode 100644 index 0000000..f48fea9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useParent.ts @@ -0,0 +1,41 @@ +import { + ref, + inject, + computed, + onUnmounted, + type InjectionKey, + getCurrentInstance, + type ComponentPublicInstance, + type ComponentInternalInstance +} from 'vue' + +type ParentProvide = T & { + link(child: ComponentInternalInstance): void + unlink(child: ComponentInternalInstance): void + children: ComponentPublicInstance[] + internalChildren: ComponentInternalInstance[] +} + +export function useParent(key: InjectionKey>) { + const parent = inject(key, null) + + if (parent) { + const instance = getCurrentInstance()! + const { link, unlink, internalChildren } = parent + + link(instance) + onUnmounted(() => unlink(instance)) + + const index = computed(() => internalChildren.indexOf(instance)) + + return { + parent, + index + } + } + + return { + parent: null, + index: ref(-1) + } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/usePopover.ts b/src/uni_modules/wot-design-uni/components/composables/usePopover.ts new file mode 100644 index 0000000..1c61641 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/usePopover.ts @@ -0,0 +1,176 @@ +import { getCurrentInstance, ref } from 'vue' +import { getRect, isObj } from '../common/util' + +export function usePopover(visibleArrow = true) { + const { proxy } = getCurrentInstance() as any + const popStyle = ref('') + const arrowStyle = ref('') + const showStyle = ref('') + const arrowClass = ref('') + const popWidth = ref(0) + const popHeight = ref(0) + const left = ref(0) + const bottom = ref(0) + const width = ref(0) + const height = ref(0) + const top = ref(0) + + function noop() {} + + function init( + placement: + | 'top' + | 'top-start' + | 'top-end' + | 'bottom' + | 'bottom-start' + | 'bottom-end' + | 'left' + | 'left-start' + | 'left-end' + | 'right' + | 'right-start' + | 'right-end', + visibleArrow: boolean, + selector: string + ) { + // 初始化 class + if (visibleArrow) { + const arrowClassArr = [ + `wd-${selector}__arrow`, + placement === 'bottom' || placement === 'bottom-start' || placement === 'bottom-end' ? `wd-${selector}__arrow-up` : '', + placement === 'left' || placement === 'left-start' || placement === 'left-end' ? `wd-${selector}__arrow-right` : '', + placement === 'right' || placement === 'right-start' || placement === 'right-end' ? `wd-${selector}__arrow-left` : '', + placement === 'top' || placement === 'top-start' || placement === 'top-end' ? `wd-${selector}__arrow-down` : '' + ] + arrowClass.value = arrowClassArr.join(' ') + } + + // 初始化数据获取 + getRect('#target', false, proxy).then((rect) => { + if (!rect) return + left.value = rect.left as number + bottom.value = rect.bottom as number + width.value = rect.width as number + height.value = rect.height as number + top.value = rect.top as number + }) + // 用透明度可在初始化时获取到pop尺寸 + getRect('#pos', false, proxy).then((rect) => { + if (!rect) return + popWidth.value = rect.width as number + popHeight.value = rect.height as number + }) + } + + function control( + placement: + | 'top' + | 'top-start' + | 'top-end' + | 'bottom' + | 'bottom-start' + | 'bottom-end' + | 'left' + | 'left-start' + | 'left-end' + | 'right' + | 'right-start' + | 'right-end', + offset: number | number[] | Record<'x' | 'y', number> + ) { + // arrow size + const arrowSize = visibleArrow ? 9 : 0 + // 上下位(纵轴)对应的距离左边的距离 + const verticalX = width.value / 2 + // 上下位(纵轴)对应的距离底部的距离 + const verticalY = arrowSize + height.value + 5 + // 左右位(横轴)对应的距离左边的距离 + const horizontalX = width.value + arrowSize + 5 + // 左右位(横轴)对应的距离底部的距离 + const horizontalY = height.value / 2 + + let offsetX = 0 + let offsetY = 0 + if (Array.isArray(offset)) { + offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset[0] + offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + (offset[1] ? offset[1] : offset[0]) + } else if (isObj(offset)) { + offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset.x + offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset.y + } else { + offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset + offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset + } + // const offsetX = (verticalX - 17 > 0 ? 0 : verticalX - 25) + offset + // const offsetY = (horizontalY - 17 > 0 ? 0 : horizontalY - 25) + offset + + const placements = new Map([ + // 上 + ['top', [`left: ${verticalX}px; bottom: ${verticalY}px; transform: translateX(-50%);`, 'left: 50%;']], + [ + 'top-start', + [ + `left: ${offsetX}px; bottom: ${verticalY}px;`, + `left: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value - 25) - offsetX}px;` + ] + ], + [ + 'top-end', + [ + `right: ${offsetX}px; bottom: ${verticalY}px;`, + `right: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value - 25) - offsetX}px; transform: translateX(50%);` + ] + ], + // 下 + ['bottom', [`left: ${verticalX}px; top: ${verticalY}px; transform: translateX(-50%);`, 'left: 50%;']], + [ + 'bottom-start', + [`left: ${offsetX}px; top: ${verticalY}px;`, `left: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value - 25) - offsetX}px;`] + ], + [ + 'bottom-end', + [ + `right: ${offsetX}px; top: ${verticalY}px;`, + `right: ${(popWidth.value >= width.value ? width.value / 2 : popWidth.value - 25) - offsetX}px; transform: translateX(50%);` + ] + ], + // 左 + ['left', [`right: ${horizontalX}px; top: ${horizontalY}px; transform: translateY(-50%);`, 'top: 50%']], + [ + 'left-start', + [ + `right: ${horizontalX}px; top: ${offsetY}px;`, + `top: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px;` + ] + ], + [ + 'left-end', + [ + `right: ${horizontalX}px; bottom: ${offsetY}px;`, + `bottom: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px; transform: translateY(50%);` + ] + ], + // 右 + ['right', [`left: ${horizontalX}px; top: ${horizontalY}px; transform: translateY(-50%);`, 'top: 50%']], + [ + 'right-start', + [ + `left: ${horizontalX}px; top: ${offsetY}px;`, + `top: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px;` + ] + ], + [ + 'right-end', + [ + `left: ${horizontalX}px; bottom: ${offsetY}px;`, + `bottom: ${(popHeight.value >= height.value ? height.value / 2 : popHeight.value - 20) - offsetY}px; transform: translateY(50%);` + ] + ] + ]) + popStyle.value = placements.get(placement)![0] + arrowStyle.value = placements.get(placement)![1] + } + + return { popStyle, arrowStyle, showStyle, arrowClass, init, control, noop } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useQueue.ts b/src/uni_modules/wot-design-uni/components/composables/useQueue.ts new file mode 100644 index 0000000..80021b3 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useQueue.ts @@ -0,0 +1,52 @@ +import { type Ref, provide, ref } from 'vue' + +export const queueKey = '__QUEUE_KEY__' + +export interface Queue { + queue: Ref + pushToQueue: (comp: any) => void + removeFromQueue: (comp: any) => void + closeOther: (comp: any) => void + closeOutside: () => void +} + +export function useQueue() { + const queue = ref([]) + + function pushToQueue(comp: any) { + queue.value.push(comp) + } + + function removeFromQueue(comp: any) { + queue.value = queue.value.filter((item) => { + return item.$.uid !== comp.$.uid + }) + } + + function closeOther(comp: any) { + queue.value.forEach((item) => { + if (item.$.uid !== comp.$.uid) { + item.$.exposed.close() + } + }) + } + + function closeOutside() { + queue.value.forEach((item) => { + item.$.exposed.close() + }) + } + + provide(queueKey, { + queue, + pushToQueue, + removeFromQueue, + closeOther, + closeOutside + }) + + return { + closeOther, + closeOutside + } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useRaf.ts b/src/uni_modules/wot-design-uni/components/composables/useRaf.ts new file mode 100644 index 0000000..b52c4d8 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useRaf.ts @@ -0,0 +1,37 @@ +import { ref, onUnmounted } from 'vue' +import { isDef, isH5, isNumber } from '../common/util' + +// 定义回调函数类型 +type RafCallback = (time: number) => void + +export function useRaf(callback: RafCallback) { + const requestRef = ref>(null) + + // 启动动画帧 + const start = () => { + const handle = (time: number) => { + callback(time) + } + + if (isH5) { + requestRef.value = requestAnimationFrame(handle) + } else { + requestRef.value = setTimeout(() => handle(Date.now()), 1000 / 30) + } + } + + // 取消动画帧 + const cancel = () => { + if (isH5 && isNumber(requestRef.value)) { + cancelAnimationFrame(requestRef.value!) + } else if (isDef(requestRef.value)) { + clearTimeout(requestRef.value) + } + } + + onUnmounted(() => { + cancel() + }) + + return { start, cancel } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useTouch.ts b/src/uni_modules/wot-design-uni/components/composables/useTouch.ts new file mode 100644 index 0000000..c3e9b37 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useTouch.ts @@ -0,0 +1,43 @@ +import { ref } from 'vue' + +export function useTouch() { + const direction = ref('') + const deltaX = ref(0) + const deltaY = ref(0) + const offsetX = ref(0) + const offsetY = ref(0) + const startX = ref(0) + const startY = ref(0) + + function touchStart(event: any) { + const touch = event.touches[0] + direction.value = '' + deltaX.value = 0 + deltaY.value = 0 + offsetX.value = 0 + offsetY.value = 0 + startX.value = touch.clientX + startY.value = touch.clientY + } + + function touchMove(event: any) { + const touch = event.touches[0] + deltaX.value = touch.clientX - startX.value + deltaY.value = touch.clientY - startY.value + offsetX.value = Math.abs(deltaX.value) + offsetY.value = Math.abs(deltaY.value) + direction.value = offsetX.value > offsetY.value ? 'horizontal' : offsetX.value < offsetY.value ? 'vertical' : '' + } + + return { + touchStart, + touchMove, + direction, + deltaX, + deltaY, + offsetX, + offsetY, + startX, + startY + } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useTranslate.ts b/src/uni_modules/wot-design-uni/components/composables/useTranslate.ts new file mode 100644 index 0000000..79aa795 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useTranslate.ts @@ -0,0 +1,12 @@ +import { camelCase, getPropByPath, isDef, isFunction } from '../common/util' +import Locale from '../../locale' + +export const useTranslate = (name?: string) => { + const prefix = name ? camelCase(name) + '.' : '' + const translate = (key: string, ...args: unknown[]) => { + const currentMessages = Locale.messages() + const message = getPropByPath(currentMessages, prefix + key) + return isFunction(message) ? message(...args) : isDef(message) ? message : `${prefix}${key}` + } + return { translate } +} diff --git a/src/uni_modules/wot-design-uni/components/composables/useUpload.ts b/src/uni_modules/wot-design-uni/components/composables/useUpload.ts new file mode 100644 index 0000000..87cf54b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/composables/useUpload.ts @@ -0,0 +1,364 @@ +import { isArray, isDef, isFunction } from '../common/util' +import type { ChooseFile, ChooseFileOption, UploadFileItem, UploadMethod, UploadStatusType } from '../wd-upload/types' + +export const UPLOAD_STATUS: Record = { + PENDING: 'pending', + LOADING: 'loading', + SUCCESS: 'success', + FAIL: 'fail' +} + +export interface UseUploadReturn { + // 开始上传文件 + startUpload: (file: UploadFileItem, options: UseUploadOptions) => UniApp.UploadTask | void | Promise + // 中断上传 + abort: (task?: UniApp.UploadTask) => void + // 上传状态常量 + UPLOAD_STATUS: Record + // 选择文件 + chooseFile: (options: ChooseFileOption) => Promise +} + +export interface UseUploadOptions { + // 上传地址 + action: string + // 请求头 + header?: Record + // 文件对应的 key + name?: string + // 其它表单数据 + formData?: Record + // 文件类型 仅支付宝支持且在支付宝平台必填 + fileType?: 'image' | 'video' | 'audio' + // 成功状态码 + statusCode?: number + // 文件状态的key + statusKey?: string + // 自定义上传方法 + uploadMethod?: UploadMethod + // 上传成功回调 + onSuccess?: (res: UniApp.UploadFileSuccessCallbackResult, file: UploadFileItem, formData: Record) => void + // 上传失败回调 + onError?: (res: UniApp.GeneralCallbackResult, file: UploadFileItem, formData: Record) => void + // 上传进度回调 + onProgress?: (res: UniApp.OnProgressUpdateResult, file: UploadFileItem) => void + // 是否自动中断之前的上传任务 + abortPrevious?: boolean + // 根据文件拓展名过滤(H5支持全部类型过滤,微信小程序支持all和file时过滤,其余平台不支持) + extension?: string[] +} + +export function useUpload(): UseUploadReturn { + let currentTask: UniApp.UploadTask | null = null + + // 中断上传 + const abort = (task?: UniApp.UploadTask) => { + if (task) { + task.abort() + } else if (currentTask) { + currentTask.abort() + currentTask = null + } + } + + /** + * 默认上传方法 + */ + const defaultUpload: UploadMethod = (file, formData, options) => { + // 如果配置了自动中断,则中断之前的上传任务 + if (options.abortPrevious) { + abort() + } + + const uploadTask = uni.uploadFile({ + url: options.action, + header: options.header, + name: options.name, + fileName: options.name, + fileType: options.fileType, + formData, + filePath: file.url, + success(res) { + if (res.statusCode === options.statusCode) { + // 上传成功 + options.onSuccess(res, file, formData) + } else { + // 上传失败 + options.onError({ ...res, errMsg: res.errMsg || '' }, file, formData) + } + }, + fail(err) { + // 上传失败 + options.onError(err, file, formData) + } + }) + + currentTask = uploadTask + + // 获取当前文件加载的百分比 + uploadTask.onProgressUpdate((res) => { + options.onProgress(res, file) + }) + + // 返回上传任务实例,让外部可以控制上传过程 + return uploadTask + } + + /** + * 开始上传文件 + */ + const startUpload = (file: UploadFileItem, options: UseUploadOptions) => { + const { + uploadMethod, + formData = {}, + action, + name = 'file', + header = {}, + fileType = 'image', + statusCode = 200, + statusKey = 'status', + abortPrevious = false + } = options + + // 设置上传中状态 + file[statusKey] = UPLOAD_STATUS.LOADING + + const uploadOptions = { + action, + header, + name, + fileName: name, + fileType, + statusCode, + abortPrevious, + onSuccess: (res: UniApp.UploadFileSuccessCallbackResult, file: UploadFileItem, formData: Record) => { + // 更新文件状态 + file[statusKey] = UPLOAD_STATUS.SUCCESS + currentTask = null + options.onSuccess?.(res, file, formData) + }, + onError: (error: UniApp.GeneralCallbackResult, file: UploadFileItem, formData: Record) => { + // 更新文件状态和错误信息 + file[statusKey] = UPLOAD_STATUS.FAIL + file.error = error.errMsg + currentTask = null + options.onError?.(error, file, formData) + }, + onProgress: (res: UniApp.OnProgressUpdateResult, file: UploadFileItem) => { + // 更新上传进度 + file.percent = res.progress + options.onProgress?.(res, file) + } + } + + // 返回上传任务实例,支持外部获取uploadTask进行操作 + if (isFunction(uploadMethod)) { + return uploadMethod(file, formData, uploadOptions) + } else { + return defaultUpload(file, formData, uploadOptions) + } + } + + /** + * 格式化图片信息 + */ + function formatImage(res: UniApp.ChooseImageSuccessCallbackResult): ChooseFile[] { + // #ifdef MP-DINGTALK + // 钉钉文件在files中 + res.tempFiles = isDef((res as any).files) ? (res as any).files : res.tempFiles + // #endif + if (isArray(res.tempFiles)) { + return res.tempFiles.map((item: any) => ({ + path: item.path || '', + name: item.name || '', + size: item.size, + type: 'image', + thumb: item.path || '' + })) + } + return [ + { + path: (res.tempFiles as any).path || '', + name: (res.tempFiles as any).name || '', + size: (res.tempFiles as any).size, + type: 'image', + thumb: (res.tempFiles as any).path || '' + } + ] + } + + /** + * 格式化视频信息 + */ + function formatVideo(res: UniApp.ChooseVideoSuccess): ChooseFile[] { + return [ + { + path: res.tempFilePath || (res as any).filePath || '', + name: res.name || '', + size: res.size, + type: 'video', + thumb: (res as any).thumbTempFilePath || '', + duration: res.duration + } + ] + } + + /** + * 格式化媒体信息 + */ + function formatMedia(res: UniApp.ChooseMediaSuccessCallbackResult): ChooseFile[] { + return res.tempFiles.map((item) => ({ + type: item.fileType, + path: item.tempFilePath, + thumb: item.fileType === 'video' ? item.thumbTempFilePath : item.tempFilePath, + size: item.size, + duration: item.duration + })) + } + + /** + * 选择文件 + */ + function chooseFile({ + multiple, + sizeType, + sourceType, + maxCount, + accept, + compressed, + maxDuration, + camera, + extension + }: ChooseFileOption): Promise { + return new Promise((resolve, reject) => { + switch (accept) { + case 'image': + // #ifdef MP-WEIXIN + uni.chooseMedia({ + count: multiple ? maxCount : 1, + mediaType: ['image'], + sourceType, + sizeType, + camera, + success: (res) => resolve(formatMedia(res)), + fail: reject + }) + // #endif + // #ifndef MP-WEIXIN + uni.chooseImage({ + count: multiple ? maxCount : 1, + sizeType, + sourceType, + // #ifdef H5 + extension, + // #endif + success: (res) => resolve(formatImage(res)), + fail: reject + }) + // #endif + break + case 'video': + // #ifdef MP-WEIXIN + uni.chooseMedia({ + count: multiple ? maxCount : 1, + mediaType: ['video'], + sourceType, + camera, + maxDuration, + success: (res) => resolve(formatMedia(res)), + fail: reject + }) + // #endif + // #ifndef MP-WEIXIN + uni.chooseVideo({ + sourceType, + compressed, + maxDuration, + camera, + // #ifdef H5 + extension, + // #endif + success: (res) => resolve(formatVideo(res)), + fail: reject + }) + // #endif + break + // #ifdef MP-WEIXIN + case 'media': + uni.chooseMedia({ + count: multiple ? maxCount : 1, + sourceType, + sizeType, + camera, + maxDuration, + success: (res) => resolve(formatMedia(res)), + fail: reject + }) + break + case 'file': + uni.chooseMessageFile({ + count: multiple ? (isDef(maxCount) ? maxCount : 100) : 1, + type: accept, + extension, + success: (res) => resolve(res.tempFiles), + fail: reject + }) + break + // #endif + case 'all': + // #ifdef H5 + uni.chooseFile({ + count: multiple ? maxCount : 1, + type: accept, + extension, + success: (res) => resolve(res.tempFiles as ChooseFile[]), + fail: reject + }) + // #endif + // #ifdef MP-WEIXIN + uni.chooseMessageFile({ + count: multiple ? Number(maxCount) : 1, + type: accept, + extension, + success: (res) => resolve(res.tempFiles), + fail: reject + }) + // #endif + + break + default: + // #ifdef MP-WEIXIN + uni.chooseMedia({ + count: multiple ? maxCount : 1, + mediaType: ['image'], + sourceType, + sizeType, + camera, + success: (res) => resolve(formatMedia(res)), + fail: reject + }) + // #endif + // #ifndef MP-WEIXIN + uni.chooseImage({ + count: multiple ? maxCount : 1, + sizeType, + sourceType, + // #ifdef H5 + extension, + // #endif + success: (res) => resolve(formatImage(res)), + fail: reject + }) + // #endif + break + } + }) + } + + return { + startUpload, + abort, + UPLOAD_STATUS, + chooseFile + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-action-sheet/index.scss b/src/uni_modules/wot-design-uni/components/wd-action-sheet/index.scss new file mode 100644 index 0000000..8831de3 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-action-sheet/index.scss @@ -0,0 +1,204 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(action-sheet) { + background-color: $-dark-background2; + color: $-dark-color; + + @include e(action) { + color: $-dark-color; + background: $-dark-background2; + + &:not(.wd-action-sheet__action--disabled):not(.wd-action-sheet__action--loading):active { + background: $-dark-background4; + } + + @include m(disabled) { + color: $-dark-color-gray; + } + } + + @include e(subname) { + color: $-dark-color3; + } + + @include e(cancel) { + color: $-dark-color; + background: $-dark-background4; + + &:active { + background: $-dark-background5; + } + } + + :deep(.wd-action-sheet__close) { + color: $-dark-color3; + } + + @include e(panel-title) { + color: $-dark-color; + } + + @include e(header) { + color: $-dark-color; + } + } +} + +:deep(.wd-action-sheet__popup) { + border-radius: $-action-sheet-radius $-action-sheet-radius 0 0; +} + +@include b(action-sheet) { + background-color: $-color-white; + padding-bottom: 1px; + + @include edeep(popup) { + border-radius: $-action-sheet-radius $-action-sheet-radius 0 0; + } + + @include e(actions) { + padding: 8px 0; + max-height: 50vh; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + } + + @include e(action) { + position: relative; + display: block; + width: 100%; + height: $-action-sheet-action-height; + line-height: $-action-sheet-action-height; + color: $-action-sheet-color; + font-size: $-action-sheet-fs; + text-align: center; + border: none; + background: $-action-sheet-bg; + outline: none; + + &:after { + display: none; + } + + &:not(&--disabled):not(&--loading):active { + background: $-action-sheet-active-color; + } + + @include m(disabled) { + color: $-action-sheet-disabled-color; + cursor: not-allowed; + } + + @include m(loading) { + display: flex; + align-items: center; + justify-content: center; + line-height: initial; + } + } + + @include edeep(action-loading){ + width: $-action-sheet-loading-size; + height: $-action-sheet-loading-size; + } + + @include e(name) { + display: inline-block; + } + + @include e(subname) { + display: inline-block; + margin-left: 4px; + font-size: $-action-sheet-subname-fs; + color: $-action-sheet-subname-color; + } + + @include e(cancel) { + display: block; + width: calc(100% - 48px); + line-height: $-action-sheet-cancel-height; + padding: 0; + color: $-action-sheet-cancel-color; + font-size: $-action-sheet-fs; + text-align: center; + border-radius: $-action-sheet-cancel-radius; + border: none; + background: $-action-sheet-cancel-bg; + outline: none; + margin: 0 auto 24px; + font-weight: $-action-sheet-weight; + + &:active { + background: $-action-sheet-active-color; + } + + &:after { + display: none; + } + } + + @include e(header) { + color: $-action-sheet-color; + position: relative; + height: $-action-sheet-title-height; + line-height: $-action-sheet-title-height; + text-align: center; + font-size: $-action-sheet-title-fs; + font-weight: $-action-sheet-weight; + } + + @include edeep(close) { + position: absolute; + top: $-action-sheet-close-top; + right: $-action-sheet-close-right; + color: $-action-sheet-close-color; + font-size: $-action-sheet-close-fs; + transform: rotate(-45deg); + line-height: 1.1; + } + + @include e(panels) { + height: 84px; + overflow-y: hidden; + + &:first-of-type { + margin-top: 20px; + } + + &:last-of-type { + margin-bottom: 12px; + } + } + + @include e(panels-content) { + display: flex; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + + @include e(panel) { + width: 88px; + flex: 0 0 auto; + display: inline-block; + padding: $-action-sheet-panel-padding; + } + + @include e(panel-img) { + display: block; + width: $-action-sheet-panel-img-fs; + height: $-action-sheet-panel-img-fs; + margin: 0 auto; + margin-bottom: 7px; + border-radius: $-action-sheet-panel-img-radius; + } + + @include e(panel-title) { + font-size: $-action-sheet-subname-fs; + line-height: 1.2; + text-align: center; + color: $-action-sheet-color; + @include lineEllipsis; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-action-sheet/types.ts b/src/uni_modules/wot-design-uni/components/wd-action-sheet/types.ts new file mode 100644 index 0000000..b2086a7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-action-sheet/types.ts @@ -0,0 +1,118 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' + +export type Action = { + /** + * 选项名称 + */ + name: string + /** + * 描述信息 + */ + subname?: string + /** + * 颜色 + */ + color?: string + /** + * 禁用 + */ + disabled?: boolean + /** + * 加载中状态 + */ + loading?: boolean +} + +export type Panel = { + /** + * 图片地址 + */ + iconUrl: string + /** + * 标题内容 + */ + title: string +} + +export const actionSheetProps = { + ...baseProps, + /** + * header 头部样式 + * @default '' + * @type {string} + */ + customHeaderClass: makeStringProp(''), + /** + * 设置菜单显示隐藏 + * @default false + * @type {boolean} + */ + modelValue: { ...makeBooleanProp(false), ...makeRequiredProp(Boolean) }, + /** + * 菜单选项 + * @default [] + * @type {Action[]} + */ + actions: makeArrayProp(), + /** + * 自定义面板项,可以为字符串数组,也可以为对象数组,如果为二维数组,则为多行展示 + * @default [] + * @type {Array} + */ + panels: makeArrayProp(), + /** + * 标题 + * @type {string} + */ + title: String, + /** + * 取消按钮文案 + * @type {string} + */ + cancelText: String, + /** + * 点击选项后是否关闭菜单 + * @default true + * @type {boolean} + */ + closeOnClickAction: makeBooleanProp(true), + /** + * 点击遮罩是否关闭 + * @default true + * @type {boolean} + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 弹框动画持续时间 + * @default 200 + * @type {number} + */ + duration: makeNumberProp(200), + /** + * 菜单层级 + * @default 10 + * @type {number} + */ + zIndex: makeNumberProp(10), + /** + * 弹层内容懒渲染,触发展示时才渲染内容 + * @default true + * @type {boolean} + */ + lazyRender: makeBooleanProp(true), + /** + * 弹出面板是否设置底部安全距离(iphone X 类型的机型) + * @default true + * @type {boolean} + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + * 类型:boolean + * 默认值:false + */ + rootPortal: makeBooleanProp(false) +} + +export type ActionSheetProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-action-sheet/wd-action-sheet.vue b/src/uni_modules/wot-design-uni/components/wd-action-sheet/wd-action-sheet.vue new file mode 100644 index 0000000..111e04e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-action-sheet/wd-action-sheet.vue @@ -0,0 +1,155 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-backtop/index.scss b/src/uni_modules/wot-design-uni/components/wd-backtop/index.scss new file mode 100644 index 0000000..a9dc001 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-backtop/index.scss @@ -0,0 +1,25 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(backtop) { + position: fixed; + background-color: $-backtop-bg; + width: 40px; + height: 40px; + display: flex; + justify-content: center; + align-items: center; + color: $-color-gray-8; + + @include edeep(backicon) { + font-size: $-backtop-icon-size; + } + + @include when(circle) { + border-radius: 50%; + } + + @include when(square) { + border-radius: 4px; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-backtop/types.ts b/src/uni_modules/wot-design-uni/components/wd-backtop/types.ts new file mode 100644 index 0000000..209c67a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-backtop/types.ts @@ -0,0 +1,37 @@ +import { baseProps, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' + +export const backtopProps = { + ...baseProps, + /** + * 页面滚动距离 + */ + scrollTop: makeRequiredProp(Number), + /** + * 距离顶部多少距离时显示 + */ + top: makeNumberProp(300), + /** + * 返回顶部滚动时间 + */ + duration: makeNumberProp(100), + /** + * 层级 + */ + zIndex: makeNumberProp(10), + /** + * icon样式 + */ + iconStyle: makeStringProp(''), + /** + * 形状 + */ + shape: makeStringProp('circle'), + /** + * 距离屏幕底部距离 + */ + bottom: makeNumberProp(100), + /** + * 距离屏幕右边距离 + */ + right: makeNumberProp(20) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-backtop/wd-backtop.vue b/src/uni_modules/wot-design-uni/components/wd-backtop/wd-backtop.vue new file mode 100644 index 0000000..12df252 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-backtop/wd-backtop.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-badge/index.scss b/src/uni_modules/wot-design-uni/components/wd-badge/index.scss new file mode 100644 index 0000000..d75390a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-badge/index.scss @@ -0,0 +1,63 @@ +@import './../common/abstracts/_mixin.scss'; +@import './../common/abstracts/variable.scss'; + +.wot-theme-dark { + @include b(badge) { + @include e(content) { + border-color: $-dark-background2; + } + } +} + + +@include b(badge) { + position: relative; + vertical-align: middle; + display: inline-block; + + @include e(content) { + display: inline-block; + box-sizing: content-box; + height: $-badge-height; + line-height: $-badge-height; + padding: $-badge-padding; + background-color: $-badge-bg; + border-radius: calc($-badge-height / 2 + 2px); + color: $-badge-color; + font-size: $-badge-fs; + text-align: center; + white-space: nowrap; + border: $-badge-border; + font-weight: 500; + + @include when(fixed) { + position: absolute; + top: 0px; + right: 0px; + transform: translateY(-50%) translateX(50%); + } + + @include when(dot) { + height: $-badge-dot-size; + width: $-badge-dot-size; + padding: 0; + border-radius: 50%; + } + + @each $type in (primary, success, warning, info, danger) { + @include m($type) { + @if $type == primary { + background-color: $-badge-primary; + } @else if $type == success { + background-color: $-badge-success; + } @else if $type == warning { + background-color: $-badge-warning; + } @else if $type == info { + background-color: $-badge-info; + } @else { + background-color: $-badge-danger; + } + } + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-badge/types.ts b/src/uni_modules/wot-design-uni/components/wd-badge/types.ts new file mode 100644 index 0000000..49cffa5 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-badge/types.ts @@ -0,0 +1,50 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 11:36:12 + * @LastEditTime: 2024-11-20 20:29:03 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-badge/types.ts + * 记得注释 + */ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp, numericProp } from '../common/props' + +export type BadgeType = 'primary' | 'success' | 'warning' | 'danger' | 'info' + +export const badgeProps = { + ...baseProps, + /** + * 显示值 + */ + modelValue: numericProp, + /** 当数值为 0 时,是否展示徽标 */ + showZero: makeBooleanProp(false), + bgColor: String, + /** + * 最大值,超过最大值会显示 '{max}+',要求 value 是 Number 类型 + */ + max: Number, + /** + * 是否为红色点状标注 + */ + isDot: Boolean, + /** + * 是否隐藏 badge + */ + hidden: Boolean, + /** + * badge类型,可选值primary / success / warning / danger / info + */ + type: makeStringProp(undefined), + /** + * 为正时,角标向下偏移对应的像素 + */ + top: numericProp, + /** + * 为正时,角标向左偏移对应的像素 + */ + right: numericProp +} + +export type BadgeProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-badge/wd-badge.vue b/src/uni_modules/wot-design-uni/components/wd-badge/wd-badge.vue new file mode 100644 index 0000000..a47b1ac --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-badge/wd-badge.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-button/index.scss b/src/uni_modules/wot-design-uni/components/wd-button/index.scss new file mode 100644 index 0000000..d8ebba2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-button/index.scss @@ -0,0 +1,336 @@ +@import './../common/abstracts/_mixin.scss'; +@import './../common/abstracts/variable.scss'; + + +.wot-theme-dark { + @include b(button) { + @include when(info) { + background: $-dark-background4; + color: $-dark-color3; + } + + @include when(plain) { + background: transparent; + + @include when(info) { + color: $-dark-color; + + &::after { + border-color: $-dark-background5; + } + } + } + + @include when(text) { + @include when(disabled) { + color: $-dark-color-gray; + background: transparent; + } + } + + @include when(icon) { + color: $-dark-color; + + @include when(disabled) { + color: $-dark-color-gray; + background: transparent; + } + + } + } +} + +@include b(button) { + margin-left: initial; + margin-right: initial; + position: relative; + display: inline-block; + outline: none; + -webkit-appearance: none; + outline: none; + background: transparent; + box-sizing: border-box; + border: none; + border-radius: 0; + color: $-button-normal-color; + transition: opacity 0.2s; + user-select: none; + font-weight: normal; + + + &::before { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + height: 100%; + background: $-color-black; + border: inherit; + border-color: $-color-black; + border-radius: inherit; + transform: translate(-50%, -50%); + opacity: 0; + content: ' '; + } + + + &::after { + border: none; + border-radius: 0; + } + + @include e(content) { + display: flex; + justify-content: center; + align-items: center; + height: 100%; + } + + @include m(active) { + &:active::before { + opacity: 0.15; + } + } + + @include when(disabled) { + opacity: $-button-disabled-opacity; + } + + @include e(loading) { + margin-right: 5px; + animation: wd-rotate 0.8s linear infinite; + animation-duration: 2s; + } + + @include e(loading-svg) { + width: 100%; + height: 100%; + background-size: cover; + background-repeat: no-repeat; + } + + @include when(loading) {} + + @include when(primary) { + background: $-button-primary-bg-color; + color: $-button-primary-color; + } + + @include when(success) { + background: $-button-success-bg-color; + color: $-button-success-color; + } + + @include when(info) { + background: $-button-info-bg-color; + color: $-button-info-color; + } + + @include when(warning) { + background: $-button-warning-bg-color; + color: $-button-warning-color; + } + + @include when(error) { + background: $-button-error-bg-color; + color: $-button-error-color; + } + + @include when(small) { + height: $-button-small-height; + padding: $-button-small-padding; + border-radius: $-button-small-radius; + font-size: $-button-small-fs; + font-weight: normal; + + .wd-button__loading { + width: $-button-small-loading; + height: $-button-small-loading; + } + } + + @include when(medium) { + height: $-button-medium-height; + padding: $-button-medium-padding; + border-radius: $-button-medium-radius; + font-size: $-button-medium-fs; + min-width: 120px; + + + @include when(round) { + + @include when(icon) { + min-width: 0; + border-radius: 50%; + } + + @include when(text) { + border-radius: 0; + min-width: 0; + } + } + + .wd-button__loading { + width: $-button-medium-loading; + height: $-button-medium-loading; + } + } + + @include when(large) { + height: $-button-large-height; + padding: $-button-large-padding; + border-radius: $-button-large-radius; + font-size: $-button-large-fs; + + &::after { + border-radius: $-button-large-radius; + } + + .wd-button__loading { + width: $-button-large-loading; + height: $-button-large-loading; + } + } + + + @include when(round) { + border-radius: 999px; + } + + @include when(text) { + color: $-button-primary-bg-color; + min-width: 0; + padding: 4px 0; + + &::after { + display: none; + } + + &.wd-button--active { + opacity: $-button-text-hover-opacity; + + &:active::before { + display: none; + } + + } + + @include when(disabled) { + color: $-button-normal-disabled-color; + background: transparent; + } + } + + @include when(plain) { + background: $-button-plain-bg-color; + border: 1px solid currentColor; + + @include when(primary) { + color: $-button-primary-bg-color; + } + + @include when(success) { + color: $-button-success-bg-color; + } + + @include when(info) { + color: $-button-info-plain-normal-color; + border-color: $-button-info-plain-border-color; + } + + @include when(warning) { + color: $-button-warning-bg-color; + } + + @include when(error) { + color: $-button-error-bg-color; + } + } + + @include when(hairline) { + border-width: 0; + + &.is-plain { + @include halfPixelBorderSurround(); + + &::before { + border-radius: inherit; + } + + &::after { + border-color: inherit; + } + + &.is-round { + &::after { + border-radius: inherit !important; + } + } + + &.is-large { + &::after { + border-radius: calc(2 * $-button-large-radius); + } + } + + &.is-medium { + &::after { + border-radius: calc(2 * $-button-medium-radius); + } + } + + &.is-small { + &::after { + border-radius: calc(2 * $-button-small-radius); + } + } + } + } + + @include when(block) { + display: block; + } + + @include when(icon) { + width: $-button-icon-size; + height: $-button-icon-size; + padding: 0; + border-radius: 50%; + color: $-button-icon-color; + + &::after { + display: none; + } + + :deep(.wd-button__icon) { + margin-right: 0; + } + + @include when(disabled) { + color: $-button-icon-disabled-color; + background: transparent; + } + } + + @include edeep(icon) { + display: block; + margin-right: 6px; + font-size: $-button-icon-fs; + vertical-align: middle; + } + + @include e(text) { + user-select: none; + white-space: nowrap; + } +} + +@keyframes wd-rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-button/types.ts b/src/uni_modules/wot-design-uni/components/wd-button/types.ts new file mode 100644 index 0000000..04c85e0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-button/types.ts @@ -0,0 +1,142 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 11:36:12 + * @LastEditTime: 2024-11-04 21:33:52 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-button\types.ts + * 记得注释 + */ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp } from '../common/props' + +export type ButtonType = 'primary' | 'success' | 'info' | 'warning' | 'error' | 'default' | 'text' | 'icon' +export type ButtonSize = 'small' | 'medium' | 'large' +export type ButtonLang = 'zh_CN' | 'zh_TW' | 'en' + +export type ButtonOpenType = + | 'feedback' + | 'share' + | 'getUserInfo' + | 'contact' + | 'getPhoneNumber' + | 'getRealtimePhoneNumber' + | 'launchApp' + | 'openSetting' + | 'chooseAvatar' + | 'getAuthorize' + | 'lifestyle' + | 'contactShare' + | 'openGroupProfile' + | 'openGuildProfile' + | 'openPublicProfile' + | 'shareMessageToFriend' + | 'addFriend' + | 'addColorSign' + | 'addGroupApp' + | 'addToFavorites' + | 'chooseAddress' + | 'chooseInvoiceTitle' + | 'login' + | 'subscribe' + | 'favorite' + | 'watchLater' + | 'openProfile' + | 'agreePrivacyAuthorization' + +export type ButtonScope = 'phoneNumber' | 'userInfo' + +export const buttonProps = { + ...baseProps, + /** + * 幽灵按钮 + */ + plain: makeBooleanProp(false), + /** + * 圆角按钮 + */ + round: makeBooleanProp(true), + /** + * 禁用按钮 + */ + disabled: makeBooleanProp(false), + /** + * 是否细边框 + */ + hairline: makeBooleanProp(false), + /** + * 块状按钮 + */ + block: makeBooleanProp(false), + /** + * 按钮类型,可选值:primary / success / info / warning / error / text / icon + */ + type: makeStringProp('primary'), + /** + * 按钮尺寸,可选值:small / medium / large + */ + size: makeStringProp('medium'), + /** + * 图标类名 + */ + icon: String, + /** + * 类名前缀,用于使用自定义图标,用法参考Icon组件 + */ + classPrefix: makeStringProp('wd-icon'), + /** + * 加载中按钮 + */ + loading: makeBooleanProp(false), + /** + * 加载图标颜色 + */ + loadingColor: String, + /** + * 开放能力 + */ + openType: String as PropType, + /** + * 指定是否阻止本节点的祖先节点出现点击态 + */ + hoverStopPropagation: Boolean, + /** + * 指定返回用户信息的语言,zh_CN 简体中文,zh_TW 繁体中文,en 英文 + */ + lang: String as PropType, + /** + * 会话来源,open-type="contact"时有效 + */ + sessionFrom: String, + /** + * 会话内消息卡片标题,open-type="contact"时有效 + */ + sendMessageTitle: String, + /** + * 会话内消息卡片点击跳转小程序路径,open-type="contact"时有效 + */ + sendMessagePath: String, + /** + * 会话内消息卡片图片,open-type="contact"时有效 + */ + sendMessageImg: String, + /** + * 打开 APP 时,向 APP 传递的参数,open-type=launchApp时有效 + */ + appParameter: String, + /** + * 是否显示会话内消息卡片,设置此参数为 true,用户进入客服会话会在右下角显示"可能要发送的小程序"提示,用户点击后可以快速发送小程序消息,open-type="contact"时有效 + */ + showMessageCard: Boolean, + /** + * 按钮的唯一标识,可用于设置隐私同意授权按钮的id + */ + buttonId: String, + /** + * 支付宝小程序,当 open-type 为 getAuthorize 时有效。 + * 可选值:'phoneNumber' | 'userInfo' + */ + scope: String as PropType +} + +export type ButtonProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-button/wd-button.vue b/src/uni_modules/wot-design-uni/components/wd-button/wd-button.vue new file mode 100644 index 0000000..9be8629 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-button/wd-button.vue @@ -0,0 +1,195 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/index.scss b/src/uni_modules/wot-design-uni/components/wd-calendar-view/index.scss new file mode 100644 index 0000000..abec32d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/index.scss @@ -0,0 +1,9 @@ +/* + * @Author: weisheng + * @Date: 2023-06-12 10:04:19 + * @LastEditTime: 2023-07-15 16:16:34 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-calendar-view\index.scss + * 记得注释 + */ diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss b/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss new file mode 100644 index 0000000..a60250a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/index.scss @@ -0,0 +1,162 @@ +@import '../../common/abstracts/variable'; +@import '../../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(month) { + @include e(title) { + color: $-dark-color; + } + + @include e(days) { + color: $-dark-color; + } + + @include e(day) { + @include when(disabled) { + .wd-month__day-text { + color: $-dark-color-gray; + } + } + } + } +} + +@include b(month) { + @include e(title) { + display: flex; + align-items: center; + justify-content: center; + height: 45px; + font-size: $-calendar-panel-title-fs; + color: $-calendar-panel-title-color; + } + + @include e(days) { + display: flex; + flex-wrap: wrap; + font-size: $-calendar-day-fs; + color: $-calendar-day-color; + } + + @include e(day) { + position: relative; + width: 14.285%; + height: $-calendar-day-height; + line-height: $-calendar-day-height; + text-align: center; + margin-bottom: $-calendar-item-margin-bottom; + + @include when(disabled) { + .wd-month__day-text { + color: $-calendar-disabled-color; + } + } + + @include when(current) { + color: $-calendar-active-color; + } + + @include when(selected, multiple-selected) { + .wd-month__day-container { + border-radius: $-calendar-active-border; + background: $-calendar-active-color; + color: $-calendar-selected-color; + } + } + + @include when(middle) { + .wd-month__day-container { + background: $-calendar-range-color; + } + } + @include when(multiple-middle) { + .wd-month__day-container { + background: $-calendar-active-color; + color: $-calendar-selected-color; + } + } + + @include when(start) { + &::after { + position: absolute; + content: ''; + height: $-calendar-day-height; + top: 0; + right: 0; + left: 50%; + background: $-calendar-range-color; + z-index: 1; + } + + &.is-without-end::after { + display: none; + } + + .wd-month__day-container { + background: $-calendar-active-color; + color: $-calendar-selected-color; + border-radius: $-calendar-active-border 0 0 $-calendar-active-border; + } + } + + @include when(end) { + &::after { + position: absolute; + content: ''; + height: $-calendar-day-height; + top: 0; + left: 0; + right: 50%; + background: $-calendar-range-color; + z-index: 1; + } + + .wd-month__day-container { + background: $-calendar-active-color; + color: $-calendar-selected-color; + border-radius: 0 $-calendar-active-border $-calendar-active-border 0; + } + } + + @include when(same) { + .wd-month__day-container { + background: $-calendar-active-color; + color: $-calendar-selected-color; + border-radius: $-calendar-active-border; + } + } + + @include when(last-row){ + margin-bottom: 0; + } + } + + @include e(day-container) { + position: relative; + z-index: 2; + } + + @include e(day-text) { + font-weight: $-calendar-day-fw; + } + + @include e(day-top) { + position: absolute; + top: 10px; + left: 0; + right: 0; + line-height: 1.1; + font-size: $-calendar-info-fs; + text-align: center; + } + + @include e(day-bottom) { + position: absolute; + bottom: 10px; + left: 0; + right: 0; + line-height: 1.1; + font-size: $-calendar-info-fs; + text-align: center; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue b/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue new file mode 100644 index 0000000..64442eb --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/month.vue @@ -0,0 +1,389 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/types.ts b/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/types.ts new file mode 100644 index 0000000..f25263c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/month/types.ts @@ -0,0 +1,20 @@ +import type { PropType } from 'vue' +import { makeBooleanProp, makeRequiredProp } from '../../common/props' +import type { CalendarFormatter, CalendarType } from '../types' + +export const monthProps = { + type: makeRequiredProp(String as PropType), + date: makeRequiredProp(Number), + value: makeRequiredProp([Number, Array, null] as PropType), + minDate: makeRequiredProp(Number), + maxDate: makeRequiredProp(Number), + firstDayOfWeek: makeRequiredProp(Number), + formatter: Function as PropType, + maxRange: Number, + rangePrompt: String, + allowSameDay: makeBooleanProp(false), + defaultTime: { + type: [Array] as PropType> + }, + showTitle: makeBooleanProp(true) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/index.scss b/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/index.scss new file mode 100644 index 0000000..f8b9fe5 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/index.scss @@ -0,0 +1,89 @@ +@import '../../common/abstracts/variable'; +@import '../../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(month-panel) { + @include e(title) { + color: $-dark-color; + } + + @include e(weeks) { + box-shadow: 0px 4px 8px 0 rgba(255, 255, 255, 0.02); + color: $-dark-color; + } + + @include e(time-label) { + color: $-dark-color; + &::after{ + background: $-dark-background4; + } + } + } +} + +@include b(month-panel) { + font-size: $-calendar-fs; + + @include e(title) { + padding: 5px 0; + text-align: center; + font-size: $-calendar-panel-title-fs; + color: $-calendar-panel-title-color; + padding: $-calendar-panel-padding; + } + + @include e(weeks) { + display: flex; + height: $-calendar-week-height; + line-height: $-calendar-week-height; + box-shadow: 0px 4px 8px 0 rgba(0, 0, 0, 0.02); + color: $-calendar-week-color; + font-size: $-calendar-week-fs; + padding: $-calendar-panel-padding; + } + + @include e(week) { + flex: 1; + text-align: center; + } + + @include e(container) { + padding: $-calendar-panel-padding; + box-sizing: border-box; + } + + @include e(time) { + display: flex; + box-shadow: 0px -4px 8px 0px rgba(0, 0, 0, 0.02); + } + + @include e(time-label) { + position: relative; + flex: 1; + font-size: $-picker-column-fs; + text-align: center; + line-height: 125px; + color: $-picker-column-color; + + &::after { + position: absolute; + content: ''; + height: 35px; + top: 50%; + left: 0; + right: 0; + transform: translateY(-50%); + background: $-picker-column-select-bg; + z-index: 0; + } + } + + @include e(time-text) { + position: relative; + z-index: 1; + } + + @include e(time-picker) { + flex: 3; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/month-panel.vue b/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/month-panel.vue new file mode 100644 index 0000000..86725c8 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/month-panel.vue @@ -0,0 +1,374 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/types.ts b/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/types.ts new file mode 100644 index 0000000..bd27a85 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/monthPanel/types.ts @@ -0,0 +1,48 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { makeBooleanProp, makeRequiredProp } from '../../common/props' +import type { CalendarFormatter, CalendarTimeFilter, CalendarType } from '../types' + +/** + * 月份信息 + */ +export interface MonthInfo { + date: number + height: number +} + +export const monthPanelProps = { + type: makeRequiredProp(String as PropType), + value: makeRequiredProp([Number, Array, null] as PropType), + minDate: makeRequiredProp(Number), + maxDate: makeRequiredProp(Number), + firstDayOfWeek: makeRequiredProp(Number), + formatter: Function as PropType, + maxRange: Number, + rangePrompt: String, + allowSameDay: makeBooleanProp(false), + showPanelTitle: makeBooleanProp(false), + defaultTime: { + type: [Array] as PropType> + }, + panelHeight: makeRequiredProp(Number), + // type 为 'datetime' 或 'datetimerange' 时有效,用于过滤时间选择器的数据 + timeFilter: Function as PropType, + hideSecond: makeBooleanProp(false), + /** + * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false) +} + +export type MonthPanelProps = ExtractPropTypes + +export type MonthPanelTimeType = 'start' | 'end' | '' + +export type MonthPanelExpose = { + /** + * 使当前日期或者选中日期滚动到可视区域 + */ + scrollIntoView: () => void +} + +export type MonthPanelInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/types.ts b/src/uni_modules/wot-design-uni/components/wd-calendar-view/types.ts new file mode 100644 index 0000000..cadbf1b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/types.ts @@ -0,0 +1,109 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' + +export type CalendarType = 'date' | 'dates' | 'datetime' | 'week' | 'month' | 'daterange' | 'datetimerange' | 'weekrange' | 'monthrange' + +export const calendarViewProps = { + ...baseProps, + /** + * 选中值,为 13 位时间戳或时间戳数组 + */ + modelValue: makeRequiredProp([Number, Array, null] as PropType), + /** + * 日期类型 + */ + type: makeStringProp('date'), + /** + * 最小日期,为 13 位时间戳 + */ + minDate: makeNumberProp(new Date(new Date().getFullYear(), new Date().getMonth() - 6, new Date().getDate()).getTime()), + /** + * 最大日期,为 13 位时间戳 + */ + maxDate: makeNumberProp(new Date(new Date().getFullYear(), new Date().getMonth() + 6, new Date().getDate(), 23, 59, 59).getTime()), + /** + * 周起始天 + */ + firstDayOfWeek: makeNumberProp(0), + /** + * 日期格式化函数 + */ + formatter: Function as PropType, + /** + * type 为范围选择时有效,最大日期范围 + */ + maxRange: Number, + /** + * type 为范围选择时有效,选择超出最大日期范围时的错误提示文案 + */ + rangePrompt: String, + /** + * type 为范围选择时有效,是否允许选择同一天 + */ + allowSameDay: makeBooleanProp(false), + // 是否展示面板标题,自动计算当前滚动的日期月份 + showPanelTitle: makeBooleanProp(true), + /** + * 选中日期所使用的当日内具体时刻 + */ + defaultTime: { + type: [String, Array] as PropType, + default: '00:00:00' + }, + /** + * 可滚动面板的高度 + */ + panelHeight: makeNumberProp(378), + /** + * type 为 'datetime' 或 'datetimerange' 时有效,用于过滤时间选择器的数据 + */ + timeFilter: Function as PropType, + /** + * type 为 'datetime' 或 'datetimerange' 时有效,是否不展示秒修改 + */ + hideSecond: makeBooleanProp(false), + /** + * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false) +} + +export type CalendarViewProps = ExtractPropTypes + +export type CalendarDayType = '' | 'start' | 'middle' | 'end' | 'selected' | 'same' | 'current' | 'multiple-middle' | 'multiple-selected' + +export type CalendarDayItem = { + date: number + text?: number | string + topInfo?: string + bottomInfo?: string + type?: CalendarDayType + disabled?: boolean + isLastRow?: boolean +} + +export type CalendarFormatter = (day: CalendarDayItem) => CalendarDayItem + +export type CalendarTimeFilterOptionType = 'hour' | 'minute' | 'second' + +export type CalendarTimeFilterOption = { + type: CalendarTimeFilterOptionType + values: CalendarItem[] +} + +export type CalendarTimeFilter = (option: CalendarTimeFilterOption) => CalendarItem[] + +export type CalendarItem = { + label: string + value: number + disabled: boolean +} + +export type CalendarViewExpose = { + /** + * 使当前日期或者选中日期滚动到可视区域 + */ + scrollIntoView: () => void +} + +export type CalendarViewInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/utils.ts b/src/uni_modules/wot-design-uni/components/wd-calendar-view/utils.ts new file mode 100644 index 0000000..3098e3f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/utils.ts @@ -0,0 +1,429 @@ +import { computed } from 'vue' +import dayjs from '../../dayjs' +import { isArray, isFunction, padZero } from '../common/util' +import { useTranslate } from '../composables/useTranslate' +import type { CalendarDayType, CalendarItem, CalendarTimeFilter, CalendarType } from './types' +const { translate } = useTranslate('calendar-view') + +const weeks = computed(() => { + return [ + translate('weeks.sun'), + translate('weeks.mon'), + translate('weeks.tue'), + translate('weeks.wed'), + translate('weeks.thu'), + translate('weeks.fri'), + translate('weeks.sat') + ] +}) + +/** + * 比较两个时间的日期是否相等 + * @param {timestamp} date1 + * @param {timestamp} date2 + */ +export function compareDate(date1: number, date2: number | null) { + const dateValue1 = new Date(date1) + const dateValue2 = new Date(date2 || '') + + const year1 = dateValue1.getFullYear() + const year2 = dateValue2.getFullYear() + const month1 = dateValue1.getMonth() + const month2 = dateValue2.getMonth() + const day1 = dateValue1.getDate() + const day2 = dateValue2.getDate() + + if (year1 === year2) { + if (month1 === month2) { + return day1 === day2 ? 0 : day1 > day2 ? 1 : -1 + } + return month1 === month2 ? 0 : month1 > month2 ? 1 : -1 + } + + return year1 > year2 ? 1 : -1 +} + +/** + * 判断是否是范围选择 + * @param {string} type + */ +export function isRange(type: CalendarType) { + return type.indexOf('range') > -1 +} + +/** + * 比较两个日期的月份是否相等 + * @param {timestamp} date1 + * @param {timestamp} date2 + */ +export function compareMonth(date1: number, date2: number) { + const dateValue1 = new Date(date1) + const dateValue2 = new Date(date2) + + const year1 = dateValue1.getFullYear() + const year2 = dateValue2.getFullYear() + const month1 = dateValue1.getMonth() + const month2 = dateValue2.getMonth() + + if (year1 === year2) { + return month1 === month2 ? 0 : month1 > month2 ? 1 : -1 + } + + return year1 > year2 ? 1 : -1 +} + +/** + * 比较两个日期的年份是否一致 + * @param {timestamp} date1 + * @param {timestamp} date2 + */ +export function compareYear(date1: number, date2: number) { + const dateValue1 = new Date(date1) + const dateValue2 = new Date(date2) + + const year1 = dateValue1.getFullYear() + const year2 = dateValue2.getFullYear() + + return year1 === year2 ? 0 : year1 > year2 ? 1 : -1 +} + +/** + * 获取一个月的最后一天 + * @param {number} year + * @param {number} month + */ +export function getMonthEndDay(year: number, month: number) { + return 32 - new Date(year, month - 1, 32).getDate() +} + +/** + * 格式化年月 + * @param {timestamp} date + */ +export function formatMonthTitle(date: number) { + return dayjs(date).format(translate('monthTitle')) +} + +/** + * 根据下标获取星期 + * @param {number} index + */ +export function getWeekLabel(index: number) { + if (index >= 7) { + index = index % 7 + } + + return weeks.value[index] +} + +/** + * 格式化年份 + * @param {timestamp} date + */ +export function formatYearTitle(date: number) { + return dayjs(date).format(translate('yearTitle')) +} + +/** + * 根据最小日期和最大日期获取这之间总共有几个月份 + * @param {timestamp} minDate + * @param {timestamp} maxDate + */ +export function getMonths(minDate: number, maxDate: number) { + const months: number[] = [] + const month = new Date(minDate) + month.setDate(1) + + while (compareMonth(month.getTime(), maxDate) < 1) { + months.push(month.getTime()) + month.setMonth(month.getMonth() + 1) + } + + return months +} + +/** + * 根据最小日期和最大日期获取这之间总共有几年 + * @param {timestamp} minDate + * @param {timestamp} maxDate + */ +export function getYears(minDate: number, maxDate: number) { + const years: number[] = [] + const year = new Date(minDate) + year.setMonth(0) + year.setDate(1) + + while (compareYear(year.getTime(), maxDate) < 1) { + years.push(year.getTime()) + year.setFullYear(year.getFullYear() + 1) + } + + return years +} + +/** + * 获取一个日期所在周的第一天和最后一天 + * @param {timestamp} date + */ +export function getWeekRange(date: number, firstDayOfWeek: number) { + if (firstDayOfWeek >= 7) { + firstDayOfWeek = firstDayOfWeek % 7 + } + + const dateValue = new Date(date) + dateValue.setHours(0, 0, 0, 0) + const year = dateValue.getFullYear() + const month = dateValue.getMonth() + const day = dateValue.getDate() + const week = dateValue.getDay() + + const weekStart = new Date(year, month, day - ((7 + week - firstDayOfWeek) % 7)) + const weekEnd = new Date(year, month, day + 6 - ((7 + week - firstDayOfWeek) % 7)) + + return [weekStart.getTime(), weekEnd.getTime()] +} + +/** + * 获取日期偏移量 + * @param {timestamp} date1 + * @param {timestamp} date2 + */ +export function getDayOffset(date1: number, date2: number) { + return (date1 - date2) / (24 * 60 * 60 * 1000) + 1 +} + +/** + * 获取偏移日期 + * @param {timestamp} date + * @param {number} offset + */ +export function getDayByOffset(date: number, offset: number) { + const dateValue = new Date(date) + dateValue.setDate(dateValue.getDate() + offset) + + return dateValue.getTime() +} + +export const getPrevDay = (date: number) => getDayByOffset(date, -1) +export const getNextDay = (date: number) => getDayByOffset(date, 1) + +/** + * 获取月份偏移量 + * @param {timestamp} date1 + * @param {timestamp} date2 + */ +export function getMonthOffset(date1: number, date2: number) { + const dateValue1 = new Date(date1) + const dateValue2 = new Date(date2) + + const year1 = dateValue1.getFullYear() + const year2 = dateValue2.getFullYear() + let month1 = dateValue1.getMonth() + const month2 = dateValue2.getMonth() + + month1 = (year1 - year2) * 12 + month1 + + return month1 - month2 + 1 +} + +/** + * 获取偏移月份 + * @param {timestamp} date + * @param {number} offset + */ +export function getMonthByOffset(date: number, offset: number) { + const dateValue = new Date(date) + dateValue.setMonth(dateValue.getMonth() + offset) + + return dateValue.getTime() +} + +/** + * 获取默认时间,格式化为数组 + * @param {array|string|null} defaultTime + */ +export function getDefaultTime(defaultTime: string[] | string | null) { + if (isArray(defaultTime)) { + const startTime = (defaultTime[0] || '00:00:00').split(':').map((item: string) => { + return parseInt(item) + }) + const endTime = (defaultTime[1] || '00:00:00').split(':').map((item) => { + return parseInt(item) + }) + return [startTime, endTime] + } else { + const time = (defaultTime || '00:00:00').split(':').map((item) => { + return parseInt(item) + }) + + return [time, time] + } +} + +/** + * 根据默认时间获取日期 + * @param {timestamp} date + * @param {array} defaultTime + */ +export function getDateByDefaultTime(date: number, defaultTime: number[]) { + const dateValue = new Date(date) + dateValue.setHours(defaultTime[0]) + dateValue.setMinutes(defaultTime[1]) + dateValue.setSeconds(defaultTime[2]) + + return dateValue.getTime() +} + +/** + * 获取经过 iteratee 格式化后的长度为 n 的数组 + * @param {number} n + * @param {function} iteratee + */ +const times = (n: number, iteratee: (index: number) => CalendarItem) => { + let index: number = -1 + const result: CalendarItem[] = Array(n < 0 ? 0 : n) + while (++index < n) { + result[index] = iteratee(index) + } + return result +} + +/** + * 获取时分秒 + * @param {timestamp}} date + */ +const getTime = (date: number) => { + const dateValue = new Date(date) + return [dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds()] +} + +/** + * 根据最小最大日期获取时间数据,用于填入picker + * @param {*} param0 + */ +export function getTimeData({ + date, + minDate, + maxDate, + isHideSecond, + filter +}: { + date: number + minDate: number + maxDate: number + isHideSecond: boolean + filter?: CalendarTimeFilter +}) { + const compareMin = compareDate(date, minDate) + const compareMax = compareDate(date, maxDate) + + let minHour = 0 + let maxHour = 23 + let minMinute = 0 + let maxMinute = 59 + let minSecond = 0 + let maxSecond = 59 + + if (compareMin === 0) { + const minTime = getTime(minDate) + const currentTime = getTime(date) + + minHour = minTime[0] + if (minTime[0] === currentTime[0]) { + minMinute = minTime[1] + + if (minTime[1] === currentTime[1]) { + minSecond = minTime[2] + } + } + } + + if (compareMax === 0) { + const maxTime = getTime(maxDate) + const currentTime = getTime(date) + + maxHour = maxTime[0] + if (maxTime[0] === currentTime[0]) { + maxMinute = maxTime[1] + + if (maxTime[1] === currentTime[1]) { + maxSecond = maxTime[2] + } + } + } + + let columns: CalendarItem[][] = [] + let hours = times(24, (index) => { + return { + label: translate('hour', padZero(index)), + value: index, + disabled: index < minHour || index > maxHour + } + }) + let minutes = times(60, (index) => { + return { + label: translate('minute', padZero(index)), + value: index, + disabled: index < minMinute || index > maxMinute + } + }) + let seconds: CalendarItem[] = [] + if (filter && isFunction(filter)) { + hours = filter({ + type: 'hour', + values: hours + }) + minutes = filter({ + type: 'minute', + values: minutes + }) + } + + if (!isHideSecond) { + seconds = times(60, (index) => { + return { + label: translate('second', padZero(index)), + value: index, + disabled: index < minSecond || index > maxSecond + } + }) + if (filter && isFunction(filter)) { + seconds = filter({ + type: 'second', + values: seconds + }) + } + } + + columns = isHideSecond ? [hours, minutes] : [hours, minutes, seconds] + + return columns +} + +/** + * 获取当前是第几周 + * @param {timestamp} date + */ +export function getWeekNumber(date: number | Date) { + date = new Date(date) + date.setHours(0, 0, 0, 0) + // Thursday in current week decides the year. + date.setDate(date.getDate() + 3 - ((date.getDay() + 6) % 7)) + // January 4 is always in week 1. + const week = new Date(date.getFullYear(), 0, 4) + // Adjust to Thursday in week 1 and count number of weeks from date to week 1. + // Rounding should be fine for Daylight Saving Time. Its shift should never be more than 12 hours. + return 1 + Math.round(((date.getTime() - week.getTime()) / 86400000 - 3 + ((week.getDay() + 6) % 7)) / 7) +} + +export function getItemClass(monthType: CalendarDayType, value: number | null | (number | null)[], type: CalendarType) { + const classList = ['is-' + monthType] + + if (type.indexOf('range') > -1 && isArray(value)) { + if (!value || !value[1]) { + classList.push('is-without-end') + } + } + + return classList.join(' ') +} diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/wd-calendar-view.vue b/src/uni_modules/wot-design-uni/components/wd-calendar-view/wd-calendar-view.vue new file mode 100644 index 0000000..42512d2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/wd-calendar-view.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/index.scss b/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/index.scss new file mode 100644 index 0000000..efb9874 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/index.scss @@ -0,0 +1,153 @@ +@import '../../common/abstracts/variable'; +@import '../../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(year) { + @include e(title) { + color: $-dark-color; + } + + @include e(months) { + color: $-dark-color; + } + + @include e(month) { + + @include when(disabled) { + .wd-year__month-text { + color: $-dark-color-gray; + } + } + } + } +} + +@include b(year) { + @include e(title) { + display: flex; + align-items: center; + justify-content: center; + height: 45px; + font-size: $-calendar-panel-title-fs; + color: $-calendar-panel-title-color; + } + + @include e(months) { + display: flex; + flex-wrap: wrap; + font-size: $-calendar-day-fs; + color: $-calendar-day-color; + } + + @include e(month) { + position: relative; + width: 25%; + height: $-calendar-day-height; + line-height: $-calendar-day-height; + text-align: center; + margin-bottom: $-calendar-item-margin-bottom; + + @include when(disabled) { + .wd-year__month-text { + color: $-calendar-disabled-color; + } + } + + @include when(current) { + color: $-calendar-active-color; + } + + @include when(selected) { + color: #fff; + + .wd-year__month-text { + border-radius: $-calendar-active-border; + background: $-calendar-active-color; + } + } + + @include when(middle) { + background: $-calendar-range-color; + } + + @include when(start) { + color: $-calendar-selected-color; + + &::after { + position: absolute; + top: 0; + right: 0; + left: 50%; + bottom: 0; + content: ''; + background: $-calendar-range-color; + } + + .wd-year__month-text { + background: $-calendar-active-color; + border-radius: $-calendar-active-border 0 0 $-calendar-active-border; + } + + &.is-without-end::after { + display: none; + } + } + + @include when(end) { + color: $-calendar-selected-color; + + &::after { + position: absolute; + top: 0; + left: 0; + right: 50%; + bottom: 0; + content: ''; + background: $-calendar-range-color; + } + + .wd-year__month-text { + background: $-calendar-active-color; + border-radius: 0 $-calendar-active-border $-calendar-active-border 0; + } + } + + @include when(same) { + color: $-calendar-selected-color; + + .wd-year__month-text { + background: $-calendar-active-color; + border-radius: $-calendar-active-border; + } + } + @include when(last-row){ + margin-bottom: 0; + } + } + + @include e(month-text) { + width: $-calendar-month-width; + margin: 0 auto; + text-align: center; + } + + @include e(month-top) { + position: absolute; + top: 10px; + left: 0; + right: 0; + line-height: 1.1; + font-size: $-calendar-info-fs; + text-align: center; + } + + @include e(month-bottom) { + position: absolute; + bottom: 10px; + left: 0; + right: 0; + line-height: 1.1; + font-size: $-calendar-info-fs; + text-align: center; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/types.ts b/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/types.ts new file mode 100644 index 0000000..0df05ac --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/types.ts @@ -0,0 +1,20 @@ +import type { PropType } from 'vue' +import { makeBooleanProp, makeRequiredProp } from '../../common/props' +import type { CalendarFormatter, CalendarType } from '../types' + +export const yearProps = { + type: makeRequiredProp(String as PropType), + date: makeRequiredProp(Number), + value: makeRequiredProp([Number, Array] as PropType), + minDate: makeRequiredProp(Number), + maxDate: makeRequiredProp(Number), + // 日期格式化函数 + formatter: Function as PropType, + maxRange: Number, + rangePrompt: String, + allowSameDay: makeBooleanProp(false), + defaultTime: { + type: [Array] as PropType> + }, + showTitle: makeBooleanProp(true) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/year.vue b/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/year.vue new file mode 100644 index 0000000..85ee52c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/year/year.vue @@ -0,0 +1,202 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/index.scss b/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/index.scss new file mode 100644 index 0000000..920778a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/index.scss @@ -0,0 +1,24 @@ +@import '../../common/abstracts/variable'; +@import '../../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(year-panel) { + @include e(title) { + color: $-dark-color; + box-shadow: 0px 4px 8px 0 rgba(255, 255,255, 0.02); + } + } +} + +@include b(year-panel) { + font-size: $-calendar-fs; + padding: $-calendar-panel-padding; + + @include e(title) { + padding: 5px 0; + text-align: center; + font-size: $-calendar-panel-title-fs; + color: $-calendar-panel-title-color; + box-shadow: 0px 4px 8px 0 rgba(0, 0, 0, 0.02); + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/types.ts b/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/types.ts new file mode 100644 index 0000000..6e60b01 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/types.ts @@ -0,0 +1,38 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { makeBooleanProp, makeRequiredProp } from '../../common/props' +import type { CalendarFormatter, CalendarType } from '../types' + +/** + * 月份信息 + */ +export interface YearInfo { + date: number + height: number +} + +export const yearPanelProps = { + type: makeRequiredProp(String as PropType), + value: makeRequiredProp([Number, Array] as PropType), + minDate: makeRequiredProp(Number), + maxDate: makeRequiredProp(Number), + formatter: Function as PropType, + maxRange: Number, + rangePrompt: String, + allowSameDay: makeBooleanProp(false), + showPanelTitle: makeBooleanProp(false), + defaultTime: { + type: [Array] as PropType> + }, + panelHeight: makeRequiredProp(Number) +} + +export type YearPanelProps = ExtractPropTypes + +export type YearPanelExpose = { + /** + * 使当前日期或者选中日期滚动到可视区域 + */ + scrollIntoView: () => void +} + +export type YearPanelInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/year-panel.vue b/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/year-panel.vue new file mode 100644 index 0000000..8c48c89 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar-view/yearPanel/year-panel.vue @@ -0,0 +1,135 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar/index.scss b/src/uni_modules/wot-design-uni/components/wd-calendar/index.scss new file mode 100644 index 0000000..99221a3 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar/index.scss @@ -0,0 +1,158 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(calendar) { + + @include e(title) { + color: $-dark-color; + } + + :deep(.wd-calendar__arrow), + :deep(.wd-calendar__close), + :deep(.wd-calendar__clear) { + color: $-dark-color; + } + + @include e(range-label-item) { + color: $-dark-color; + + @include when(placeholder) { + color: $-dark-color-gray; + } + } + + @include e(range-sperator) { + color: $-dark-color-gray; + } + + :deep(.wd-calendar__cell--placeholder) { + .wd-cell__value { + color: $-dark-color-gray; + } + } + } +} + +@include b(calendar) { + + @include e(header) { + position: relative; + overflow: hidden; + } + + @include e(title) { + color: $-action-sheet-color; + height: $-action-sheet-title-height; + line-height: $-action-sheet-title-height; + text-align: center; + font-size: $-action-sheet-title-fs; + font-weight: $-action-sheet-weight; + } + + @include edeep(close) { + position: absolute; + top: $-action-sheet-close-top; + right: $-action-sheet-close-right; + color: $-action-sheet-close-color; + font-size: $-action-sheet-close-fs; + transform: rotate(-45deg); + line-height: 1.1; + } + + @include e(tabs) { + width: 222px; + margin: 10px auto 12px; + } + + @include e(shortcuts) { + padding: 20px 0; + text-align: center; + } + + @include edeep(tag) { + margin-right: 8px; + } + + @include e(view) { + @include when(show-confirm) { + height: 394px; + + @include when(range) { + height: 384px; + } + } + } + + @include e(range-label) { + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + + @include when(monthrange) { + padding-bottom: 10px; + box-shadow: 0px 4px 8px 0 rgba(0, 0, 0, 0.02); + } + } + + @include e(range-label-item) { + flex: 1; + color: rgba(0, 0, 0, 0.85); + + @include when(placeholder) { + color: rgba(0, 0, 0, 0.25); + } + } + + @include e(range-sperator) { + margin: 0 24px; + color: rgba(0, 0, 0, 0.25); + } + + @include e(confirm) { + padding: 12px 25px 14px; + } + + @include edeep(cell) { + @include when(disabled) { + .wd-cell__value { + color: $-input-disabled-color; + cursor: not-allowed; + } + } + @include when(error) { + .wd-cell__value { + color: $-input-error-color; + } + :deep(.wd-calendar__arrow) { + color: $-input-error-color; + } + } + @include when(large) { + .wd-calendar__arrow { + font-size: $-cell-icon-size-large; + } + } + + @include m(placeholder) { + .wd-cell__value { + color: $-input-placeholder-color; + } + } + } + + @include edeep(arrow) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-arrow-color; + line-height: $-cell-line-height; + } + + @include edeep(clear) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-clear-color; + line-height: $-cell-line-height; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar/types.ts b/src/uni_modules/wot-design-uni/components/wd-calendar/types.ts new file mode 100644 index 0000000..813f715 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar/types.ts @@ -0,0 +1,226 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 20:40:34 + * @LastEditTime: 2025-07-11 16:00:26 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-calendar/types.ts + * 记得注释 + */ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' +import type { CalendarFormatter, CalendarTimeFilter, CalendarType } from '../wd-calendar-view/types' +import type { FormItemRule } from '../wd-form/types' + +export const calendarProps = { + ...baseProps, + /** + * 选中值,为 13 位时间戳或时间戳数组 + */ + modelValue: makeRequiredProp([Number, Array, null] as PropType), + /** + * 日期类型,可选值:date / dates / datetime / week / month / daterange / datetimerange / weekrange / monthrange + */ + type: makeStringProp('date'), + /** + * 最小日期,为 13 位时间戳 + */ + minDate: makeNumberProp(new Date(new Date().getFullYear(), new Date().getMonth() - 6, new Date().getDate()).getTime()), + /** + * 最大日期,为 13 位时间戳 + */ + maxDate: makeNumberProp(new Date(new Date().getFullYear(), new Date().getMonth() + 6, new Date().getDate(), 23, 59, 59).getTime()), + /** + * 周起始天 + */ + firstDayOfWeek: makeNumberProp(0), + /** + * 日期格式化函数 + */ + formatter: Function as PropType, + /** + * type 为范围选择时有效,最大日期范围 + */ + maxRange: Number, + /** + * type 为范围选择时有效,选择超出最大日期范围时的错误提示文案 + */ + rangePrompt: String, + /** + * type 为范围选择时有效,是否允许选择同一天 + */ + allowSameDay: makeBooleanProp(false), + /** + * 选中日期所使用的当日内具体时刻 + */ + defaultTime: { + type: [String, Array] as PropType + }, + /** + * type 为 'datetime' 或 'datetimerange' 时有效,用于过滤时间选择器的数据 + */ + timeFilter: Function as PropType, + /** + * type 为 'datetime' 或 'datetimerange' 时有效,是否不展示秒修改 + */ + hideSecond: makeBooleanProp(false), + /** + * 选择器左侧文案 + */ + label: String, + /** + * 设置左侧标题宽度 + */ + labelWidth: makeStringProp('33%'), + /** + * 禁用 + */ + disabled: makeBooleanProp(false), + /** + * 只读 + */ + readonly: makeBooleanProp(false), + /** + * 选择器占位符 + */ + placeholder: String, + /** + * 弹出层标题 + */ + title: String, + /** + * 选择器的值靠右展示 + */ + alignRight: makeBooleanProp(false), + /** + * 是否为错误状态,错误状态时右侧内容为红色 + */ + error: makeBooleanProp(false), + /** + * 是否必填 + */ + required: makeBooleanProp(false), + /** + * 设置选择器大小,可选值:large + */ + size: String, + /** + * 是否垂直居中 + */ + center: makeBooleanProp(false), + /** + * 点击遮罩是否关闭 + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 弹框层级 + */ + zIndex: makeNumberProp(15), + /** + * 是否显示确定按钮 + */ + showConfirm: makeBooleanProp(true), + /** + * 确定按钮文字 + */ + confirmText: String, + /** + * 自定义展示文案的格式化函数,返回一个字符串 + */ + displayFormat: Function as PropType, + /** + * 自定义范围选择类型的面板内部回显,返回一个字符串 + */ + innerDisplayFormat: Function as PropType, + /** + * 是否超出隐藏 + */ + ellipsis: makeBooleanProp(false), + /** + * 是否显示类型切换功能 + */ + showTypeSwitch: makeBooleanProp(false), + /** + * 快捷选项,为对象数组,其中对象的 text 必传 + */ + shortcuts: makeArrayProp>(), + /** + * 快捷操作点击回调 + */ + onShortcutsClick: Function as PropType, + /** + * 弹出面板是否设置底部安全距离(iphone X 类型的机型) + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 确定前校验函数,接收 { value, resolve } 参数,通过 resolve 继续执行,resolve 接收 1 个 boolean 参数 + */ + beforeConfirm: Function as PropType, + /** + * 表单域 model 字段名,在使用表单校验功能的情况下,该属性是必填的 + */ + prop: String, + /** + * 表单验证规则,结合wd-form组件使用 + */ + rules: makeArrayProp(), + customViewClass: makeStringProp(''), + /** + * label 外部自定义样式 + */ + customLabelClass: makeStringProp(''), + /** + * value 外部自定义样式 + */ + customValueClass: makeStringProp(''), + /** + * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false), + /** + * 是否使用内置单元格 + * 默认为 true,使用内置单元格 + */ + withCell: makeBooleanProp(true), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 必填标记位置,可选值:before、after + */ + markerSide: makeStringProp<'before' | 'after'>('before'), + /** + * 显示清空按钮 + */ + clearable: makeBooleanProp(false) +} + +export type CalendarDisplayFormat = (value: number | number[], type: CalendarType) => string + +export type CalendarInnerDisplayFormat = (value: number, rangeType: 'start' | 'end', type: CalendarType) => string + +export type CalendarBeforeConfirmOption = { + value: number | number[] | null + resolve: (isPass: boolean) => void +} + +export type CalendarBeforeConfirm = (option: CalendarBeforeConfirmOption) => void + +export type CalendarOnShortcutsClickOption = { + item: Record + index: number +} + +export type CalendarOnShortcutsClick = (option: CalendarOnShortcutsClickOption) => number | number[] + +export type CalendarExpose = { + /** 关闭时间选择器弹窗 */ + close: () => void + /** 打开时间选择器弹窗 */ + open: () => void +} + +export type CalendarProps = ExtractPropTypes + +export type CalendarInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-calendar/wd-calendar.vue b/src/uni_modules/wot-design-uni/components/wd-calendar/wd-calendar.vue new file mode 100644 index 0000000..669533c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-calendar/wd-calendar.vue @@ -0,0 +1,451 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-card/index.scss b/src/uni_modules/wot-design-uni/components/wd-card/index.scss new file mode 100644 index 0000000..ee6562c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-card/index.scss @@ -0,0 +1,71 @@ +@import "../common/abstracts/variable.scss"; +@import "../common/abstracts/_mixin.scss"; +.wot-theme-dark { + @include b(card) { + background-color: $-dark-background2; + + @include when(rectangle) { + + .wd-card__content { + @include halfPixelBorder('top', 0, $-dark-border-color); + } + .wd-card__footer { + @include halfPixelBorder('top', 0, $-dark-border-color); + } + } + + @include e(title-content) { + color: $-dark-color; + } + @include e(content) { + color: $-dark-color3; + } + } +} + +@include b(card) { + padding: $-card-padding; + background-color: $-card-bg; + line-height: $-card-line-height; + margin: $-card-margin; + border-radius: $-card-radius; + box-shadow: $-card-shadow-color; + font-size: $-card-fs; + margin-bottom: 12px; + + @include when(rectangle) { + margin-left: 0; + margin-right: 0; + border-radius: 0; + box-shadow: none; + + .wd-card__title-content { + font-size: $-card-fs; + } + .wd-card__content { + position: relative; + padding: $-card-rectangle-content-padding; + + @include halfPixelBorder('top', 0, $-card-content-border-color); + } + .wd-card__footer { + position: relative; + padding: $-card-rectangle-footer-padding; + + @include halfPixelBorder('top', 0, $-card-content-border-color); + } + } + @include e(title-content) { + padding: 16px 0; + color: $-card-title-color; + font-size: $-card-title-fs; + } + @include e(content) { + color: $-card-content-color; + line-height: $-card-content-line-height; + } + @include e(footer) { + padding: $-card-footer-padding; + text-align: right; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-card/types.ts b/src/uni_modules/wot-design-uni/components/wd-card/types.ts new file mode 100644 index 0000000..8ee91f2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-card/types.ts @@ -0,0 +1,30 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeStringProp } from '../common/props' + +export type CardType = 'rectangle' + +export const cardProps = { + ...baseProps, + /** + * 卡片类型 + */ + type: String as PropType, + /** + * 卡片标题 + */ + title: String, + /** + * 标题自定义样式 + */ + customTitleClass: makeStringProp(''), + /** + * 内容自定义样式 + */ + customContentClass: makeStringProp(''), + /** + * 底部自定义样式 + */ + customFooterClass: makeStringProp('') +} + +export type CardProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-card/wd-card.vue b/src/uni_modules/wot-design-uni/components/wd-card/wd-card.vue new file mode 100644 index 0000000..01ba71e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-card/wd-card.vue @@ -0,0 +1,37 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-cell-group/index.scss b/src/uni_modules/wot-design-uni/components/wd-cell-group/index.scss new file mode 100644 index 0000000..983f8ff --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-cell-group/index.scss @@ -0,0 +1,56 @@ +@import '../common/abstracts/variable.scss'; +@import '../common/abstracts/_mixin.scss'; + +.wot-theme-dark { + @include b(cell-group) { + background-color: $-dark-background2; + + @include when(border) { + .wd-cell-group__title { + @include halfPixelBorder('bottom', 0, $-dark-border-color); + } + } + + @include e(title) { + background: $-dark-background2; + color: $-dark-color; + } + + @include e(right) { + color: $-dark-color3; + } + + @include e(body) { + background: $-dark-background2; + } + + } +} + +@include b(cell-group) { + background-color: $-color-white; + + @include when(border) { + .wd-cell-group__title { + @include halfPixelBorder; + } + } + @include e(title) { + position: relative; + display: flex; + justify-content: space-between; + padding: $-cell-group-padding; + background: $-color-white; + font-size: $-cell-group-title-fs; + color: $-cell-group-title-color; + font-weight: $-fw-medium; + line-height: 1.43; + } + @include e(right) { + color: $-cell-group-value-color; + font-size: $-cell-group-value-fs; + } + @include e(body) { + background: $-color-white; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-cell-group/types.ts b/src/uni_modules/wot-design-uni/components/wd-cell-group/types.ts new file mode 100644 index 0000000..f24a773 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-cell-group/types.ts @@ -0,0 +1,41 @@ +/* + * @Author: weisheng + * @Date: 2023-12-14 11:21:58 + * @LastEditTime: 2024-03-18 13:57:14 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-cell-group\types.ts + * 记得注释 + */ +import { type ExtractPropTypes, type InjectionKey } from 'vue' +import { baseProps, makeBooleanProp } from '../common/props' + +export type CelllGroupProvide = { + props: { + border?: boolean + } +} + +export const CELL_GROUP_KEY: InjectionKey = Symbol('wd-cell-group') + +export const cellGroupProps = { + ...baseProps, + /** + * 分组标题 + */ + title: String, + /** + * 分组右侧内容 + */ + value: String, + /** + * 分组启用插槽 + */ + useSlot: makeBooleanProp(false), + /** + * 是否展示边框线 + */ + border: makeBooleanProp(false) +} + +export type CellGroupProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-cell-group/wd-cell-group.vue b/src/uni_modules/wot-design-uni/components/wd-cell-group/wd-cell-group.vue new file mode 100644 index 0000000..d16a8fa --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-cell-group/wd-cell-group.vue @@ -0,0 +1,45 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-cell/index.scss b/src/uni_modules/wot-design-uni/components/wd-cell/index.scss new file mode 100644 index 0000000..a87f91c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-cell/index.scss @@ -0,0 +1,206 @@ +@import '../common/abstracts/variable.scss'; +@import '../common/abstracts/_mixin.scss'; + +.wot-theme-dark { + @include b(cell) { + background-color: $-dark-background2; + color: $-dark-color; + + @include e(value) { + color: $-dark-color; + } + + @include e(label) { + color: $-dark-color3; + } + + @include when(hover) { + background-color: $-dark-background4; + } + + @include when(border) { + .wd-cell__wrapper { + @include halfPixelBorder('top', 0, $-dark-border-color); + } + } + + :deep(.wd-cell__arrow-right) { + color: $-dark-color; + } + } +} + +@include b(cell) { + position: relative; + padding-left: $-cell-padding; + background-color: $-color-white; + text-decoration: none; + color: $-cell-title-color; + line-height: $-cell-line-height; + -webkit-tap-highlight-color: transparent; + box-sizing: border-box; + width: 100%; + overflow: hidden; + + @include when(border) { + .wd-cell__wrapper { + @include halfPixelBorder('top'); + } + } + + @include e(wrapper) { + position: relative; + display: flex; + padding: $-cell-wrapper-padding $-cell-padding $-cell-wrapper-padding 0; + justify-content: space-between; + align-items: flex-start; + overflow: hidden; + + @include when(vertical) { + display: block; + + .wd-cell__right { + margin-top: $-cell-vertical-top; + } + + .wd-cell__value { + text-align: left; + } + + .wd-cell__left { + margin-right: 0; + } + } + + @include when(label) { + padding: $-cell-wrapper-padding-with-label $-cell-padding $-cell-wrapper-padding-with-label 0; + } + } + + @include e(left) { + position: relative; + flex: 1; + display: flex; + text-align: left; + font-size: $-cell-title-fs; + box-sizing: border-box; + margin-right: $-cell-padding; + } + + @include e(right) { + position: relative; + flex: 1; + min-width: 0; + } + + @include e(title) { + font-size: $-cell-title-fs; + } + + @include e(required) { + font-size: $-cell-required-size; + color: $-cell-required-color; + margin-left: $-cell-required-margin; + + @include m(left) { + margin-left: 0; + margin-right: $-cell-required-margin; + } + } + + @include e(label) { + margin-top: 2px; + font-size: $-cell-label-fs; + color: $-cell-label-color; + } + + @include edeep(icon) { + display: block; + position: relative; + margin-right: $-cell-icon-right; + font-size: $-cell-icon-size; + height: $-cell-line-height; + line-height: $-cell-line-height; + } + + @include e(body){ + display: flex; + min-width: 0; + } + + @include e(value) { + position: relative; + flex: 1; + font-size: $-cell-value-fs; + color: $-cell-value-color; + vertical-align: middle; + + @include m(left) { + text-align: left; + } + + @include m(right) { + text-align: right; + } + + @include m(ellipsis) { + @include lineEllipsis; + min-width: 0; + } + } + + @include edeep(arrow-right) { + display: block; + margin-left: 8px; + width: $-cell-arrow-size; + font-size: $-cell-arrow-size; + color: $-cell-arrow-color; + height: $-cell-line-height; + line-height: $-cell-line-height; + } + + @include e(error-message){ + color: $-form-item-error-message-color; + font-size: $-form-item-error-message-font-size; + line-height: $-form-item-error-message-line-height; + text-align: left; + vertical-align: middle; + } + + @include when(link) { + -webkit-tap-highlight-color: $-cell-tap-bg; + } + + @include when(hover) { + background-color: $-cell-tap-bg; + } + + @include when(large) { + .wd-cell__title { + font-size: $-cell-title-fs-large; + } + + .wd-cell__wrapper { + padding-top: $-cell-wrapper-padding-large; + padding-bottom: $-cell-wrapper-padding-large; + } + + .wd-cell__label { + font-size: $-cell-label-fs-large; + } + + .wd-cell__value { + font-size: $-cell-value-fs-large; + } + + :deep(.wd-cell__icon) { + font-size: $-cell-icon-size-large; + } + } + + @include when(center) { + .wd-cell__wrapper { + align-items: center; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-cell/types.ts b/src/uni_modules/wot-design-uni/components/wd-cell/types.ts new file mode 100644 index 0000000..10a52b9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-cell/types.ts @@ -0,0 +1,111 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeStringProp, makeNumericProp, numericProp } from '../common/props' + +import { type FormItemRule } from '../wd-form/types' + +export const cellProps = { + ...baseProps, + /** + * 标题 + */ + title: String, + /** + * 右侧内容 + */ + value: makeNumericProp(''), + /** + * 图标类名 + */ + icon: String, + /** + * 图标大小 + */ + iconSize: numericProp, + /** + * 描述信息 + */ + label: String, + /** + * 是否为跳转链接 + */ + isLink: makeBooleanProp(false), + /** + * 跳转地址 + */ + to: String, + /** + * 跳转时是否替换栈顶页面 + */ + replace: makeBooleanProp(false), + /** + * 开启点击反馈,is-link 默认开启 + */ + clickable: makeBooleanProp(false), + /** + * 设置单元格大小,可选值:large + */ + size: String, + /** + * 是否展示边框线 + */ + border: makeBooleanProp(void 0), + /** + * 设置左侧标题宽度 + */ + titleWidth: String, + /** + * 是否垂直居中,默认顶部居中 + */ + center: makeBooleanProp(false), + /** + * 是否必填 + */ + required: makeBooleanProp(false), + /** + * 表单属性,上下结构 + */ + vertical: makeBooleanProp(false), + /** + * 表单域 model 字段名,在使用表单校验功能的情况下,该属性是必填的 + */ + prop: String, + /** + * 表单验证规则,结合wd-form组件使用 + */ + rules: makeArrayProp(), + /** + * icon 使用 slot 时的自定义样式 + */ + customIconClass: makeStringProp(''), + /** + * label 使用 slot 时的自定义样式 + */ + customLabelClass: makeStringProp(''), + /** + * value 使用 slot 时的自定义样式 + */ + customValueClass: makeStringProp(''), + /** + * title 使用 slot 时的自定义样式 + */ + customTitleClass: makeStringProp(''), + /** + * value 文字对齐方式,可选值:left、right、center + */ + valueAlign: makeStringProp<'left' | 'right'>('right'), + /** + * 是否超出隐藏,显示省略号 + */ + ellipsis: makeBooleanProp(false), + /** + * 是否启用title插槽,默认启用,用来解决插槽传递时v-slot和v-if冲突问题。 + * 问题见:https://github.com/dcloudio/uni-app/issues/4847 + */ + useTitleSlot: makeBooleanProp(true), + /** + * 必填标记位置,可选值:before(标签前)、after(标签后) + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} + +export type CellProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-cell/wd-cell.vue b/src/uni_modules/wot-design-uni/components/wd-cell/wd-cell.vue new file mode 100644 index 0000000..04adbc7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-cell/wd-cell.vue @@ -0,0 +1,140 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-checkbox-group/index.scss b/src/uni_modules/wot-design-uni/components/wd-checkbox-group/index.scss new file mode 100644 index 0000000..09d22aa --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-checkbox-group/index.scss @@ -0,0 +1,20 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(checkbox-group) { + background-color: $-dark-background2; + } +} +@include b(checkbox-group) { + background-color: $-checkbox-bg; + + // 上下20px 左右15px 内部间隔12px + @include when(button) { + width: 100%; + padding: 8px 3px 20px 15px; + box-sizing: border-box; + overflow: hidden; + height: auto; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-checkbox-group/types.ts b/src/uni_modules/wot-design-uni/components/wd-checkbox-group/types.ts new file mode 100644 index 0000000..e1785df --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-checkbox-group/types.ts @@ -0,0 +1,59 @@ +import { type ExtractPropTypes, type InjectionKey, type PropType } from 'vue' +import type { CheckShape } from '../wd-checkbox/types' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type RequiredModelValue = { + modelValue: Array +} + +export type checkboxGroupProvide = { + props: Partial> & RequiredModelValue + changeSelectState: (value: string | number | boolean) => void +} + +export const CHECKBOX_GROUP_KEY: InjectionKey = Symbol('wd-checkbox-group') + +export const checkboxGroupProps = { + ...baseProps, + /** + * 绑定值 + */ + modelValue: { + type: Array as PropType>, + default: () => [] + }, + /** + * 表单模式 + */ + cell: makeBooleanProp(false), + /** + * 单选框形状,可选值:circle / square / button + */ + shape: makeStringProp('circle'), + /** + * 选中的颜色 + */ + checkedColor: String, + /** + * 禁用 + */ + disabled: makeBooleanProp(false), + /** + * 最小选中的数量 + */ + min: makeNumberProp(0), + /** + * 最大选中的数量,0 为无限数量,默认为 0 + */ + max: makeNumberProp(0), + /** + * 同行展示 + */ + inline: makeBooleanProp(false), + /** + * 设置大小,可选值:large + */ + size: String +} + +export type CheckboxGroupProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-checkbox-group/wd-checkbox-group.vue b/src/uni_modules/wot-design-uni/components/wd-checkbox-group/wd-checkbox-group.vue new file mode 100644 index 0000000..c6fef2c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-checkbox-group/wd-checkbox-group.vue @@ -0,0 +1,100 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-checkbox/index.scss b/src/uni_modules/wot-design-uni/components/wd-checkbox/index.scss new file mode 100644 index 0000000..e188d32 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-checkbox/index.scss @@ -0,0 +1,285 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(checkbox) { + @include e(shape) { + background: transparent; + border-color: $-checkbox-border-color; + color: $-checkbox-check-color; + } + + @include e(label) { + color: $-dark-color; + } + + @include when(disabled) { + .wd-checkbox__shape { + border-color: $-dark-color-gray; + background: $-dark-background4; + } + + .wd-checkbox__label { + color: $-dark-color-gray; + } + + :deep(.wd-checkbox__check) { + color: $-dark-color-gray; + } + + @include when(checked) { + .wd-checkbox__shape { + color: $-dark-color-gray; + } + + .wd-checkbox__label { + color: $-dark-color-gray; + } + } + + @include when(button) { + + .wd-checkbox__label { + border-color: #c8c9cc; + background: #3a3a3c; + color: $-dark-color-gray; + } + + @include when(checked) { + .wd-checkbox__label { + border-color: #c8c9cc; + background: #3a3a3c; + color: #c8c9cc; + } + } + } + } + + @include when(button) { + .wd-checkbox__label { + background-color: $-dark-background; + } + + @include when(checked) { + .wd-checkbox__label { + background-color: $-dark-background2; + } + } + } + + } +} + +@include b(checkbox) { + display: block; + margin-bottom: $-checkbox-margin; + font-size: 0; + -webkit-tap-highlight-color: transparent; + line-height: 1.2; + + @include when(last-child) { + margin-bottom: 0; + } + + @include e(shape) { + position: relative; + display: inline-block; + width: $-checkbox-size; + height: $-checkbox-size; + border: 2px solid $-checkbox-border-color; + border-radius: 50%; + color: $-checkbox-check-color; + background: $-checkbox-bg; + vertical-align: middle; + transition: background 0.2s; + box-sizing: border-box; + + @include when(square) { + border-radius: $-checkbox-square-radius; + } + } + + @include e(input) { + position: absolute; + width: 0; + height: 0; + margin: 0; + opacity: 0; + } + + @include edeep(btn-check) { + display: inline-block; + font-size: $-checkbox-icon-size; + margin-right: 4px; + vertical-align: middle; + } + + @include e(txt) { + display: inline-block; + vertical-align: middle; + line-height: 20px; + @include lineEllipsis; + } + + @include e(label) { + position: relative; + display: inline-block; + margin-left: $-checkbox-label-margin; + vertical-align: middle; + font-size: $-checkbox-label-fs; + color: $-checkbox-label-color; + } + + @include edeep(check) { + color: $-checkbox-check-color; + font-size: $-checkbox-icon-size; + opacity: 0; + transition: opacity 0.2s; + } + + @include when(checked) { + .wd-checkbox__shape { + color: $-checkbox-checked-color; + background: currentColor; + border-color: currentColor; + } + + :deep(.wd-checkbox__check) { + opacity: 1; + position: absolute; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + } + + @include when(button) { + display: inline-block; + margin-bottom: 0; + margin-right: $-checkbox-margin; + vertical-align: top; + font-size: $-checkbox-button-font-size; + + @include when(last-child) { + margin-right: 0; + } + + .wd-checkbox__shape { + width: 0; + height: 0; + overflow: hidden; + opacity: 0; + border: none; + } + + .wd-checkbox__label { + display: inline-flex; + flex-direction: row; + justify-content: center; + align-items: center; + min-width: $-checkbox-button-min-width; + height: $-checkbox-button-height; + font-size: $-checkbox-button-font-size; + margin-left: 0; + padding: 5px 15px; + border: 1px solid $-checkbox-button-border; + background-color: $-checkbox-button-bg; + border-radius: $-checkbox-button-radius; + transition: color 0.2s, border 0.2s; + box-sizing: border-box; + } + + @include when(checked) { + .wd-checkbox__label { + color: $-checkbox-checked-color; + background-color: $-checkbox-bg; + border-color: $-checkbox-checked-color; + border-color: currentColor; + } + } + } + + @include when(inline) { + display: inline-block; + margin-bottom: 0; + margin-right: $-checkbox-margin; + + @include when(last-child) { + margin-right: 0; + } + } + + @include when(disabled) { + .wd-checkbox__shape { + border-color: $-checkbox-border-color; + background: $-checkbox-disabled-check-bg; + } + + .wd-checkbox__label { + color: $-checkbox-disabled-label-color; + } + + @include when(checked) { + .wd-checkbox__shape { + color: $-checkbox-disabled-check-color; + } + + .wd-checkbox__label { + color: $-checkbox-disabled-label-color; + } + } + + @include when(button) { + .wd-checkbox__label { + background: $-checkbox-disabled-color; + border-color: $-checkbox-button-border; + color: $-checkbox-disabled-label-color; + } + + @include when(checked) { + .wd-checkbox__label { + border-color: $-checkbox-button-disabled-border; + } + } + } + } + + // 以下内容用于解决父子组件样式隔离的问题 —— START + @include when(cell-box) { + padding: 13px 15px; + margin: 0; + + @include when(large) { + padding: 14px 15px; + } + } + + @include when(button-box) { + display: inline-flex; + width: 33.3333%; + padding: 12px 12px 0 0; + box-sizing: border-box; + + .wd-checkbox__label { + width: 100%; + } + + &:last-child::after { + content: ""; + display: table; + clear: both; + } + } + + @include when(large) { + .wd-checkbox__shape { + width: $-checkbox-large-size; + height: $-checkbox-large-size; + font-size: $-checkbox-large-size; + } + + .wd-checkbox__label { + font-size: $-checkbox-large-label-fs; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-checkbox/types.ts b/src/uni_modules/wot-design-uni/components/wd-checkbox/types.ts new file mode 100644 index 0000000..86bafc7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-checkbox/types.ts @@ -0,0 +1,68 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeStringProp } from '../common/props' + +export type CheckShape = 'circle' | 'square' | 'button' + +export const checkboxProps = { + ...baseProps, + customLabelClass: makeStringProp(''), + customShapeClass: makeStringProp(''), + /** + * 单选框选中时的值 + */ + modelValue: { + type: [String, Number, Boolean], + required: true, + default: false + }, + /** + * 单选框形状,可选值:circle / square / button + */ + shape: { + type: String as PropType + }, + /** + * 选中的颜色 + */ + checkedColor: String, + /** + * 禁用 + */ + disabled: { + type: [Boolean, null] as PropType, + default: null + }, + /** + * 选中值,在 checkbox-group 中使用无效,需同 false-value 一块使用 + */ + trueValue: { + type: [String, Number, Boolean], + default: true + }, + /** + * 非选中时的值,在 checkbox-group 中使用无效,需同 true-value 一块使用 + */ + falseValue: { + type: [String, Number, Boolean], + default: false + }, + /** + * 设置大小,可选值:large + */ + size: String, + /** + * 文字位置最大宽度 + */ + maxWidth: String +} + +export type CheckboxProps = ExtractPropTypes + +export type CheckboxExpose = { + /** + * 切换当前选中状态 + */ + toggle: () => void +} + +export type CheckboxInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-checkbox/wd-checkbox.vue b/src/uni_modules/wot-design-uni/components/wd-checkbox/wd-checkbox.vue new file mode 100644 index 0000000..d46c8fe --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-checkbox/wd-checkbox.vue @@ -0,0 +1,177 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-circle/index.scss b/src/uni_modules/wot-design-uni/components/wd-circle/index.scss new file mode 100644 index 0000000..dc7d13e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-circle/index.scss @@ -0,0 +1,18 @@ +@import "../common/abstracts/variable.scss"; +@import "../common/abstracts/_mixin.scss"; + +@include b(circle) { + position: relative; + display: inline-block; + text-align: center; + + @include e(text) { + position: absolute; + z-index: 1; + top: 50%; + left: 0; + width: 100%; + transform: translateY(-50%); + color: $-circle-text-color; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-circle/types.ts b/src/uni_modules/wot-design-uni/components/wd-circle/types.ts new file mode 100644 index 0000000..881ef73 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-circle/types.ts @@ -0,0 +1,54 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +// 进度条端点的形状,可选值为 "butt" | "round" | "square" +export type StrokeLinecapType = 'butt' | 'round' | 'square' + +export const circleProps = { + ...baseProps, + /** + * 当前进度 + */ + modelValue: makeNumberProp(0), + /** + * 圆环直径,默认单位为 px + */ + size: makeNumberProp(100), + /** + * 进度条颜色,传入对象格式可以定义渐变色 + */ + color: { + type: [String, Object] as PropType>, + default: '#4d80f0' + }, + /** + * 轨道颜色 + */ + layerColor: makeStringProp('#EBEEF5'), + /** + * 填充颜色 + */ + fill: String, + /** + * 动画速度(单位为 rate/s) + */ + speed: makeNumberProp(50), + /** + * 文字 + */ + text: String, + /** + * 进度条宽度 单位px + */ + strokeWidth: makeNumberProp(10), + /** + * 进度条端点的形状,可选值为 "butt" | "round" | "square" + */ + strokeLinecap: makeStringProp('round'), + /** + * 是否顺时针增加 + */ + clockwise: makeBooleanProp(true) +} + +export type CircleProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-circle/wd-circle.vue b/src/uni_modules/wot-design-uni/components/wd-circle/wd-circle.vue new file mode 100644 index 0000000..1cb7040 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-circle/wd-circle.vue @@ -0,0 +1,296 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-col-picker/index.scss b/src/uni_modules/wot-design-uni/components/wd-col-picker/index.scss new file mode 100644 index 0000000..c6fb8db --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-col-picker/index.scss @@ -0,0 +1,168 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(col-picker) { + @include e(list-item) { + @include when(disabled) { + color: $-dark-color3; + } + } + + @include e(list-item-tip) { + color: $-dark-color-gray; + } + + :deep(.wd-col-picker__arrow) { + color: $-dark-color; + } + + @include e(list) { + color: $-dark-color; + } + + @include e(selected) { + color: $-dark-color; + } + + :deep(.wd-col-picker__cell--placeholder) { + .wd-cell__value { + color: $-dark-color-gray; + } + } + } +} + +@include b(col-picker) { + @include edeep(cell) { + @include when(disabled) { + .wd-cell__value { + color: $-input-disabled-color; + cursor: not-allowed; + } + } + @include when(error) { + .wd-cell__value { + color: $-input-error-color; + } + .wd-col-picker__arrow { + color: $-input-error-color; + } + } + @include when(large) { + .wd-col-picker__arrow { + font-size: $-cell-icon-size-large; + } + } + + @include m(placeholder) { + .wd-cell__value { + color: $-input-placeholder-color; + } + } + + } + + @include edeep(arrow) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-arrow-color; + line-height: $-cell-line-height; + } + + @include e(selected) { + height: $-col-picker-selected-height; + font-size: $-col-picker-selected-fs; + color: $-col-picker-selected-color; + overflow: hidden; + } + + @include e(selected-container){ + position: relative; + display: flex; + user-select: none; + } + + @include e(selected-item) { + flex: 0 0 auto; + height: $-col-picker-selected-height; + line-height: $-col-picker-selected-height; + padding: $-col-picker-selected-padding; + + @include when(selected) { + font-weight: $-col-picker-selected-fw; + } + } + + @include e(selected-line) { + position: absolute; + bottom: 5px; + width: $-col-picker-line-width; + left: 0; + height: $-col-picker-line-height; + background: $-col-picker-line-color; + z-index: 1; + border-radius: calc($-col-picker-line-height / 2); + box-shadow: $-col-picker-line-box-shadow; + } + + @include e(list-container){ + position: relative; + } + + @include e(list) { + height: $-col-picker-list-height; + padding-bottom: $-col-picker-list-padding-bottom; + box-sizing: border-box; + overflow: auto; + color: $-col-picker-list-color; + font-size: $-col-picker-list-fs; + -webkit-overflow-scrolling: touch; + } + + @include e(list-item) { + display: flex; + padding: $-col-picker-list-item-padding; + align-items: flex-start; + + @include when(selected) { + color: $-col-picker-list-color-checked; + + :deep(.wd-col-picker__checked) { + opacity: 1; + } + } + @include when(disabled) { + color: $-col-picker-list-color-disabled; + } + } + + @include e(list-item-label) { + line-height: 1.285; + } + + @include e(list-item-tip) { + margin-top: 2px; + font-size: $-col-picker-list-fs-tip; + color: $-col-picker-list-color-tip; + } + + @include edeep(checked) { + display: block; + margin-left: 4px; + font-size: $-col-picker-list-checked-icon-size; + color: $-col-picker-list-color-checked; + opacity: 0; + } + + @include e(loading) { + display: flex; + position: absolute; + top: 0; + left: 0; + right: 0; + bottom: 0; + align-items: center; + justify-content: center; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-col-picker/types.ts b/src/uni_modules/wot-design-uni/components/wd-col-picker/types.ts new file mode 100644 index 0000000..ae28eea --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-col-picker/types.ts @@ -0,0 +1,166 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp, numericProp } from '../common/props' +import type { FormItemRule } from '../wd-form/types' + +export const colPickerProps = { + ...baseProps, + /** + * 选中项 + */ + modelValue: makeRequiredProp(Array as PropType>), + /** + * 选择器数据,二维数组 + */ + columns: makeArrayProp[]>(), + /** + * 选择器左侧文案 + */ + label: String, + /** + * 设置左侧标题宽度 + */ + labelWidth: makeStringProp('33%'), + /** + * 使用 label 插槽时设置该选项 + */ + useLabelSlot: makeBooleanProp(false), + /** + * 使用默认插槽时设置该选项 + */ + useDefaultSlot: makeBooleanProp(false), + /** + * 禁用 + */ + disabled: makeBooleanProp(false), + /** + * 只读 + */ + readonly: makeBooleanProp(false), + /** + * 选择器占位符 + */ + placeholder: String, + /** + * 弹出层标题 + */ + title: String, + /** + * 接收当前列的选中项 item、当前列下标、当前列选中项下标下一列数据处理函数 resolve、结束选择 finish + */ + columnChange: Function as PropType, + /** + * 自定义展示文案的格式化函数,返回一个字符串 + */ + displayFormat: Function as PropType, + /** + * 确定前校验函数,接收 (value, resolve) 参数,通过 resolve 继续执行 picker,resolve 接收 1 个 boolean 参数 + */ + beforeConfirm: Function as PropType, + /** + * 选择器的值靠右展示 + */ + alignRight: makeBooleanProp(false), + /** + * 是否为错误状态,错误状态时右侧内容为红色 + */ + error: makeBooleanProp(false), + /** + * 是否必填 + */ + required: makeBooleanProp(false), + /** + * 设置选择器大小,可选值:large + */ + size: String, + /** + * 选项对象中,value 对应的 key + */ + valueKey: makeStringProp('value'), + /** + * 选项对象中,展示的文本对应的 key + */ + labelKey: makeStringProp('label'), + /** + * 选项对象中,提示文案对应的 key + */ + tipKey: makeStringProp('tip'), + /** + * loading 图标的颜色 + */ + loadingColor: makeStringProp('#4D80F0'), + /** + * 点击遮罩是否关闭 + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 自动触发 column-change 事件来补全数据,当 columns 为空数组或者 columns 数组长度小于 value 数组长度时,会自动触发 column-change + */ + autoComplete: makeBooleanProp(false), + /** + * 弹窗层级 + */ + zIndex: makeNumberProp(15), + /** + * 弹出面板是否设置底部安全距离(iphone X 类型的机型) + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 是否超出隐藏 + */ + ellipsis: makeBooleanProp(false), + /** + * 表单域 model 字段名,在使用表单校验功能的情况下,该属性是必填的 + */ + prop: String, + /** + * 表单验证规则,结合wd-form组件使用 + */ + rules: makeArrayProp(), + /** + * 底部条宽度,单位像素 + */ + lineWidth: numericProp, + /** + * 底部条高度,单位像素 + */ + lineHeight: numericProp, + /** + * label 外部自定义样式 + */ + customViewClass: makeStringProp(''), + /** + * value 外部自定义样式 + */ + customLabelClass: makeStringProp(''), + customValueClass: makeStringProp(''), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 必填标记位置,可选值:before、after + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} + +export type ColPickerProps = ExtractPropTypes + +export type ColPickerColumnChangeOption = { + selectedItem: Record + index: number + rowIndex: number + resolve: (nextColumn: Record[]) => void + finish: (isOk?: boolean) => void +} +export type ColPickerColumnChange = (option: ColPickerColumnChangeOption) => void +export type ColPickerDisplayFormat = (selectedItems: Record[]) => string +export type ColPickerBeforeConfirm = (value: (string | number)[], selectedItems: Record[], resolve: (isPass: boolean) => void) => void + +export type ColPickerExpose = { + // 关闭picker弹框 + close: () => void + // 打开picker弹框 + open: () => void +} + +export type ColPickerInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-col-picker/wd-col-picker.vue b/src/uni_modules/wot-design-uni/components/wd-col-picker/wd-col-picker.vue new file mode 100644 index 0000000..7c494c5 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-col-picker/wd-col-picker.vue @@ -0,0 +1,498 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-col/index.scss b/src/uni_modules/wot-design-uni/components/wd-col/index.scss new file mode 100644 index 0000000..160b919 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-col/index.scss @@ -0,0 +1,19 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +$i: 1; + +@include b(col) { + float: left; + box-sizing: border-box; +} + +@while $i <= 24 { + .wd-col__#{$i} { + width: calc(100% / 24 * $i); + } + .wd-col__offset-#{$i} { + margin-left: calc(100% / 24 * $i); + } + $i: $i + 1; +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-col/types.ts b/src/uni_modules/wot-design-uni/components/wd-col/types.ts new file mode 100644 index 0000000..78c6a8a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-col/types.ts @@ -0,0 +1,15 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeNumberProp } from '../common/props' + +export const colProps = { + ...baseProps, + /** + * 列元素宽度 + */ + span: makeNumberProp(24), + /** + * 列元素偏移距离 + */ + offset: makeNumberProp(0) +} +export type ColProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-col/wd-col.vue b/src/uni_modules/wot-design-uni/components/wd-col/wd-col.vue new file mode 100644 index 0000000..11aad88 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-col/wd-col.vue @@ -0,0 +1,49 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss new file mode 100644 index 0000000..97f4655 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-collapse-item/index.scss @@ -0,0 +1,90 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(collapse-item) { + @include halfPixelBorder('top', 0, $-dark-border-color); + + + @include e(title) { + color: $-dark-color; + } + + @include e(body) { + color: $-dark-color3; + } + + @include when(disabled) { + .wd-collapse-item__title { + color: $-dark-color-gray; + } + .wd-collapse-item__arrow { + color: $-dark-color-gray; + } + } + } +} + + +@include b(collapse-item) { + position: relative; + @include halfPixelBorder('top'); + + + @include e(header) { + position: relative; + display: flex; + justify-content: space-between; + align-items: center; + padding: $-collapse-header-padding; + overflow: hidden; + user-select: none; + + @include when(expanded) { + @include halfPixelBorder('bottom'); + } + + @include when(custom) { + display: block; + } + } + + @include e(title) { + color: $-collapse-title-color; + font-weight: $-fw-medium; + font-size: $-collapse-title-fs; + } + + @include edeep(arrow) { + display: block; + font-size: $-collapse-arrow-size; + color: $-collapse-arrow-color; + transition: transform 0.3s; + + @include when(retract) { + transform: rotate(-180deg); + } + } + + @include e(wrapper) { + position: relative; + overflow: hidden; + will-change: height; + } + + @include e(body) { + color: $-collapse-body-color; + font-size: $-collapse-body-fs; + padding: $-collapse-body-padding; + line-height: 1.43; + } + + @include when(disabled) { + .wd-collapse-item__title { + color: $-collapse-disabled-color; + } + .wd-collapse-item__arrow { + color: $-collapse-disabled-color; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts new file mode 100644 index 0000000..07b28f6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-collapse-item/types.ts @@ -0,0 +1,48 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeRequiredProp, makeStringProp } from '../common/props' + +export type CollapseItemBeforeExpand = (name: string) => boolean | Promise + +export const collapseItemProps = { + ...baseProps, + /** + * 自定义折叠栏内容容器样式类名 + */ + customBodyClass: makeStringProp(''), + /** + * 自定义折叠栏内容容器样式 + */ + customBodyStyle: makeStringProp(''), + /** + * 折叠栏的标题, 可通过 slot 传递自定义内容 + */ + title: makeStringProp(''), + /** + * 禁用折叠栏 + */ + disabled: makeBooleanProp(false), + /** + * 折叠栏的标识符 + */ + name: makeRequiredProp(String), + /** + * 打开前的回调函数,返回 false 可以阻止打开,支持返回 Promise + */ + beforeExpend: Function as PropType +} + +export type CollapseItemProps = ExtractPropTypes + +export type CollapseItemExpose = { + /** + * 获取展开状态 + * @returns boolean + */ + getExpanded: () => boolean + /** + * 更新展开状态 + */ + updateExpand: () => Promise +} + +export type CollapseItemInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue b/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue new file mode 100644 index 0000000..2f1d123 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-collapse-item/wd-collapse-item.vue @@ -0,0 +1,171 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse/index.scss b/src/uni_modules/wot-design-uni/components/wd-collapse/index.scss new file mode 100644 index 0000000..552dc97 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-collapse/index.scss @@ -0,0 +1,55 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(collapse) { + background: $-dark-background2; + + @include e(content) { + color: $-dark-color3; + } + } +} + +@include b(collapse) { + background: $-color-white; + + @include when(viewmore) { + padding: $-collapse-side-padding; + } + @include e(content) { + font-size: $-collapse-body-fs; + color: $-collapse-body-color; + + @include when(retract) { + display: -webkit-box; + -webkit-box-orient: vertical; + overflow: hidden; + font-size: $-collapse-retract-fs; + } + } + @include e(more) { + display: inline-block; + font-size: $-collapse-retract-fs; + margin-top: 8px; + color: $-collapse-more-color; + user-select: none; + } + @include e(more-txt) { + display: inline-block; + vertical-align: middle; + margin-right: 4px; + } + @include e(arrow) { + display: inline-block; + vertical-align: middle; + transition: transform 0.1s; + font-size: $-collapse-arrow-size; + height: $-collapse-arrow-size; + line-height: $-collapse-arrow-size; + + @include when(retract) { + transform: rotate(-180deg); + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse/types.ts b/src/uni_modules/wot-design-uni/components/wd-collapse/types.ts new file mode 100644 index 0000000..e2057f8 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-collapse/types.ts @@ -0,0 +1,58 @@ +import { type ComponentPublicInstance, type ExtractPropTypes, type InjectionKey, type PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type CollapseToggleAllOptions = + | boolean + | { + expanded?: boolean + skipDisabled?: boolean + } + +export type CollapseProvide = { + props: Partial + toggle: (name: string, expanded: boolean) => void +} + +export const COLLAPSE_KEY: InjectionKey = Symbol('wd-collapse') + +export const collapseProps = { + ...baseProps, + /** + * 查看更多模式下的插槽外部自定义样式 + */ + customMoreSlotClass: makeStringProp(''), + /** + * 绑定值 + */ + modelValue: { + type: [String, Array, Boolean] as PropType | boolean> + }, + /** + * 手风琴模式 + */ + accordion: makeBooleanProp(false), + /** + * 查看更多的折叠面板 + */ + viewmore: makeBooleanProp(false), + /** + * 查看更多的自定义插槽使用标志 + */ + useMoreSlot: makeBooleanProp(false), + /** + * 查看更多的折叠面板,收起时的显示行数 + */ + lineNum: makeNumberProp(2) +} + +export type CollapseProps = ExtractPropTypes + +export type CollapseExpose = { + /** + * 切换所有面板展开状态,传 true 为全部展开,false 为全部收起,不传参为全部切换 + * @param options 面板状态 + */ + toggleAll: (options?: CollapseToggleAllOptions) => void +} + +export type CollapseInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-collapse/wd-collapse.vue b/src/uni_modules/wot-design-uni/components/wd-collapse/wd-collapse.vue new file mode 100644 index 0000000..d39130d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-collapse/wd-collapse.vue @@ -0,0 +1,151 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-config-provider/types.ts b/src/uni_modules/wot-design-uni/components/wd-config-provider/types.ts new file mode 100644 index 0000000..cb8f0b9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-config-provider/types.ts @@ -0,0 +1,1052 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { makeStringProp, baseProps } from '../common/props' + +export type ConfigProviderTheme = 'light' | 'dark' + +export const configProviderProps = { + ...baseProps, + /** + * 主题风格,设置为 dark 来开启深色模式,全局生效 + */ + theme: makeStringProp('light'), + /** + * 自定义主题变量 + */ + themeVars: { + type: Object as PropType, + default: () => ({}) + } +} + +export type ConfigProviderProps = ExtractPropTypes + +export type baseThemeVars = { + colorTheme?: string // 主题色 + colorWhite?: string // 用于mix的白色 + colorBlack?: string // 用于mix的黑色 + colorSuccess?: string // 成功色 + colorWarning?: string // 警告色 + colorDanger?: string // 危险出错色 + colorPurple?: string // 紫色 + colorYellow?: string // 黄色 + colorBlue?: string // 蓝色 + colorInfo?: string // 信息色 + colorGray1?: string // 灰色1 + colorGray2?: string // 灰色2 + colorGray3?: string // 灰色3 + colorGray4?: string // 灰色4 + colorGray5?: string // 灰色5 + colorGray6?: string // 灰色6 + colorGray7?: string // 灰色7 + colorGray8?: string // 灰色8 + fontGray1?: string // 字体灰色1 + fontGray2?: string // 字体灰色2 + fontGray3?: string // 字体灰色3 + fontGray4?: string // 字体灰色4 + fontWhite1?: string // 字体白色1 + fontWhite2?: string // 字体白色2 + fontWhite3?: string // 字体白色3 + fontWhite4?: string // 字体白色4 + colorTitle?: string // 模块标题/重要正文 + colorContent?: string // 普通正文 + colorSecondary?: string // 次要信息,注释/补充/正文 + colorAid?: string // 辅助文字字号,弱化信息,引导性/不可点文字 + colorTip?: string // 失效、默认提示文字 + colorBorder?: string // 控件边框线 + colorBorderLight?: string // 分割线颜色 + colorBg?: string // 背景色、禁用填充色 + darkBackground?: string // 深色背景1 + darkBackground2?: string // 深色背景2 + darkBackground3?: string // 深色背景3 + darkBackground4?: string // 深色背景4 + darkBackground5?: string // 深色背景5 + darkBackground6?: string // 深色背景6 + darkBackground7?: string // 深色背景7 + darkColor?: string // 深色字体1 + darkColor2?: string // 深色字体2 + darkColor3?: string // 深色字体3 + darkColorGray?: string // 深色灰色 + darkBorderColor?: string // 深色边框颜色 + colorIcon?: string // icon颜色 + colorIconActive?: string // icon颜色hover + colorIconDisabled?: string // icon颜色disabled + fsBig?: string // 大型标题字号 + fsImportant?: string // 重要数据字号 + fsTitle?: string // 标题字号/重要正文字号 + fsContent?: string // 普通正文字号 + fsSecondary?: string // 次要信息字号 + fsAid?: string // 辅助文字字号 + fwMedium?: string // 字重500 + fwSemibold?: string // 字重600 + sizeSidePadding?: string // 屏幕两边留白padding +} + +export type actionSheetThemeVars = { + actionSheetWeight?: string + actionSheetRadius?: string + actionSheetLoadingSize?: string + actionSheetActionHeight?: string + actionSheetColor?: string + actionSheetFs?: string + actionSheetActiveColor?: string + actionSheetSubnameFs?: string + actionSheetSubnameColor?: string + actionSheetDisabledColor?: string + actionSheetBg?: string + actionSheetTitleHeight?: string + actionSheetTitleFs?: string + actionSheetCloseFs?: string + actionSheetCloseColor?: string + actionSheetCloseTop?: string + actionSheetCloseRight?: string + actionSheetCancelColor?: string + actionSheetCancelHeight?: string + actionSheetCancelBg?: string + actionSheetCancelRadius?: string + actionSheetPanelPadding?: string + actionSheetPanelImgFs?: string + actionSheetPanelImgRadius?: string +} + +export type badgeThemeVars = { + badgeBg?: string + badgeColor?: string + badgeFs?: string + badgePadding?: string + badgeHeight?: string + badgePrimary?: string + badgeSuccess?: string + badgeWarning?: string + badgeDanger?: string + badgeInfo?: string + badgeDotSize?: string + badgeBorder?: string +} + +export type buttonThemeVars = { + buttonDisabledOpacity?: string + buttonSmallHeight?: string + buttonSmallPadding?: string + buttonSmallFs?: string + buttonSmallRadius?: string + buttonSmallLoading?: string + buttonMediumHeight?: string + buttonMediumPadding?: string + buttonMediumFs?: string + buttonMediumRadius?: string + buttonMediumLoading?: string + buttonMediumBoxShadowSize?: string + buttonLargeHeight?: string + buttonLargePadding?: string + buttonLargeFs?: string + buttonLargeRadius?: string + buttonLargeLoading?: string + buttonLargeBoxShadowSize?: string + buttonIconFs?: string + buttonIconSize?: string + buttonIconColor?: string + buttonIconDisabledColor?: string + buttonNormalColor?: string + buttonNormalDisabledColor?: string + buttonPlainBgColor?: string + buttonPrimaryColor?: string + buttonPrimaryBgColor?: string + buttonSuccessColor?: string + buttonSuccessBgColor?: string + buttonInfoColor?: string + buttonInfoBgColor?: string + buttonInfoPlainBorderColor?: string + buttonInfoPlainNormalColor?: string + buttonWarningColor?: string + buttonWarningBgColor?: string + buttonErrorColor?: string + buttonErrorBgColor?: string + buttonTextHoverOpacity?: string +} + +export type cellThemeVars = { + cellPadding?: string + cellLineHeight?: string + cellGroupTitleFs?: string + cellGroupPadding?: string + cellGroupTitleColor?: string + cellGroupValueFs?: string + cellGroupValueColor?: string + cellWrapperPadding?: string + cellWrapperPaddingLarge?: string + cellWrapperPaddingWithLabel?: string + cellIconRight?: string + cellIconSize?: string + cellTitleFs?: string + cellTitleColor?: string + cellLabelFs?: string + cellLabelColor?: string + cellValueFs?: string + cellValueFsLarge?: string + cellValueColor?: string + cellArrowSize?: string + cellArrowColor?: string + cellClearColor?: string + cellTapBg?: string + cellTitleFsLarge?: string + cellLabelFsLarge?: string + cellIconSizeLarge?: string + cellRequiredColor?: string + cellRequiredSize?: string + cellRequiredMargin?: string + cellVerticalTop?: string +} + +export type calendarThemeVars = { + calendarFs?: string + calendarPanelPadding?: string + calendarPanelTitleFs?: string + calendarPanelTitleColor?: string + calendarWeekColor?: string + calendarWeekHeight?: string + calendarWeekFs?: string + calendarDayFs?: string + calendarDayColor?: string + calendarDayFw?: string + calendarDayHeight?: string + calendarMonthWidth?: string + calendarActiveColor?: string + calendarSelectedColor?: string + calendarDisabledColor?: string + calendarRangeColor?: string + calendarActiveBorder?: string + calendarInfoFs?: string + calendarItemMarginBottom?: string +} + +export type checkboxThemeVars = { + checkboxMargin?: string + checkboxBg?: string + checkboxLabelMargin?: string + checkboxSize?: string + checkboxIconSize?: string + checkboxBorderColor?: string + checkboxCheckColor?: string + checkboxLabelFs?: string + checkboxLabelColor?: string + checkboxCheckedColor?: string + checkboxDisabledColor?: string + checkboxDisabledLabelColor?: string + checkboxDisabledCheckColor?: string + checkboxDisabledCheckBg?: string + checkboxSquareRadius?: string + checkboxLargeSize?: string + checkboxLargeLabelFs?: string + checkboxButtonHeight?: string + checkboxButtonMinWidth?: string + checkboxButtonRadius?: string + checkboxButtonBg?: string + checkboxButtonFontSize?: string + checkboxButtonBorder?: string + checkboxButtonDisabledBorder?: string +} + +export type collapseThemeVars = { + collapseSidePadding?: string + collapseBodyPadding?: string + collapseHeaderPadding?: string + collapseTitleColor?: string + collapseTitleFs?: string + collapseArrowSize?: string + collapseArrowColor?: string + collapseBodyFs?: string + collapseBodyColor?: string + collapseDisabledColor?: string + collapseRetractFs?: string + collapseMoreColor?: string +} + +export type dividerThemeVars = { + dividerPadding?: string + dividerMargin?: string + dividerColor?: string + dividerLineColor?: string + dividerLineHeight?: string + dividerFs?: string + dividerContentLeftWidth?: string + dividerContentLeftMargin?: string + dividerContentRightMargin?: string + dividerContentRightWidth?: string + dividerVerticalHeight?: string + dividerVerticalContentMargin?: string + dividerVerticalLineWidth?: string +} + +export type dropMenuThemeVars = { + dropMenuHeight?: string + dropMenuColor?: string + dropMenuFs?: string + dropMenuArrowFs?: string + dropMenuSidePadding?: string + dropMenuDisabledColor?: string + dropMenuItemHeight?: string + dropMenuItemColor?: string + dropMenuItemFs?: string + dropMenuItemColorActive?: string + dropMenuItemColorTip?: string + dropMenuItemFsTip?: string + dropMenuOptionCheckSize?: string + dropMenuLineColor?: string + dropMenuLineHeight?: string +} + +export type inputNumberThemeVars = { + inputNumberColor?: string + inputNumberBorderColor?: string + inputNumberDisabledColor?: string + inputNumberHeight?: string + inputNumberBtnWidth?: string + inputNumberInputWidth?: string + inputNumberRadius?: string + inputNumberFs?: string + inputNumberIconSize?: string + inputNumberIconColor?: string +} + +export type inputThemeVars = { + inputPadding?: string + inputBorderColor?: string + inputNotEmptyBorderColor?: string + inputFs?: string + inputFsLarge?: string + inputIconMargin?: string + inputColor?: string + inputPlaceholderColor?: string + inputDisabledColor?: string + inputErrorColor?: string + inputIconColor?: string + inputClearColor?: string + inputCountColor?: string + inputCountCurrentColor?: string + inputBg?: string + inputCellBg?: string + inputCellBorderColor?: string + inputCellPadding?: string + inputCellPaddingLarge?: string + inputCellHeight?: string + inputCellLabelWidth?: string + inputInnerHeight?: string + inputInnerHeightNoBorder?: string + inputCountFs?: string + inputCountFsLarge?: string + inputIconSize?: string + inputIconSizeLarge?: string +} + +export type textareaThemeVars = { + textareaPadding?: string + textareaBorderColor?: string + textareaNotEmptyBorderColor?: string + textareaFs?: string + textareaFsLarge?: string + textareaIconMargin?: string + textareaColor?: string + textareaIconColor?: string + textareaClearColor?: string + textareaCountColor?: string + textareaCountCurrentColor?: string + textareaBg?: string + textareaCellBorderColor?: string + textareaCellPadding?: string + textareaCellPaddingLarge?: string + textareaCellHeight?: string + textareaCountFs?: string + textareaCountFsLarge?: string + textareaIconSize?: string + textareaIconSizeLarge?: string +} + +export type loadmoreThemeVars = { + loadmoreHeight?: string + loadmoreColor?: string + loadmoreFs?: string + loadmoreErrorColor?: string + loadmoreRefreshFs?: string + loadmoreLoadingSize?: string +} + +export type messageBoxThemeVars = { + messageBoxWidth?: string + messageBoxBg?: string + messageBoxRadius?: string + messageBoxPadding?: string + messageBoxTitleFs?: string + messageBoxTitleColor?: string + messageBoxContentFs?: string + messageBoxContentColor?: string + messageBoxContentMaxHeight?: string + messageBoxContentScrollbarWidth?: string + messageBoxContentScrollbarColor?: string + messageBoxInputErrorColor?: string +} + +export type noticeBarThemeVars = { + noticeBarFs?: string + noticeBarLineHeight?: string + noticeBarBorderRadius?: string + noticeBarPadding?: string + noticeBarWarningBg?: string + noticeBarInfoBg?: string + noticeBarDangerBg?: string + noticeBarWarningColor?: string + noticeBarInfoColor?: string + noticeBarDangerColor?: string + noticeBarPrefixSize?: string + noticeBarCloseBg?: string + noticeBarCloseSize?: string + noticeBarCloseColor?: string + noticeBarWrapPadding?: string +} + +export type paginationThemeVars = { + paginationContentPadding?: string + paginationMessagePadding?: string + paginationMessageFs?: string + paginationMessageColor?: string + paginationNavBorder?: string + paginationNavBorderRadius?: string + paginationNavFs?: string + paginationNavWidth?: string + paginationNavColor?: string + paginationNavContentFs?: string + paginationNavSepatatorPadding?: string + paginationNavCurrentColor?: string + paginationIconSize?: string +} + +export type pickerThemeVars = { + pickerToolbarHeight?: string + pickerActionHeight?: string + pickerToolbarFinishColor?: string + pickerToolbarCancelColor?: string + pickerToolbarFs?: string + pickerToolbarTitleColor?: string + pickerColumnFs?: string + pickerBg?: string + pickerColumnActiveFs?: string + pickerColumnColor?: string + pickerColumnHeight?: string + pickerColumnItemHeight?: string + pickerColumnSelectBg?: string + pickerLoadingButtonColor?: string + pickerColumnPadding?: string + pickerColumnDisabledColor?: string + pickerMask?: string + pickerLoadingBg?: string + pickerRegionSeparatorColor?: string + pickerCellArrowSizeLarge?: string + pickerRegionColor?: string + pickerRegionBgActiveColor?: string + pickerRegionFs?: string +} + +export type colPickerThemeVars = { + colPickerSelectedHeight?: string + colPickerSelectedPadding?: string + colPickerSelectedFs?: string + colPickerSelectedColor?: string + colPickerSelectedFw?: string + colPickerLineWidth?: string + colPickerLineHeight?: string + colPickerLineColor?: string + colPickerLineBoxShadow?: string + colPickerListHeight?: string + colPickerListPaddingBottom?: string + colPickerListColor?: string + colPickerListColorDisabled?: string + colPickerListColorTip?: string + colPickerListFs?: string + colPickerListFsTip?: string + colPickerListItemPadding?: string + colPickerListCheckedIconSize?: string + colPickerListColorChecked?: string +} + +export type overlayThemeVars = { + overlayBg?: string + overlayBgDark?: string +} + +export type popupThemeVars = { + popupCloseSize?: string + popupCloseColor?: string +} + +export type progressThemeVars = { + progressPadding?: string + progressBg?: string + progressDangerColor?: string + progressSuccessColor?: string + progressWarningColor?: string + progressColor?: string + progressHeight?: string + progressLabelColor?: string + progressLabelFs?: string + progressIconFs?: string +} + +export type radioThemeVars = { + radioMargin?: string + radioLabelMargin?: string + radioSize?: string + radioBg?: string + radioLabelFs?: string + radioLabelColor?: string + radioCheckedColor?: string + radioDisabledColor?: string + radioDisabledLabelColor?: string + radioLargeSize?: string + radioLargeLabelFs?: string + radioButtonHeight?: string + radioButtonMinWidth?: string + radioButtonMaxWidth?: string + radioButtonRadius?: string + radioButtonBg?: string + radioButtonFs?: string + radioButtonBorder?: string + radioButtonDisabledBorder?: string + radioDotSize?: string + radioDotLargeSize?: string + radioDotCheckedBg?: string + radioDotCheckedBorderColor?: string + radioDotBorderColor?: string + radioDotDisabledBorder?: string + radioDotDisabledBg?: string +} + +export type searchThemeVars = { + searchSidePadding?: string + searchPadding?: string + searchInputRadius?: string + searchInputBg?: string + searchInputHeight?: string + searchInputPadding?: string + searchInputFs?: string + searchInputColor?: string + searchIconColor?: string + searchIconSize?: string + searchClearIconSize?: string + searchPlaceholderColor?: string + searchCancelPadding?: string + searchCancelFs?: string + searchCancelColor?: string + searchLightBg?: string +} + +export type sliderThemeVars = { + sliderFs?: string + sliderHandleRadius?: string + sliderHandleBg?: string + sliderAxieHeight?: string + sliderColor?: string + sliderAxieBg?: string + sliderLineColor?: string + sliderDisabledColor?: string +} + +export type sortButtonThemeVars = { + sortButtonFs?: string + sortButtonColor?: string + sortButtonHeight?: string + sortButtonLineHeight?: string + sortButtonLineColor?: string +} + +export type stepsThemeVars = { + stepsIconSize?: string + stepsInactiveColor?: string + stepsFinishedColor?: string + stepsIconTextFs?: string + stepsErrorColor?: string + stepsTitleFs?: string + stepsTitleFw?: string + stepsLabelFs?: string + stepsDescriptionColor?: string + stepsIsIconWidth?: string + stepsLineColor?: string + stepsDotSize?: string + stepsDotActiveSize?: string +} + +export type switchThemeVars = { + switchSize?: string + switchWidth?: string + switchHeight?: string + switchCircleSize?: string + switchBorderColor?: string + switchActiveColor?: string + switchActiveShadowColor?: string + switchInactiveColor?: string + switchInactiveShadowColor?: string +} + +export type tabsThemeVars = { + tabsNavArrowFs?: string + tabsNavArrowOpenFs?: string + tabsNavWidth?: string + tabsNavHeight?: string + tabsNavFs?: string + tabsNavColor?: string + tabsNavBg?: string + tabsNavActiveColor?: string + tabsNavDisabledColor?: string + tabsNavLineHeight?: string + tabsNavLineWidth?: string + tabsNavLineBgColor?: string + tabsNavMapFs?: string + tabsNavMapColor?: string + tabsNavMapArrowColor?: string + tabsNavMapBtnBeforeBg?: string + tabsNavMapButtonBackColor?: string + tabsNavMapButtonRadius?: string + tabsNavMapModalBg?: string +} + +export type tagThemeVars = { + tagFs?: string + tagColor?: string + tagSmallFs?: string + tagInfoColor?: string + tagPrimaryColor?: string + tagDangerColor?: string + tagWarningColor?: string + tagSuccessColor?: string + tagInfoBg?: string + tagPrimaryBg?: string + tagDangerBg?: string + tagWarningBg?: string + tagSuccessBg?: string + tagRoundColor?: string + tagRoundBorderColor?: string + tagRoundRadius?: string + tagMarkRadius?: string + tagCloseSize?: string + tagCloseColor?: string + tagCloseActiveColor?: string +} + +export type toastThemeVars = { + toastColor?: string + toastPadding?: string + toastMaxWidth?: string + toastRadius?: string + toastBg?: string + toastFs?: string + toastLineHeight?: string + toastWithIconMinWidth?: string + toastIconSize?: string + toastIconMarginRight?: string + toastIconMarginBottom?: string + toastLoadingPadding?: string + toastLoadingMarginBottom?: string + toastBoxShadow?: string +} + +export type loadingThemeVars = { + loadingSize?: string +} + +export type tooltipThemeVars = { + tooltipBg?: string + tooltipColor?: string + tooltipRadius?: string + tooltipArrowSize?: string + tooltipFs?: string + tooltipBlur?: string + tooltipPadding?: string + tooltipCloseSize?: string + tooltipZIndex?: string + tooltipLineHeight?: string +} + +export type popoverThemeVars = { + popoverBg?: string + popoverColor?: string + popoverBoxShadow?: string + popoverArrowBoxShadow?: string + popoverBorderColor?: string + popoverRadius?: string + popoverArrowSize?: string + popoverFs?: string + popoverPadding?: string + popoverLineHeight?: string + popoverZIndex?: string +} + +export type gridItemThemeVars = { + gridItemFs?: string + gridItemBg?: string + gridItemPadding?: string + gridItemBorderColor?: string + gridItemHoverBg?: string + gridItemHoverBgDark?: string +} + +export type statustipThemeVars = { + statustipFs?: string + statustipColor?: string + statustipLineHeight?: string + statustipPadding?: string +} + +export type cardThemeVars = { + cardBg?: string + cardFs?: string + cardPadding?: string + cardFooterPadding?: string + cardShadowColor?: string + cardRadius?: string + cardLineHeight?: string + cardMargin?: string + cardTitleColor?: string + cardTitleFs?: string + cardContentBorderColor?: string + cardRectangleTitlePadding?: string + cardRectangleContentPadding?: string + cardRectangleFooterPadding?: string + cardContentColor?: string + cardContentLineHeight?: string + cardContentMargin?: string + cardContentRectangleMargin?: string +} + +export type uploadThemeVars = { + uploadSize?: string + uploadEvokeIconSize?: string + uploadEvokeBg?: string + uploadEvokeColor?: string + uploadEvokeDisabledColor?: string + uploadCloseIconSize?: string + uploadCloseIconColor?: string + uploadProgressFs?: string + uploadFileFs?: string + uploadFileColor?: string + uploadPreviewNameFs?: string + uploadPreviewIconSize?: string + uploadPreviewNameBg?: string + uploadPreviewNameHeight?: string + uploadCoverIconSize?: string +} + +export type curtainThemeVars = { + curtainContentRadius?: string + curtainContentCloseColor?: string + curtainContentCloseFs?: string +} + +export type notifyThemeVars = { + notifyTextColor?: string + notifyPadding?: string + notifyFontSize?: string + notifyLineHeight?: string + notifyPrimaryBackground?: string + notifySuccessBackground?: string + notifyDangerBackground?: string + notifyWarningBackground?: string +} + +export type skeletonThemeVars = { + skeletonBackgroundColor?: string + skeletonAnimationGradient?: string + skeletonAnimationFlashed?: string + skeletonTextHeightDefault?: string + skeletonRectHeightDefault?: string + skeletonCircleHeightDefault?: string + skeletonRowMarginBottom?: string + skeletonBorderRadiusText?: string + skeletonBorderRadiusRect?: string + skeletonBorderRadiusCircle?: string +} + +export type circleThemeVars = { + circleTextColor?: string +} + +export type swiperThemeVars = { + swiperRadius?: string + swiperItemPadding?: string + swiperItemTextColor?: string + swiperItemTextFs?: string +} + +export type swiperNavThemeVars = { + swiperNavDotColor?: string + swiperNavDotActiveColor?: string + swiperNavDotSize?: string + swiperNavDotsBarActiveWidth?: string + swiperNavFractionColor?: string + swiperNavFractionBgColor?: string + swiperNavFractionHeight?: string + swiperNavFractionFontSize?: string + swiperNavBtnColor?: string + swiperNavBtnBgColor?: string + swiperNavBtnSize?: string +} + +export type segmentedThemeVars = { + segmentedPadding?: string + segmentedItemBgColor?: string + segmentedItemColor?: string + segmentedItemAcitveBg?: string + segmentedItemDisabledColor?: string +} + +export type tabbarThemeVars = { + tabbarHeight?: string + tabbarBoxShadow?: string +} + +export type tabbarItemThemeVars = { + tabbarItemTitleFontSize?: string + tabbarItemTitleLineHeight?: string + tabbarInactiveColor?: string + tabbarActiveColor?: string + tabbarItemIconSize?: string +} + +export type navbarThemeVars = { + navbarHeight?: string + navbarColor?: string + navbarBackground?: string + navbarArrowSize?: string + navbarDescFontSize?: string + navbarDescFontColor?: string + navbarTitleFontSize?: string + navbarTitleFontWeight?: string + navbarDisabledOpacity?: string + navbarHoverColor?: string +} + +export type navbarCapsuleThemeVars = { + navbarCapsuleBorderColor?: string + navbarCapsuleBorderRadius?: string + navbarCapsuleWidth?: string + navbarCapsuleHeight?: string + navbarCapsuleIconSize?: string +} + +export type tableThemeVars = { + tableColor?: string + tableBg?: string + tableStripeBg?: string + tableBorderColor?: string + tableFontSize?: string +} + +export type sidebarThemeVars = { + sidebarBg?: string + sidebarWidth?: string + sidebarHeight?: string +} + +export type sidebarItemThemeVars = { + sidebarColor?: string + sidebarItemHeight?: string + sidebarItemLineHeight?: string + sidebarDisabledColor?: string + sidebarActiveColor?: string + sidebarActiveBg?: string + sidebarHoverBg?: string + sidebarBorderRadius?: string + sidebarFontSize?: string + sidebarIconSize?: string + sidebarActiveBorderWidth?: string + sidebarActiveBorderHeight?: string +} + +export type fabThemeVars = { + fabTriggerHeight?: string + fabTriggerWidth?: string + fabActionsPadding?: string + fabIconFs?: string +} + +export type countDownThemeVars = { + countDownTextColor?: string + countDownFontSize?: string + countDownLineHeight?: string +} + +export type keyboardThemeVars = { + keyboardKeyHeight?: string + keyboardKeyFontSize?: string + keyboardKeyBackground?: string + keyboardKeyBorderRadius?: string + keyboardDeleteFontSize?: string + keyboardKeyActiveColor?: string + keyboardButtonTextColor?: string + keyboardButtonBackground?: string + keyboardButtonActiveOpacity?: string + keyboardBackground?: string + keyboardTitleHeight?: string + keyboardTitleColor?: string + keyboardTitleFontSize?: string + keyboardClosePadding?: string + keyboardCloseColor?: string + keyboardCloseFontSize?: string + keyboardIconSize?: string +} + +export type numberKeyboardThemeVars = { + numberKeyboardKeyHeight?: string + numberKeyboardKeyFontSize?: string + numberKeyboardKeyBackground?: string + numberKeyboardKeyBorderRadius?: string + numberKeyboardDeleteFontSize?: string + numberKeyboardKeyActiveColor?: string + numberKeyboardButtonTextColor?: string + numberKeyboardButtonBackground?: string + numberKeyboardButtonActiveOpacity?: string + numberKeyboardBackground?: string + numberKeyboardTitleHeight?: string + numberKeyboardTitleColor?: string + numberKeyboardTitleFontSize?: string + numberKeyboardClosePadding?: string + numberKeyboardCloseColor?: string + numberKeyboardCloseFontSize?: string + numberKeyboardIconSize?: string +} + +export type passwodInputThemeVars = { + passwordInputHeight?: string + passwordInputMargin?: string + passwordInputFontSize?: string + passwordInputRadius?: string + passwordInputBackground?: string + passwordInputInfoColor?: string + passwordInputInfoFontSize?: string + passwordInputBorderColor?: string + passwordInputErrorInfoColor?: string + passwordInputDotSize?: string + passwordInputDotColor?: string + passwordInputTextColor?: string + passwordInputCursorColor?: string + passwordInputCursorWidth?: string + passwordInputCursorHeight?: string + passwordInputCursorDuration?: string +} + +export type formItemThemeVars = { + formItemErrorMessageColor?: string + formItemErrorMessageFontSize?: string + formItemErrorMessageLineHeight?: string +} + +export type backtopThemeVars = { + backtopBg?: string + backtopIconSize?: string +} + +export type indexBarThemeVars = { + indexBarIndexFontSize?: string +} + +export type textThemeVars = { + textInfoColor?: string + textPrimaryColor?: string + textErrorColor?: string + textWarningColor?: string + textSuccessColor?: string +} + +export type videoPreviewThemeVars = { + videoPreviewBg?: string + videoPreviewCloseColor?: string + videoPreviewCloseFontSize?: string +} + +export type imgCropperThemeVars = { + imgCropperIconSize?: string + imgCropperIconColor?: string +} + +export type floatingPanelThemeVars = { + floatingPanelBg?: string + floatingPanelRadius?: string + floatingPanelZIndex?: string + floatingPanelHeaderHeight?: string + floatingPanelBarWidth?: string + floatingPanelBarHeight?: string + floatingPanelBarBg?: string + floatingPanelBarRadius?: string + floatingPanelContentBg?: string +} + +export type signatureThemeVars = { + signatureBg?: string + signatureRadius?: string + signatureBorder?: string + signatureFooterMarginTop?: string + signatureButtonMarginLeft?: string +} + +export type ConfigProviderThemeVars = baseThemeVars & + actionSheetThemeVars & + badgeThemeVars & + buttonThemeVars & + cellThemeVars & + calendarThemeVars & + checkboxThemeVars & + collapseThemeVars & + dividerThemeVars & + dropMenuThemeVars & + inputNumberThemeVars & + inputThemeVars & + textareaThemeVars & + loadmoreThemeVars & + messageBoxThemeVars & + noticeBarThemeVars & + paginationThemeVars & + pickerThemeVars & + colPickerThemeVars & + overlayThemeVars & + popupThemeVars & + progressThemeVars & + radioThemeVars & + searchThemeVars & + sliderThemeVars & + sortButtonThemeVars & + stepsThemeVars & + switchThemeVars & + tabsThemeVars & + tagThemeVars & + toastThemeVars & + loadingThemeVars & + tooltipThemeVars & + popoverThemeVars & + gridItemThemeVars & + statustipThemeVars & + cardThemeVars & + uploadThemeVars & + curtainThemeVars & + notifyThemeVars & + skeletonThemeVars & + circleThemeVars & + swiperThemeVars & + swiperNavThemeVars & + segmentedThemeVars & + tabbarThemeVars & + tabbarItemThemeVars & + navbarThemeVars & + navbarCapsuleThemeVars & + tableThemeVars & + sidebarThemeVars & + sidebarItemThemeVars & + fabThemeVars & + countDownThemeVars & + keyboardThemeVars & + numberKeyboardThemeVars & + passwodInputThemeVars & + formItemThemeVars & + backtopThemeVars & + indexBarThemeVars & + textThemeVars & + videoPreviewThemeVars & + imgCropperThemeVars & + floatingPanelThemeVars & + signatureThemeVars diff --git a/src/uni_modules/wot-design-uni/components/wd-config-provider/wd-config-provider.vue b/src/uni_modules/wot-design-uni/components/wd-config-provider/wd-config-provider.vue new file mode 100644 index 0000000..482980b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-config-provider/wd-config-provider.vue @@ -0,0 +1,82 @@ + + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-count-down/index.scss b/src/uni_modules/wot-design-uni/components/wd-count-down/index.scss new file mode 100644 index 0000000..c9b93f1 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-down/index.scss @@ -0,0 +1,15 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(count-down) { + color: $-dark-color; + } +} + + +@include b(count-down) { + color: $-count-down-text-color; + font-size: $-count-down-font-size; + line-height: $-count-down-line-height; +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-count-down/types.ts b/src/uni_modules/wot-design-uni/components/wd-count-down/types.ts new file mode 100644 index 0000000..7f1bdd7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-down/types.ts @@ -0,0 +1,41 @@ +import type { ComponentPublicInstance, ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeRequiredProp, makeStringProp } from '../common/props' + +export const countDownProps = { + ...baseProps, + /** + * 倒计时时长,单位毫秒 + */ + time: makeRequiredProp(Number), + /** + * 是否开启毫秒 + */ + millisecond: makeBooleanProp(false), + /** + * 格式化时间 + */ + format: makeStringProp('HH:mm:ss'), + /** + * 是否自动开始 + */ + autoStart: makeBooleanProp(true) +} + +export type CountDownProps = ExtractPropTypes + +export type CountDownExpose = { + /** + * 开始倒计时 + */ + start: () => void + /** + * 暂停倒计时 + */ + pause: () => void + /** + * 重设倒计时,若 auto-start 为 true,重设后会自动开始倒计时 + */ + reset: () => void +} + +export type CountDownInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-count-down/utils.ts b/src/uni_modules/wot-design-uni/components/wd-count-down/utils.ts new file mode 100644 index 0000000..efa6200 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-down/utils.ts @@ -0,0 +1,52 @@ +import { padZero } from '../common/util' + +export type TimeData = { + days: number + hours: number + minutes: number + seconds: number + milliseconds: number +} + +export function parseFormat(format: string, timeData: TimeData): string { + const { days } = timeData + let { hours, minutes, seconds, milliseconds } = timeData + + if (format.includes('DD')) { + format = format.replace('DD', padZero(days)) + } else { + hours += days * 24 + } + + if (format.includes('HH')) { + format = format.replace('HH', padZero(hours)) + } else { + minutes += hours * 60 + } + + if (format.includes('mm')) { + format = format.replace('mm', padZero(minutes)) + } else { + seconds += minutes * 60 + } + + if (format.includes('ss')) { + format = format.replace('ss', padZero(seconds)) + } else { + milliseconds += seconds * 1000 + } + + if (format.includes('S')) { + const ms = padZero(milliseconds, 3) + + if (format.includes('SSS')) { + format = format.replace('SSS', ms) + } else if (format.includes('SS')) { + format = format.replace('SS', ms.slice(0, 2)) + } else { + format = format.replace('S', ms.charAt(0)) + } + } + + return format +} diff --git a/src/uni_modules/wot-design-uni/components/wd-count-down/wd-count-down.vue b/src/uni_modules/wot-design-uni/components/wd-count-down/wd-count-down.vue new file mode 100644 index 0000000..04c10f4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-down/wd-count-down.vue @@ -0,0 +1,60 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-count-to/index.scss b/src/uni_modules/wot-design-uni/components/wd-count-to/index.scss new file mode 100644 index 0000000..0a96178 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-to/index.scss @@ -0,0 +1,7 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + + +.wd-count-to{ + vertical-align: bottom; +} diff --git a/src/uni_modules/wot-design-uni/components/wd-count-to/types.ts b/src/uni_modules/wot-design-uni/components/wd-count-to/types.ts new file mode 100644 index 0000000..5cd17ee --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-to/types.ts @@ -0,0 +1,117 @@ +import type { ComponentPublicInstance, ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' +import type { TextType } from '../wd-text/types' + +export const countToProps = { + ...baseProps, + + // 字体大小 + fontSize: makeNumberProp(16), + + // 文本颜色 + color: makeStringProp(''), + /** + * 主题类型 + * 类型:string + * 可选值:'default' /'primary' / 'error' / 'warning' / 'success' + * 默认值:'default' + */ + type: makeStringProp('default'), + /** + * 起始值 + * 类型:number + * 默认值:0 + */ + startVal: makeNumberProp(0), + + /** + * 最终值 + * 类型:number + * 默认值:2021 + */ + endVal: makeNumberProp(2024), + + /** + * 从起始值到结束值数字变动的时间,单位毫秒 + * 类型:number + * 默认值:3000 + */ + duration: makeNumberProp(3000), + /** + * 是否自动开始 + * 类型:boolean + * 默认值:true + */ + autoStart: makeBooleanProp(true), + /** + * 保留的小数位数 + * 类型:number + * 默认值:0 + * 校验:大于等于0 + */ + decimals: { + type: Number, + required: false, + default: 0, + validator(value: number) { + return value >= 0 + } + }, + + // 小数点 + decimal: makeStringProp('.'), + + // 三位三位的隔开效果 + separator: makeStringProp(','), + + /** + * 前缀 + * 类型:string + * 默认值:'' + * @example '¥' 人民币前缀 + */ + prefix: makeStringProp(''), + + /** + * 后缀 + * 类型:string + * 默认值:'' + */ + suffix: makeStringProp(''), + + /** + * 是否具有连贯性 + * 类型:boolean + * 默认值:true + */ + useEasing: makeBooleanProp(true), + + /** + * 自定义根节点样式 + */ + customStyle: makeStringProp(''), + + /** + * 自定义根节点样式类 + */ + customClass: makeStringProp('') +} + +export type CountDownProps = ExtractPropTypes + +export type CountUpExpose = { + /** + * 开始倒计时 + */ + start: () => void + /** + * 暂停倒计时 + */ + pause: () => void + /** + * 重设倒计时,若 auto-start 为 true,重设后会自动开始倒计时 + */ + reset: () => void +} + +export type CountToInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-count-to/wd-count-to.vue b/src/uni_modules/wot-design-uni/components/wd-count-to/wd-count-to.vue new file mode 100644 index 0000000..b72f601 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-count-to/wd-count-to.vue @@ -0,0 +1,125 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-curtain/index.scss b/src/uni_modules/wot-design-uni/components/wd-curtain/index.scss new file mode 100644 index 0000000..4f7c10a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-curtain/index.scss @@ -0,0 +1,85 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +@include b(curtain-wrapper){ + :deep(.wd-curtain){ + display: inline-block; + border-radius: $-curtain-content-radius; + overflow-y: visible !important; + background: transparent; + font-size: 0; + } +} + + +@include b(curtain) { + + @include e(content) { + position: relative; + display: inline-block; + background: transparent; + border-radius: $-curtain-content-radius; + } + @include e(content-link) { + display: block; + border-radius: $-curtain-content-radius; + } + @include e(content-img) { + display: block; + width: auto; + height: auto; + border-radius: $-curtain-content-radius; + } + @include edeep(content-close) { + position: absolute; + margin: 0; + padding: 6px; + top: 10px; + right: 10px; + color: $-curtain-content-close-color; + font-size: $-curtain-content-close-fs; + -webkit-tap-highlight-color: transparent; + &.top { + margin: 0 0 0 -18px; + top: -62px; + right: unset; + left: 50%; + bottom: unset; + } + &.top-left { + margin: 0; + top: -62px; + right: unset; + left: -6px; + bottom: unset; + } + &.top-right { + margin: 0; + top: -62px; + right: -6px; + left: unset; + bottom: unset; + } + &.bottom { + margin: 0 0 0 -18px; + top: unset; + right: unset; + left: 50%; + bottom: -62px; + } + &.bottom-left { + margin: 0; + top: unset; + right: unset; + left: -6px; + bottom: -62px; + } + &.bottom-right { + margin: 0; + top: unset; + right: -6px; + left: unset; + bottom: -62px; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-curtain/types.ts b/src/uni_modules/wot-design-uni/components/wd-curtain/types.ts new file mode 100644 index 0000000..ce12a8d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-curtain/types.ts @@ -0,0 +1,82 @@ +/* + * @Author: weisheng + * @Date: 2025-01-25 23:46:29 + * @LastEditTime: 2025-09-09 10:00:00 + * @LastEditors: rusheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-curtain/types.ts + * 记得注释 + */ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type ClosePosition = 'inset' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' + +export const curtainProps = { + ...baseProps, + /** + * 绑定值,展示/关闭幕帘 + * @deprecated 请使用 modelValue + */ + value: makeBooleanProp(false), + /** + * 绑定值,展示/关闭幕帘 + */ + modelValue: makeBooleanProp(false), + /** + * 关闭按钮位置,可选值:inset / top / bottom / top-left / top-right / bottom-left / bottom-right + */ + closePosition: makeStringProp('inset'), + /** + * 幕帘图片地址,必须使用网络地址 + */ + src: String, + /** + * 幕帘图片点击链接 + */ + to: String, + /** + * 幕帘图片宽度 + */ + width: Number, + /** + * 点击遮罩是否关闭 + */ + closeOnClickModal: makeBooleanProp(false), + /** + * 是否当关闭时将弹出层隐藏(display: none) + */ + hideWhenClose: makeBooleanProp(true), + /** + * 设置层级 + * 类型:number + * 默认值:10 + */ + zIndex: makeNumberProp(10), + /** + * 自定义关闭按钮的类名 + * 类型:string + * 默认值:'' + */ + customCloseClass: makeStringProp(''), + /** + * 自定义关闭按钮的样式 + * 类型:string + * 默认值:'' + */ + customCloseStyle: makeStringProp(''), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 开启长按图片显示识别小程序码菜单,仅在微信小程序平台有效 + */ + showMenuByLongpress: makeBooleanProp(false), + /** + * 点击图片是否关闭幕帘,默认为 true + */ + closeOnClick: makeBooleanProp(true) +} + +export type CurtainProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-curtain/wd-curtain.vue b/src/uni_modules/wot-design-uni/components/wd-curtain/wd-curtain.vue new file mode 100644 index 0000000..f646420 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-curtain/wd-curtain.vue @@ -0,0 +1,172 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/types.ts b/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/types.ts new file mode 100644 index 0000000..8b95e3d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/types.ts @@ -0,0 +1,120 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' + +export type DateTimeType = 'date' | 'year-month' | 'time' | 'datetime' | 'year' + +export const datetimePickerViewProps = { + ...baseProps, + /** + * 选中项,当 type 为 time 时,类型为字符串,否则为 时间戳 + */ + modelValue: makeRequiredProp([String, Number]), + /** + * 加载中 + */ + loading: makeBooleanProp(false), + /** + * 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 + */ + loadingColor: makeStringProp('#4D80F0'), + /** + * picker内部滚筒高 + */ + columnsHeight: makeNumberProp(217), + /** + * picker item的高度 + */ + itemHeight: makeNumberProp(35), + /** + * 选项的key + */ + valueKey: makeStringProp('value'), + /** + * 选项的label + */ + labelKey: makeStringProp('label'), + /** + * 选择器类型,可选值:date / year-month / time + */ + type: makeStringProp('datetime'), + /** + * 自定义过滤选项的函数,返回列的选项数组 + */ + filter: Function as PropType, + /** + * 自定义弹出层选项文案的格式化函数,返回一个字符串 + */ + formatter: Function as PropType, + /** + * 自定义列的格式化函数 + */ + columnFormatter: Function as PropType, + /** + * 最小日期 + */ + minDate: makeNumberProp(new Date(new Date().getFullYear() - 10, 0, 1).getTime()), + /** + * 最大日期 + */ + maxDate: makeNumberProp(new Date(new Date().getFullYear() + 10, 11, 31).getTime()), + /** + * 最小小时,time类型时生效 + */ + minHour: makeNumberProp(0), + /** + * 最大小时,time类型时生效 + */ + maxHour: makeNumberProp(23), + /** + * 最小分钟,time类型时生效 + */ + minMinute: makeNumberProp(0), + /** + * 最大分钟,time类型时生效 + */ + maxMinute: makeNumberProp(59), + /** + * 是否显示秒选择,仅在 time 和 datetime 类型下生效 + */ + useSecond: makeBooleanProp(false), + /** + * 最小秒数,仅在 time 和 datetime 类型下生效 + */ + minSecond: makeNumberProp(0), + /** + * 最大秒数,仅在 time 和 datetime 类型下生效 + */ + maxSecond: makeNumberProp(59), + /** + * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false) +} + +export type DatetimePickerViewColumnType = 'year' | 'month' | 'date' | 'hour' | 'minute' | 'second' + +export type DatetimePickerViewOption = { + label: string + value: number +} + +export type DatetimePickerViewFilter = (type: DatetimePickerViewColumnType, values: number[]) => number[] + +export type DatetimePickerViewFormatter = (type: string, value: string) => string + +export type DatetimePickerViewColumnFormatter = (picker: DatetimePickerViewExpose) => DatetimePickerViewOption[][] + +export type DatetimePickerViewProps = ExtractPropTypes + +export type DatetimePickerViewExpose = { + updateColumns: () => DatetimePickerViewOption[][] + setColumns: (columnList: DatetimePickerViewOption[][]) => void + getSelects: () => Record | Record[] | undefined + correctValue: (value: string | number) => string | number + getOriginColumns: () => { + type: DatetimePickerViewColumnType + values: number[] + }[] +} + +export type DatetimePickerViewInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/util.ts b/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/util.ts new file mode 100644 index 0000000..47e8449 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/util.ts @@ -0,0 +1,30 @@ +import { type DateTimeType } from './types' + +/** + * @description 根据传入的值和类型,获取当前的选项数组,便于传入 pickerView + * @param value + * @param type picker类型 + * @param useSecond 是否使用秒,仅在 time 和 datetime 类型下生效 + */ +export function getPickerValue(value: string | number, type: DateTimeType, useSecond: boolean = false) { + const values: number[] = [] + const date = new Date(value) + if (type === 'time') { + const pair = String(value).split(':') + values.push(parseInt(pair[0]), parseInt(pair[1])) + if (useSecond && pair[2]) { + values.push(parseInt(pair[2])) + } + } else { + values.push(date.getFullYear(), date.getMonth() + 1) + if (type === 'date') { + values.push(date.getDate()) + } else if (type === 'datetime') { + values.push(date.getDate(), date.getHours(), date.getMinutes()) + if (useSecond) { + values.push(date.getSeconds()) + } + } + } + return values +} diff --git a/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/wd-datetime-picker-view.vue b/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/wd-datetime-picker-view.vue new file mode 100644 index 0000000..2d764e6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-datetime-picker-view/wd-datetime-picker-view.vue @@ -0,0 +1,499 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-datetime-picker/index.scss b/src/uni_modules/wot-design-uni/components/wd-datetime-picker/index.scss new file mode 100644 index 0000000..b92953e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-datetime-picker/index.scss @@ -0,0 +1,164 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(datetime-picker) { + + @include e(placeholder) { + color: $-dark-color-gray; + } + + :deep(.wd-datetime-picker__arrow), + :deep(.wd-datetime-picker__clear) { + color: $-dark-color; + } + + @include e(action) { + @include m(cancel) { + color: $-dark-color; + } + } + + @include e(region) { + color: $-dark-color; + + @include when(active) { + background: $-picker-region-bg-active-color; + color: $-dark-color; + } + } + } +} + + +@include b(datetime-picker) { + @include edeep(cell) { + @include when(disabled) { + .wd-cell__value { + color: $-input-disabled-color; + cursor: not-allowed; + } + } + @include when(error) { + .wd-cell__value { + color: $-input-error-color; + } + .wd-datetime-picker__arrow { + color: $-input-error-color; + } + } + @include when(large) { + .wd-datetime-picker__arrow { + font-size: $-cell-icon-size-large; + } + } + + .wd-cell__value--ellipsis { + view { + @include lineEllipsis; + width: 100%; + } + + text { + @include lineEllipsis; + max-width: 100%; + } + } + } + + @include e(placeholder) { + color: $-input-placeholder-color; + } + + @include edeep(arrow) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-arrow-color; + line-height: $-cell-line-height; + } + + @include edeep(clear) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-clear-color; + line-height: $-cell-line-height; + } + + @include edeep(popup) { + border-radius: 16px 16px 0px 0px; + } + + @include e(wraper) { + padding-bottom: var(--window-bottom); + } + + @include e(toolbar) { + position: relative; + display: flex; + font-size: $-picker-toolbar-fs; + height: $-picker-toolbar-height; + line-height: $-picker-action-height; + justify-content: space-between; + align-items: center; + box-sizing: border-box; + } + + @include e(action) { + display: block; + border: none; + outline: none; + font-size: $-picker-toolbar-fs; + color: $-picker-toolbar-finish-color; + background: transparent; + padding: 24px 15px 14px 15px; + + @include m(cancel) { + color: $-picker-toolbar-cancel-color; + } + + @include when(loading) { + color: $-picker-loading-button-color; + } + } + @include e(title) { + display: block; + float: 1; + color: $-picker-toolbar-title-color; + } + + @include e(region-tabs) { + display: flex; + } + + @include e(region) { + width: 50%; + display: inline-block; + color: $-picker-region-color; + text-align: center; + padding: 14px 0; + font-size: $-picker-region-fs; + line-height: 16px; + transition: all 0.15s ease-out; + + @include when(active) { + background: $-picker-region-bg-active-color; + color: $-color-white; + } + } + + @include e(region-time) { + font-size: 16px; + margin-top: 2px; + } + + @include e(hidden) { + visibility: hidden; + overflow: hidden; + height: 0; + } + + @include e(show) { + visibility: visible; + height: auto; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-datetime-picker/types.ts b/src/uni_modules/wot-design-uni/components/wd-datetime-picker/types.ts new file mode 100644 index 0000000..3056a2f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-datetime-picker/types.ts @@ -0,0 +1,231 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' +import type { DateTimeType, DatetimePickerViewFilter, DatetimePickerViewFormatter } from '../wd-datetime-picker-view/types' +import type { FormItemRule } from '../wd-form/types' + +export const datetimePickerProps = { + ...baseProps, + /** + * 选择器左侧文案,label可以不传 + */ + label: String, + /** + * 选择器占位符 + */ + placeholder: String, + /** + * 禁用 + */ + disabled: makeBooleanProp(false), + /** + * 只读 + */ + readonly: makeBooleanProp(false), + /** + * 加载中 + */ + loading: makeBooleanProp(false), + /** + * 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 + */ + loadingColor: makeStringProp('#4D80F0'), + /** + * 弹出层标题 + */ + title: String, + /** + * 取消按钮文案 + */ + cancelButtonText: String, + /** + * 确认按钮文案 + */ + confirmButtonText: String, + /** + * 是否必填 + */ + required: makeBooleanProp(false), + /** + * 设置选择器大小,可选值:large + */ + size: String, + /** + * 设置左侧标题宽度 + */ + labelWidth: makeStringProp('33%'), + /** + * 是否为错误状态,错误状态时右侧内容为红色 + */ + error: makeBooleanProp(false), + /** + * 选择器的值靠右展示 + */ + alignRight: makeBooleanProp(false), + /** + * 点击遮罩是否关闭 + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 弹出面板是否设置底部安全距离(iphone X 类型的机型) + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 是否超出隐藏 + */ + ellipsis: makeBooleanProp(false), + /** + * picker内部滚筒高 + */ + columnsHeight: makeNumberProp(217), + /** + * 选项的key + */ + valueKey: makeStringProp('value'), + /** + * 选项的label + */ + labelKey: makeStringProp('label'), + /** + * 选中项,当 type 为 time 时,类型为字符串;当 type 为 Array 时,类型为范围选择;否则为 时间戳 + */ + modelValue: makeRequiredProp([String, Number, Array] as PropType>), + /** + * 选择器类型,可选值为:date / year-month / time + */ + type: makeStringProp('datetime'), + /** + * 最小日期 + */ + minDate: makeNumberProp(new Date(new Date().getFullYear() - 10, 0, 1).getTime()), + /** + * 最大日期 + */ + maxDate: makeNumberProp(new Date(new Date().getFullYear() + 10, 11, 31, 23, 59, 59).getTime()), + /** + * 最小小时,time类型时生效 + */ + minHour: makeNumberProp(0), + /** + * 最大小时,time类型时生效 + */ + maxHour: makeNumberProp(23), + /** + * 最小分钟,time类型时生效 + */ + minMinute: makeNumberProp(0), + /** + * 最大分钟,time类型时生效 + */ + maxMinute: makeNumberProp(59), + /** + * 是否启用秒选择,仅在 time 和 datetime 类型下生效 + */ + useSecond: makeBooleanProp(false), + /** + * 最小秒数,仅在 time 和 datetime 类型下生效 + */ + minSecond: makeNumberProp(0), + /** + * 最大秒数,仅在 time 和 datetime 类型下生效 + */ + maxSecond: makeNumberProp(59), + /** + * 自定义过滤选项的函数,返回列的选项数组 + */ + filter: Function as PropType, + /** + * 自定义弹出层选项文案的格式化函数,返回一个字符串 + */ + formatter: Function as PropType, + /** + * 自定义展示文案的格式化函数,返回一个字符串 + */ + displayFormat: Function as PropType, + /** + * 确定前校验函数,接收 (value, resolve, picker) 参数,通过 resolve 继续执行 picker,resolve 接收1个boolean参数 + */ + beforeConfirm: Function as PropType, + /** + * 在区域选择模式下,自定义展示tab标签文案的格式化函数,返回一个字符串 + */ + displayFormatTabLabel: Function as PropType, + /** + * 默认日期,类型保持与 value 一致,打开面板时面板自动选到默认日期 + */ + defaultValue: [String, Number, Array] as PropType>, + /** + * 弹窗层级 + */ + zIndex: makeNumberProp(15), + /** + * 表单域 model 字段名,在使用表单校验功能的情况下,该属性是必填的 + */ + prop: String, + /** + * 表单验证规则,结合wd-form组件使用 + */ + rules: makeArrayProp(), + /** + * picker cell 外部自定义样式 + */ + customCellClass: makeStringProp(''), + /** + * pickerView 外部自定义样式 + */ + customViewClass: makeStringProp(''), + /** + * label 外部自定义样式 + */ + customLabelClass: makeStringProp(''), + /** + * value 外部自定义样式 + */ + customValueClass: makeStringProp(''), + /** + * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 显示清空按钮 + */ + clearable: makeBooleanProp(false), + /** + * 必填标记位置,可选值:before、after + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} + +export type DatetimePickerDisplayFormat = (items: Record[]) => string + +export type DatetimePickerBeforeConfirm = ( + value: number | string | (number | string)[], + resolve: (isPass: boolean) => void, + picker: DatetimePickerInstance +) => void + +export type DatetimePickerDisplayFormatTabLabel = (items: Record[]) => string + +export type DatetimePickerExpose = { + /** + * 打开picker弹框 + */ + open: () => void + /** + * 关闭picker弹框 + */ + close: () => void + /** + * 设置加载状态 + * @param loading 加载状态 + * @returns + */ + setLoading: (loading: boolean) => void +} + +export type DatetimePickerProps = ExtractPropTypes + +export type DatetimePickerInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-datetime-picker/wd-datetime-picker.vue b/src/uni_modules/wot-design-uni/components/wd-datetime-picker/wd-datetime-picker.vue new file mode 100644 index 0000000..17f3397 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-datetime-picker/wd-datetime-picker.vue @@ -0,0 +1,801 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-divider/index.scss b/src/uni_modules/wot-design-uni/components/wd-divider/index.scss new file mode 100644 index 0000000..c67d106 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-divider/index.scss @@ -0,0 +1,100 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(divider) { + color: $-dark-color3; + + @include e(line) { + background: $-dark-color-gray; + } + } +} + +@include b(divider) { + position: relative; + display: flex; + padding: $-divider-padding; + margin: $-divider-margin; + align-items: center; + color: $-divider-color; + font-size: $-divider-fs; + + &::after, + &::before { + flex: 1; + display: block; + box-sizing: border-box; + border-style: solid; + border-color: $-divider-line-color; + border-width: $-divider-line-height 0 0; + } + + &::before { + content: ''; + } + + @include m(center, left, right) { + &::after { + content: ''; + margin-left: $-divider-content-left-margin; + } + + &::before { + margin-right: $-divider-content-right-margin; + } + } + + @include m(left) { + &::before { + max-width: $-divider-content-left-width; + } + } + + @include m(right) { + &::after { + max-width: $-divider-content-right-width; + } + } + + @include when(hairline) { + + &::before, + &::after { + transform: scaleY(0.5); + } + } + + @include when(dashed) { + + &::before, + &::after { + border-style: dashed; + } + } + + @include m(vertical) { + display: inline-block; + width: $-divider-vertical-line-width; + height: $-divider-vertical-height; + margin: $-divider-vertical-content-margin; + padding: 0; + vertical-align: middle; + + &::before { + height: 100%; + border-width: 0 0 0 $-divider-vertical-line-width; + } + + &::after { + display: none; + } + + @include when(hairline) { + &::before { + transform: scaleX(0.5); + } + } + } + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-divider/types.ts b/src/uni_modules/wot-design-uni/components/wd-divider/types.ts new file mode 100644 index 0000000..12d6726 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-divider/types.ts @@ -0,0 +1,35 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp } from '../common/props' + +export type DividerPosition = 'center' | 'left' | 'right' +export type DividerDirection = 'horizontal' | 'vertical' + +export const dividerProps = { + ...baseProps, + /** + * 自定义颜色 + */ + color: String, + /** + * 内容位置,可选值为 `left` `right` `center` + * 默认值:`center` + */ + contentPosition: makeStringProp('center'), + /** + * 是否显示为虚线 + * 默认值:`false` + */ + dashed: Boolean, + /** + * 是否为垂直分割线 + * 默认值:`false` + */ + vertical: makeBooleanProp(false), + /** + * 是否显示为 0.5px 的线 + * 默认值:`true` + */ + hairline: makeBooleanProp(true) +} + +export type DividerProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-divider/wd-divider.vue b/src/uni_modules/wot-design-uni/components/wd-divider/wd-divider.vue new file mode 100644 index 0000000..25eb681 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-divider/wd-divider.vue @@ -0,0 +1,52 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/index.scss new file mode 100644 index 0000000..8265f54 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/index.scss @@ -0,0 +1,66 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(drop-item) { + color: $-dark-color; + + @include e(tip) { + color: $-dark-color3; + } + } +} + +@include b(drop-item) { + position: fixed; + right: 0; + left: 0; + overflow: hidden; + font-size: $-drop-menu-item-fs; + color: $-drop-menu-item-color; + width: 100%; + z-index: 101; + + @include e(popup){ + position: absolute; + max-height: 80%; + } + + @include e(option) { + display: flex; + height: $-drop-menu-item-height; + line-height: $-drop-menu-item-height; + padding: 0 $-drop-menu-side-padding; + justify-content: space-between; + align-items: center; + transition: color .2s; + + @include when(active) { + color: $-drop-menu-item-color-active; + } + } + + @include e(title){ + display: block; + } + + @include e(tip) { + display: inline-block; + color: $-drop-menu-item-color-tip; + font-size: $-drop-menu-item-fs-tip; + margin-left: 2px; + } + + @include edeep(icon){ + display: block; + font-size: $-drop-menu-option-check-size; + } + + @include e(modal) { + position: fixed; + left: 0; + right: 0; + background: rgba(0, 0, 0, 0.7); + height: 100%; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/types.ts new file mode 100644 index 0000000..336730a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/types.ts @@ -0,0 +1,94 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumericProp, makeStringProp, numericProp } from '../common/props' + +export type DropMenuItemBeforeToggleOption = { + // 操作状态:true 打开下拉菜单,false 关闭下拉菜单 + status: boolean + // 回调函数,用于控制是否允许打开或关闭下拉菜单,true 允许打开或关闭,false 不允许打开或关闭 + resolve: (isPass: boolean) => void +} + +export type DropMenuItemBeforeToggle = (option: DropMenuItemBeforeToggleOption) => void + +export const dorpMenuItemProps = { + ...baseProps, + /** + * DropMenuItem 左侧文字样式 + */ + customTitle: makeStringProp(''), + /** + * DropMenuItem 右侧 icon 样式 + */ + customIcon: makeStringProp(''), + /** + * 当前选中项对应选中的 value + */ + modelValue: [String, Number], + /** + * 列表数据,对应数据结构 [{label: '标题', value: '0', tip: '提示文字'}] + */ + options: makeArrayProp>(), + /** + * 禁用菜单 + */ + disabled: makeBooleanProp(false), + /** + * 选中的图标名称(可选名称在 wd-icon 组件中) + */ + iconName: makeStringProp('check'), + /** + * 菜单标题 + */ + title: String, + /** + * 菜单图标 + */ + icon: makeStringProp('arrow-down'), + /** + * 菜单图标大小 + */ + iconSize: numericProp, + /** + * 自定义点击事件 + */ + beforeToggle: Function as PropType, + /** + * 选项对象中,value 对应的 key + */ + valueKey: makeStringProp('value'), + /** + * 选项对象中,展示的文本对应的 key + */ + labelKey: makeStringProp('label'), + /** + * 选项对象中,选项说明对应的 key + */ + tipKey: makeStringProp('tip'), + /** + * 自定义下拉菜单popup样式类 + */ + customPopupClass: makeStringProp(''), + /** + * 自定义下拉菜单popup样式 + */ + customPopupStyle: makeStringProp(''), + /** + * 弹出层高度 这里设置了 就取这里的 + */ + popupHeight: makeStringProp(''), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false) +} + +export type DropMenuItemProps = ExtractPropTypes + +export type DropMenuItemExpose = { + getShowPop: () => boolean + open: () => void + close: () => void + toggle: () => void +} + +export type DropMenuItemInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/wd-drop-menu-item.vue b/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/wd-drop-menu-item.vue new file mode 100644 index 0000000..b69c777 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-drop-menu-item/wd-drop-menu-item.vue @@ -0,0 +1,221 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-drop-menu/index.scss b/src/uni_modules/wot-design-uni/components/wd-drop-menu/index.scss new file mode 100644 index 0000000..94b66dd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-drop-menu/index.scss @@ -0,0 +1,86 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(drop-menu) { + color: $-dark-color; + @include e(list) { + background-color: $-dark-background2; + } + + @include e(item) { + @include when(disabled) { + color: $-dark-color-gray; + } + } + } +} + +@include b(drop-menu) { + box-sizing: border-box; + color: $-drop-menu-color; + font-size: $-drop-menu-fs; + position: relative; + + @include e(list) { + display: flex; + text-align: center; + background-color: #fff; + } + @include e(item) { + flex: 1; + min-width: 0; + height: $-drop-menu-height; + line-height: $-drop-menu-height; + text-align: center; + + @include when(active) { + font-weight: $-fw-medium; + + .wd-drop-menu__item-title::after { + opacity: 1; + } + :deep(.wd-drop-menu__arrow) { + transform: rotate(-180deg); + transform-origin: center center; + } + } + @include when(disabled) { + color: $-drop-menu-disabled-color; + } + } + + @include e(item-title) { + position: relative; + display: inline-flex; + align-items: center; + justify-content: center; + max-width: 100%; + padding: 0 $-drop-menu-side-padding; + box-sizing: border-box; + + &::after { + position: absolute; + content: ''; + width: 19px; + height: $-drop-menu-line-height; + bottom: 6px; + left: 50%; + transform: translate(-50%, 0); + background: $-drop-menu-line-color; + border-radius: $-drop-menu-line-height; + transition: opacity .15s; + opacity: 0; + } + } + + @include e(item-title-text) { + position: relative; + @include lineEllipsis; + } + + @include edeep(arrow) { + font-size: $-drop-menu-arrow-fs; + margin-left: 2px; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-drop-menu/types.ts b/src/uni_modules/wot-design-uni/components/wd-drop-menu/types.ts new file mode 100644 index 0000000..dc9e892 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-drop-menu/types.ts @@ -0,0 +1,38 @@ +import { type ExtractPropTypes, type InjectionKey, type Ref } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type DropDirection = 'up' | 'down' + +export type DropMenuProvide = { + props: Partial + fold: (child?: any) => void + offset: Ref +} + +export const DROP_MENU_KEY: InjectionKey = Symbol('wd-drop-menu') + +export const dropMenuProps = { + ...baseProps, + /** + * 弹框层级 + */ + zIndex: makeNumberProp(12), + /** + * 菜单展开方向,可选值为up 或 down + */ + direction: makeStringProp('down'), + /** + * 是否展示蒙层 + */ + modal: makeBooleanProp(true), + /** + * 是否点击蒙层时关闭 + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 菜单展开收起动画时间,单位 ms + */ + duration: makeNumberProp(200) +} + +export type DropMenuProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-drop-menu/wd-drop-menu.vue b/src/uni_modules/wot-design-uni/components/wd-drop-menu/wd-drop-menu.vue new file mode 100644 index 0000000..92b9412 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-drop-menu/wd-drop-menu.vue @@ -0,0 +1,166 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-fab/index.scss b/src/uni_modules/wot-design-uni/components/wd-fab/index.scss new file mode 100644 index 0000000..16addbf --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-fab/index.scss @@ -0,0 +1,116 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(fab) {} +} + +@include b(fab) { + position: fixed; + z-index: 99; + + @include edeep(trigger) { + min-width: auto !important; + box-sizing: border-box; + width: $-fab-trigger-width !important; + height: $-fab-trigger-height !important; + border-radius: calc($-fab-trigger-height / 2) !important; + } + + :deep() { + @include e(actions) { + position: absolute; + z-index: 0; + display: flex; + justify-content: center; + align-items: center; + padding: $-fab-actions-padding 0; + + @include m(left, right) { + height: 100%; + top: 0; + padding: 0 $-fab-actions-padding; + } + + @include m(left) { + flex-direction: row-reverse; + right: 100%; + } + + @include m(right) { + flex-direction: row; + left: 100%; + } + + @include m(top, bottom) { + width: 100%; + left: 0; + } + + @include m(top) { + flex-direction: column-reverse; + bottom: 100%; + } + + @include m(bottom) { + flex-direction: column; + top: 100%; + } + } + + // 动画 + @include e(transition-enter-active, transition-leave-active) { + transition: 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important; + } + + + @include e(transition-enter) { + @include m(top) { + opacity: 0; + transform: translateY(40px); + } + + @include m(bottom) { + opacity: 0; + transform: translateY(-40px); + } + + @include m(left) { + opacity: 0; + transform: translateX(40px); + } + + @include m(right) { + opacity: 0; + transform: translateX(-40px); + } + } + + @include e(transition-leave-to) { + @include m(top) { + opacity: 0; + transform: translateY(40px); + } + + @include m(bottom) { + opacity: 0; + transform: translateY(-40px); + } + + @include m(left) { + opacity: 0; + transform: translateX(40px); + } + + @include m(right) { + opacity: 0; + transform: translateX(-40px); + } + } + + } + + @include edeep(icon) { + font-size: $-fab-icon-fs; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-fab/types.ts b/src/uni_modules/wot-design-uni/components/wd-fab/types.ts new file mode 100644 index 0000000..269b127 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-fab/types.ts @@ -0,0 +1,66 @@ +import type { ComponentPublicInstance, ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' +import type { PropType } from 'vue' + +export type FabType = 'primary' | 'success' | 'info' | 'warning' | 'error' | 'default' +export type FabPosition = 'left-top' | 'right-top' | 'left-bottom' | 'right-bottom' | 'left-center' | 'right-center' | 'top-center' | 'bottom-center' +export type FabDirection = 'top' | 'right' | 'bottom' | 'left' +export type FabGap = Partial> +export const fabProps = { + ...baseProps, + /** + * 是否激活 + */ + active: makeBooleanProp(false), + /** + * 类型,可选值为 default primary info success warning error + */ + type: makeStringProp('primary'), + /** + * 悬浮按钮位置,可选值为 left-top right-top left-bottom right-bottom left-center right-center top-center bottom-center + */ + position: makeStringProp('right-bottom'), + /** + * 悬浮按钮菜单弹出方向,可选值为 top bottom left right + */ + direction: makeStringProp('top'), + /** + * 是否禁用 + */ + disabled: makeBooleanProp(false), + /** + * 悬浮按钮未展开时的图标 + */ + inactiveIcon: makeStringProp('add'), + /** + * 悬浮按钮展开时的图标 + */ + activeIcon: makeStringProp('close'), + /** + * 自定义悬浮按钮层级 + */ + zIndex: makeNumberProp(99), + /** + * 是否可拖动 + */ + draggable: makeBooleanProp(false), + gap: { + type: Object as PropType, + default: () => ({}) + }, + /** + * 用于控制点击时是否展开菜单 + */ + expandable: makeBooleanProp(true) +} + +export type FabProps = ExtractPropTypes + +export type FabExpose = { + // 展开菜单 + open: () => void + // 收起菜单 + close: () => void +} + +export type FabInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-fab/wd-fab.vue b/src/uni_modules/wot-design-uni/components/wd-fab/wd-fab.vue new file mode 100644 index 0000000..aff2605 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-fab/wd-fab.vue @@ -0,0 +1,276 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-floating-panel/index.scss b/src/uni_modules/wot-design-uni/components/wd-floating-panel/index.scss new file mode 100644 index 0000000..8fdaaa6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-floating-panel/index.scss @@ -0,0 +1,64 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(floating-panel) { + background: $-dark-background2; + + @include e(content) { + background: $-dark-background2; + } + } +} + +@include b(floating-panel) { + position: fixed; + bottom: 0; + left: 0; + z-index: $-floating-panel-z-index; + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 100vw; + border-top-left-radius: $-floating-panel-radius; + border-top-right-radius: $-floating-panel-radius; + background-color: $-floating-panel-bg; + touch-action: none; + will-change: transform; + @include when(safe) { + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + } + + &::after { + position: absolute; + bottom: -100vh; + display: block; + width: 100vw; + height: 100vh; + content: ''; + background-color: inherit; + } + + @include e(header) { + display: flex; + justify-content: center; + align-items: center; + height: $-floating-panel-header-height; + cursor: grab; + user-select: none; + &-bar { + width: $-floating-panel-bar-width; + height: $-floating-panel-bar-height; + background-color: $-floating-panel-bar-bg; + border-radius: $-floating-panel-bar-radius; + } + } + + @include e(content) { + flex: 1; + min-width: 0; + min-height: 0; + background-color: $-floating-panel-content-bg; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-floating-panel/type.ts b/src/uni_modules/wot-design-uni/components/wd-floating-panel/type.ts new file mode 100644 index 0000000..af0bc9d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-floating-panel/type.ts @@ -0,0 +1,32 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeNumericProp, truthProp } from '../common/props' + +export const floatingPanelProps = { + ...baseProps, + /** + * 面板的显示高度 + */ + height: makeNumberProp(0), + /** + * 设置自定义锚点,默认值 [100, windowHeight * 0.6] + */ + anchors: makeArrayProp(), + /** + * 弹出面板是否设置底部安全距离(iphone X 类型的机型) + */ + safeAreaInsetBottom: makeBooleanProp(false), + /** + * 是否显示滚动条,默认值为 true + */ + showScrollbar: truthProp, + /** + * 动画时长,单位毫秒,默认值为 300ms + */ + duration: makeNumericProp(300), + /** + * 是否允许内容区容器拖拽,默认值为 true + */ + contentDraggable: truthProp +} + +export type FloatingPanelProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-floating-panel/wd-floating-panel.vue b/src/uni_modules/wot-design-uni/components/wd-floating-panel/wd-floating-panel.vue new file mode 100644 index 0000000..0f92ec4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-floating-panel/wd-floating-panel.vue @@ -0,0 +1,140 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-form-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-form-item/index.scss new file mode 100644 index 0000000..9bf9400 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-form-item/index.scss @@ -0,0 +1,18 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(form-item) { + } +} + + +@include b(form-item) { + @include e(error-message){ + color: $-form-item-error-message-color; + font-size: $-form-item-error-message-font-size; + line-height: $-form-item-error-message-line-height; + text-align: left; + vertical-align: middle; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-form-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-form-item/types.ts new file mode 100644 index 0000000..ed1a4e2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-form-item/types.ts @@ -0,0 +1,16 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeRequiredProp, makeStringProp } from '../common/props' +import type { FormItemRule } from '../wd-form/types' + +export const formItemProps = { + ...baseProps, + prop: makeRequiredProp(String), + rules: makeArrayProp(), + required: Boolean, + center: makeBooleanProp(false), + label: String, + labelWidth: makeStringProp('100px'), + isLink: Boolean +} + +export type FormItemProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-form-item/wd-form-item.vue b/src/uni_modules/wot-design-uni/components/wd-form-item/wd-form-item.vue new file mode 100644 index 0000000..c3a36d3 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-form-item/wd-form-item.vue @@ -0,0 +1,65 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-form/types.ts b/src/uni_modules/wot-design-uni/components/wd-form/types.ts new file mode 100644 index 0000000..87c1044 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-form/types.ts @@ -0,0 +1,85 @@ +/* + * @Author: weisheng + * @Date: 2023-12-14 11:21:58 + * @LastEditTime: 2025-01-11 13:31:20 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-form/types.ts + * 记得注释 + */ +import { type ComponentPublicInstance, type ExtractPropTypes, type InjectionKey, type PropType } from 'vue' +import { baseProps, makeBooleanProp, makeRequiredProp } from '../common/props' + +export type FormProvide = { + props: { + model: Record + rules?: FormRules + border?: boolean + } + errorMessages?: Record +} + +export const FORM_KEY: InjectionKey = Symbol('wd-form') + +export type FormRules = { + [key: string]: FormItemRule[] +} + +export type ErrorMessage = { + prop: string + message: string +} + +export interface FormItemRule { + [key: string]: any + required: boolean + message: string + pattern?: RegExp + validator?: (value: any, rule: FormItemRuleWithoutValidator) => boolean | Promise | Promise | Promise | Promise +} + +export type FormItemRuleWithoutValidator = Omit + +export const formProps = { + ...baseProps, + /** + * 表单数据对象 + */ + model: makeRequiredProp(Object as PropType>), + /** + * 表单验证规则 + */ + rules: { + type: Object as PropType, + default: () => ({}) + }, + /** + * 是否在输入时重置表单校验信息 + */ + resetOnChange: makeBooleanProp(true), + /** + * 错误提示类型 + */ + errorType: { + type: String as PropType<'toast' | 'message' | 'none'>, + default: 'message' + } +} +export type FormProps = ExtractPropTypes + +export type FormExpose = { + /** + * 表单校验 + * @param prop 指定校验字段 + */ + validate: (prop?: string | Array) => Promise<{ + valid: boolean + errors: ErrorMessage[] + }> + /** + * 重置表单项的验证提示 + */ + reset: () => void +} + +export type FormInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-form/wd-form.vue b/src/uni_modules/wot-design-uni/components/wd-form/wd-form.vue new file mode 100644 index 0000000..b940099 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-form/wd-form.vue @@ -0,0 +1,207 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-gap/index.scss b/src/uni_modules/wot-design-uni/components/wd-gap/index.scss new file mode 100644 index 0000000..3a44d47 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-gap/index.scss @@ -0,0 +1,9 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +@include b(gap) { + @include m(safe) { + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-gap/types.ts b/src/uni_modules/wot-design-uni/components/wd-gap/types.ts new file mode 100644 index 0000000..c53522e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-gap/types.ts @@ -0,0 +1,17 @@ +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' + +export const gapProps = { + ...baseProps, + /** + * 背景颜色 + */ + bgColor: makeStringProp('transparent'), + /** + * 是否开启底部安全区 + */ + safeAreaBottom: makeBooleanProp(false), + /** + * 高度 + */ + height: makeNumericProp(15) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-gap/wd-gap.vue b/src/uni_modules/wot-design-uni/components/wd-gap/wd-gap.vue new file mode 100644 index 0000000..da5c4dd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-gap/wd-gap.vue @@ -0,0 +1,36 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-grid-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-grid-item/index.scss new file mode 100644 index 0000000..8418409 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-grid-item/index.scss @@ -0,0 +1,148 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(grid-item) { + + @include when(border) { + &::before { + background-color: $-dark-border-color; + } + &::after { + background-color: $-dark-border-color; + } + } + + // 第一行元素 + @include when(first) { + &::after { + background-color: $-dark-border-color; + } + } + + + @include e(content) { + background-color: $-dark-background2; + + @include m(hover) { + background-color: $-grid-item-hover-bg-dark !important; + } + } + } +} + +@include b(grid-item) { + height: 100%; + font-size: $-grid-item-fs; + box-sizing: border-box; + + position: relative; + float: left; + + display: flex; + flex-direction: column; + justify-content: center; + text-align: center; + overflow: hidden; + + @include when(border) { + &::before { + content: ""; + position: absolute; + width: 100%; + height: 1px; + transform: scaleY(0.5); + background-color: $-grid-item-border-color; + top: 0; + left: 0; + z-index: 1; + } + &::after { + content: ""; + position: absolute; + width: 1px; + transform: scaleX(0.5); + height: 100%; + background-color: $-grid-item-border-color; + bottom: 0; + right: 0; + } + } + + // 第一行元素 + @include when(first) { + &::after { + content: ""; + position: absolute; + width: 1px; + transform: scaleX(0.5); + height: 100%; + background-color: $-grid-item-border-color; + bottom: 0; + right: 0; + } + } + + // 每行右侧的元素 + @include when(right) { + &::after { + display: none; + } + } + + @include when(last) { + &::after { + display: none; + } + } + @include e(wrapper) { + display: inline-block; + margin: 0 auto; + } + + @include e(content) { + height: 100%; + padding: $-grid-item-padding; + background-color: $-grid-item-bg; + position: relative; + display: flex; + flex-direction: column; + justify-content: center; + + @include when(square) { + box-sizing: border-box; + position: absolute; + top: 0; + right: 0; + left: 0; + padding: 0; + height: 100%; + } + + @include when(round) { + &::after { + content: " "; + position: absolute; + top: 0; + left: 0; + width: 200%; + height: 200%; + border: 1px solid $-grid-item-border-color; + transform-origin: top left; + transform: scale(0.5); + box-sizing: border-box; + } + } + + @include m(hover) { + background-color: $-grid-item-hover-bg !important; + } + } + + @include e(text) { + margin-top: 8px; + font-size: $-grid-item-fs; + line-height: $-grid-item-fs; + @include lineEllipsis; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-grid-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-grid-item/types.ts new file mode 100644 index 0000000..91f732d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-grid-item/types.ts @@ -0,0 +1,77 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp, numericProp } from '../common/props' +import type { BadgeProps, BadgeType } from '../wd-badge/types' + +export type LinkType = 'navigateTo' | 'switchTab' | 'reLaunch' | 'redirectTo' + +export const gridItemProps = { + ...baseProps, + /** + * GridItem 下方文字样式 + */ + customText: makeStringProp(''), + /** + * GridItem 上方 icon 样式 + */ + customIcon: makeStringProp(''), + /** + * 图标名称,可选值见 wd-icon 组件 + */ + icon: makeStringProp(''), + /** + * 图标大小 + */ + iconSize: makeStringProp('26px'), + /** + * 文字 + */ + text: String, + /** + * 点击后跳转的链接地址 + */ + url: String, + /** + * 页面跳转方式, 参考微信小程序路由文档,可选值:navigateTo / switchTab / reLaunch + */ + linkType: makeStringProp('navigateTo'), + /** + * 是否开启 GridItem 内容插槽 + * @deprecated 已废弃,直接使用默认插槽即可 + */ + useSlot: makeBooleanProp(false), + /** + * 是否开启 GridItem icon 插槽 + * @deprecated 已废弃,组件会自动根据 icon 插槽是否存在来显示 + */ + useIconSlot: makeBooleanProp(false), + /** + * 是否开启 GridItem text 内容插槽 + * @deprecated 已废弃,组件会自动根据 text 插槽是否存在来显示 + */ + useTextSlot: makeBooleanProp(false), + /** + * 是否显示图标右上角小红点 + */ + isDot: { + type: Boolean, + default: undefined + }, + /** + * 图标右上角显示的 badge 类型,可选值:primary / success / warning / danger / info + */ + type: String as PropType, + /** + * 图标右上角 badge 显示值 + */ + value: numericProp, + /** + * 图标右上角 badge 最大值,超过最大值会显示 '{max}+',要求 value 是 Number 类型 + */ + max: Number, + /** + * 徽标属性,透传给 Badge 组件 + */ + badgeProps: Object as PropType> +} + +export type GridItemProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-grid-item/wd-grid-item.vue b/src/uni_modules/wot-design-uni/components/wd-grid-item/wd-grid-item.vue new file mode 100644 index 0000000..a37ad9c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-grid-item/wd-grid-item.vue @@ -0,0 +1,176 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-grid/index.scss b/src/uni_modules/wot-design-uni/components/wd-grid/index.scss new file mode 100644 index 0000000..6996022 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-grid/index.scss @@ -0,0 +1,9 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(grid) { + position: relative; + box-sizing: border-box; + overflow: hidden; + height: auto; +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-grid/types.ts b/src/uni_modules/wot-design-uni/components/wd-grid/types.ts new file mode 100644 index 0000000..f0908c2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-grid/types.ts @@ -0,0 +1,59 @@ +/* + * @Author: weisheng + * @Date: 2023-12-14 11:21:58 + * @LastEditTime: 2024-03-18 14:38:35 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-grid\types.ts + * 记得注释 + */ +import { type ExtractPropTypes, type InjectionKey } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp } from '../common/props' + +export type GridProvide = { + props: { + clickable?: boolean + square?: boolean + column?: number + border?: boolean + bgColor?: string + gutter?: number + hoverClass?: string + } +} + +export const GRID_KEY: InjectionKey = Symbol('wd-grid') + +export const gridProps = { + ...baseProps, + /** + * 是否开启格子点击反馈 + */ + clickable: makeBooleanProp(false), + /** + * 是否将格子固定为正方形 + */ + square: makeBooleanProp(false), + /** + * 列数 + */ + column: Number, + /** + * 是否显示边框 + */ + border: makeBooleanProp(false), + /** + * 背景颜色 + */ + bgColor: makeStringProp(''), + /** + * 格子之间的间距,默认单位为px + */ + gutter: Number, + /** + * 自定义内容区域hover-class + */ + hoverClass: String +} + +export type GridProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-grid/wd-grid.vue b/src/uni_modules/wot-design-uni/components/wd-grid/wd-grid.vue new file mode 100644 index 0000000..a4e11f7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-grid/wd-grid.vue @@ -0,0 +1,106 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-icon/index.scss b/src/uni_modules/wot-design-uni/components/wd-icon/index.scss new file mode 100644 index 0000000..1c8715c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-icon/index.scss @@ -0,0 +1,1230 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@font-face { + font-family: 'wd-icons'; + src: url('https://at.alicdn.com/t/c/font_4245058_s5cpwl25n7o.woff2?t=1696817709651') format('woff2'), + url('https://at.alicdn.com/t/c/font_4245058_s5cpwl25n7o.woff?t=1696817709651') format('woff'), + url('https://at.alicdn.com/t/c/font_4245058_s5cpwl25n7o.ttf?t=1696817709651') format('truetype'); + font-weight: normal; + font-style: normal; +} + +/* #ifdef APP-PLUS || H5 */ +@font-face { + font-family: 'wd-icons'; + src: + url('./wd-icons.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +/* #endif */ + +@include b(icon) { + display: inline-block; + font-family: 'wd-icons' !important; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + /* Better Font Rendering =========== */ + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + + &::before { + display: inline-block; + } + + @include m(image) { + width: 1em; + height: 1em; + } + + @include e(image) { + width: 100%; + height: 100%; + } +} + + + +.wd-icon-usergroup-clear:before { + content: "\e739"; +} + +.wd-icon-user-circle:before { + content: "\e73a"; +} + +.wd-icon-user-talk:before { + content: "\e73b"; +} + +.wd-icon-user-clear:before { + content: "\e73c"; +} + +.wd-icon-user:before { + content: "\e73d"; +} + +.wd-icon-usergroup-add:before { + content: "\e73e"; +} + +.wd-icon-usergroup:before { + content: "\e73f"; +} + +.wd-icon-user-add:before { + content: "\e740"; +} + +.wd-icon-user-avatar:before { + content: "\e741"; +} + +.wd-icon-pointing-hand:before { + content: "\e742"; +} + +.wd-icon-cursor:before { + content: "\e743"; +} + +.wd-icon-fullsreen:before { + content: "\e72c"; +} + +.wd-icon-cloud-download:before { + content: "\e72d"; +} + +.wd-icon-chevron-down-rectangle:before { + content: "\e72e"; +} + +.wd-icon-edit:before { + content: "\e72f"; +} + +.wd-icon-fullscreen-exit:before { + content: "\e730"; +} + +.wd-icon-circle1:before { + content: "\e731"; +} + +.wd-icon-close-normal:before { + content: "\e732"; +} + +.wd-icon-browse:before { + content: "\e733"; +} + +.wd-icon-browse-off:before { + content: "\e734"; +} + +.wd-icon-chevron-up-rectangle:before { + content: "\e735"; +} + +.wd-icon-add-rectangle:before { + content: "\e736"; +} + +.wd-icon-add1:before { + content: "\e737"; +} + +.wd-icon-add-circle1:before { + content: "\e738"; +} + +.wd-icon-download1:before { + content: "\e71c"; +} + +.wd-icon-link:before { + content: "\e71d"; +} + +.wd-icon-edit-1:before { + content: "\e71e"; +} + +.wd-icon-jump:before { + content: "\e71f"; +} + +.wd-icon-chevron-down-circle:before { + content: "\e720"; +} + +.wd-icon-delete1:before { + content: "\e721"; +} + +.wd-icon-filter-clear:before { + content: "\e722"; +} + +.wd-icon-check-rectangle-filled:before { + content: "\e723"; +} + +.wd-icon-minus-circle-filled:before { + content: "\e724"; +} + +.wd-icon-play:before { + content: "\e725"; +} + +.wd-icon-pause-circle-filled:before { + content: "\e726"; +} + +.wd-icon-filter1:before { + content: "\e727"; +} + +.wd-icon-move:before { + content: "\e728"; +} + +.wd-icon-login:before { + content: "\e729"; +} + +.wd-icon-minus-circle:before { + content: "\e72a"; +} + +.wd-icon-close-circle:before { + content: "\e72b"; +} + +.wd-icon-logout:before { + content: "\e70b"; +} + +.wd-icon-search1:before { + content: "\e70c"; +} + +.wd-icon-pause-circle:before { + content: "\e70d"; +} + +.wd-icon-play-circle:before { + content: "\e70e"; +} + +.wd-icon-more1:before { + content: "\e70f"; +} + +.wd-icon-minus-rectangle:before { + content: "\e710"; +} + +.wd-icon-stop:before { + content: "\e711"; +} + +.wd-icon-scan1:before { + content: "\e712"; +} + +.wd-icon-close-rectangle:before { + content: "\e713"; +} + +.wd-icon-rollback:before { + content: "\e714"; +} + +.wd-icon-a-order-adjustmentcolumn:before { + content: "\e715"; +} + +.wd-icon-pause:before { + content: "\e716"; +} + +.wd-icon-ellipsis:before { + content: "\e717"; +} + +.wd-icon-cloud-upload:before { + content: "\e718"; +} + +.wd-icon-stop-circle-filled:before { + content: "\e719"; +} + +.wd-icon-clear:before { + content: "\e71a"; +} + +.wd-icon-remove:before { + content: "\e71b"; +} + +.wd-icon-zoom-out:before { + content: "\e6fb"; +} + +.wd-icon-thumb-down:before { + content: "\e6fc"; +} + +.wd-icon-setting1:before { + content: "\e6fd"; +} + +.wd-icon-save:before { + content: "\e6fe"; +} + +.wd-icon-unfold-more:before { + content: "\e6ff"; +} + +.wd-icon-zoom-in:before { + content: "\e700"; +} + +.wd-icon-thumb-up:before { + content: "\e701"; +} + +.wd-icon-unfold-less:before { + content: "\e702"; +} + +.wd-icon-play-circle-filled:before { + content: "\e703"; +} + +.wd-icon-poweroff:before { + content: "\e704"; +} + +.wd-icon-share:before { + content: "\e705"; +} + +.wd-icon-refresh1:before { + content: "\e706"; +} + +.wd-icon-link-unlink:before { + content: "\e707"; +} + +.wd-icon-upload:before { + content: "\e708"; +} + +.wd-icon-rectangle:before { + content: "\e709"; +} + +.wd-icon-stop-circle:before { + content: "\e70a"; +} + +.wd-icon-backtop-rectangle:before { + content: "\e6ea"; +} + +.wd-icon-caret-down:before { + content: "\e6eb"; +} + +.wd-icon-arrow-left1:before { + content: "\e6ec"; +} + +.wd-icon-help-circle:before { + content: "\e6ed"; +} + +.wd-icon-help-circle-filled:before { + content: "\e6ee"; +} + +.wd-icon-time-filled:before { + content: "\e6ef"; +} + +.wd-icon-close-circle-filled:before { + content: "\e6f0"; +} + +.wd-icon-info-circle:before { + content: "\e6f1"; +} + +.wd-icon-info-circle-filled:before { + content: "\e6f2"; +} + +.wd-icon-check1:before { + content: "\e6f3"; +} + +.wd-icon-help:before { + content: "\e6f4"; +} + +.wd-icon-error:before { + content: "\e6f5"; +} + +.wd-icon-check-circle:before { + content: "\e6f6"; +} + +.wd-icon-error-circle-filled:before { + content: "\e6f7"; +} + +.wd-icon-error-circle:before { + content: "\e6f8"; +} + +.wd-icon-check-rectangle:before { + content: "\e6f9"; +} + +.wd-icon-check-circle-filled:before { + content: "\e6fa"; +} + +.wd-icon-chevron-up:before { + content: "\e6da"; +} + +.wd-icon-chevron-up-circle:before { + content: "\e6db"; +} + +.wd-icon-chevron-right:before { + content: "\e6dc"; +} + +.wd-icon-arrow-down-rectangle:before { + content: "\e6dd"; +} + +.wd-icon-caret-up-small:before { + content: "\e6de"; +} + +.wd-icon-chevron-right-rectangle:before { + content: "\e6df"; +} + +.wd-icon-caret-right-small:before { + content: "\e6e0"; +} + +.wd-icon-arrow-right1:before { + content: "\e6e1"; +} + +.wd-icon-backtop:before { + content: "\e6e2"; +} + +.wd-icon-arrow-up1:before { + content: "\e6e3"; +} + +.wd-icon-caret-up:before { + content: "\e6e4"; +} + +.wd-icon-backward:before { + content: "\e6e5"; +} + +.wd-icon-arrow-down1:before { + content: "\e6e6"; +} + +.wd-icon-chevron-left:before { + content: "\e6e7"; +} + +.wd-icon-caret-right:before { + content: "\e6e8"; +} + +.wd-icon-caret-left:before { + content: "\e6e9"; +} + +.wd-icon-page-last:before { + content: "\e6c9"; +} + +.wd-icon-next:before { + content: "\e6ca"; +} + +.wd-icon-swap:before { + content: "\e6cb"; +} + +.wd-icon-round:before { + content: "\e6cc"; +} + +.wd-icon-previous:before { + content: "\e6cd"; +} + +.wd-icon-enter:before { + content: "\e6ce"; +} + +.wd-icon-chevron-down:before { + content: "\e6cf"; +} + +.wd-icon-caret-down-small:before { + content: "\e6d0"; +} + +.wd-icon-swap-right:before { + content: "\e6d1"; +} + +.wd-icon-chevron-left-circle:before { + content: "\e6d2"; +} + +.wd-icon-caret-left-small:before { + content: "\e6d3"; +} + +.wd-icon-chevron-right-circle:before { + content: "\e6d4"; +} + +.wd-icon-a-chevron-leftdouble:before { + content: "\e6d5"; +} + +.wd-icon-chevron-left-rectangle:before { + content: "\e6d6"; +} + +.wd-icon-a-chevron-rightdouble:before { + content: "\e6d7"; +} + +.wd-icon-page-first:before { + content: "\e6d8"; +} + +.wd-icon-forward:before { + content: "\e6d9"; +} + +.wd-icon-view-column:before { + content: "\e6b9"; +} + +.wd-icon-view-module:before { + content: "\e6ba"; +} + +.wd-icon-format-vertical-align-right:before { + content: "\e6bb"; +} + +.wd-icon-view-list:before { + content: "\e6bc"; +} + +.wd-icon-order-descending:before { + content: "\e6bd"; +} + +.wd-icon-format-horizontal-align-bottom:before { + content: "\e6be"; +} + +.wd-icon-queue:before { + content: "\e6bf"; +} + +.wd-icon-menu-fold:before { + content: "\e6c0"; +} + +.wd-icon-menu-unfold:before { + content: "\e6c1"; +} + +.wd-icon-format-horizontal-align-top:before { + content: "\e6c2"; +} + +.wd-icon-a-rootlist:before { + content: "\e6c3"; +} + +.wd-icon-order-ascending:before { + content: "\e6c4"; +} + +.wd-icon-format-vertical-align-left:before { + content: "\e6c5"; +} + +.wd-icon-format-horizontal-align-center:before { + content: "\e6c6"; +} + +.wd-icon-format-vertical-align-center:before { + content: "\e6c7"; +} + +.wd-icon-swap-left:before { + content: "\e6c8"; +} + +.wd-icon-flag:before { + content: "\e6aa"; +} + +.wd-icon-code:before { + content: "\e6ab"; +} + +.wd-icon-cart:before { + content: "\e6ac"; +} + +.wd-icon-attach:before { + content: "\e6ad"; +} + +.wd-icon-chart:before { + content: "\e6ae"; +} + +.wd-icon-creditcard:before { + content: "\e6af"; +} + +.wd-icon-calendar:before { + content: "\e6b0"; +} + +.wd-icon-app:before { + content: "\e6b1"; +} + +.wd-icon-books:before { + content: "\e6b2"; +} + +.wd-icon-barcode:before { + content: "\e6b3"; +} + +.wd-icon-chart-pie:before { + content: "\e6b4"; +} + +.wd-icon-chart-bar:before { + content: "\e6b5"; +} + +.wd-icon-chart-bubble:before { + content: "\e6b6"; +} + +.wd-icon-bulletpoint:before { + content: "\e6b7"; +} + +.wd-icon-bianjiliebiao:before { + content: "\e6b8"; +} + +.wd-icon-image:before { + content: "\e69a"; +} + +.wd-icon-laptop:before { + content: "\e69b"; +} + +.wd-icon-hourglass:before { + content: "\e69c"; +} + +.wd-icon-call:before { + content: "\e69d"; +} + +.wd-icon-mobile-vibrate:before { + content: "\e69e"; +} + +.wd-icon-mail:before { + content: "\e69f"; +} + +.wd-icon-notification-filled:before { + content: "\e6a0"; +} + +.wd-icon-desktop:before { + content: "\e6a1"; +} + +.wd-icon-history:before { + content: "\e6a2"; +} + +.wd-icon-discount-filled:before { + content: "\e6a3"; +} + +.wd-icon-dashboard:before { + content: "\e6a4"; +} + +.wd-icon-discount:before { + content: "\e6a5"; +} + +.wd-icon-heart-filled:before { + content: "\e6a6"; +} + +.wd-icon-chat1:before { + content: "\e6a7"; +} + +.wd-icon-a-controlplatform:before { + content: "\e6a8"; +} + +.wd-icon-gift:before { + content: "\e6a9"; +} + +.wd-icon-photo:before { + content: "\e692"; +} + +.wd-icon-play-circle-stroke:before { + content: "\e693"; +} + +.wd-icon-notification:before { + content: "\e694"; +} + +.wd-icon-cloud:before { + content: "\e695"; +} + +.wd-icon-gender-female:before { + content: "\e696"; +} + +.wd-icon-fork:before { + content: "\e697"; +} + +.wd-icon-layers:before { + content: "\e698"; +} + +.wd-icon-lock-off:before { + content: "\e699"; +} + +.wd-icon-location:before { + content: "\e68a"; +} + +.wd-icon-mobile:before { + content: "\e68b"; +} + +.wd-icon-qrcode:before { + content: "\e68c"; +} + +.wd-icon-home1:before { + content: "\e68d"; +} + +.wd-icon-time:before { + content: "\e68e"; +} + +.wd-icon-heart:before { + content: "\e68f"; +} + +.wd-icon-lock-on:before { + content: "\e690"; +} + +.wd-icon-print:before { + content: "\e691"; +} + +.wd-icon-slash:before { + content: "\e67a"; +} + +.wd-icon-usb:before { + content: "\e67b"; +} + +.wd-icon-tools:before { + content: "\e67c"; +} + +.wd-icon-wifi:before { + content: "\e67d"; +} + +.wd-icon-star-filled:before { + content: "\e67e"; +} + +.wd-icon-server:before { + content: "\e67f"; +} + +.wd-icon-sound:before { + content: "\e680"; +} + +.wd-icon-a-precisemonitor:before { + content: "\e681"; +} + +.wd-icon-service:before { + content: "\e682"; +} + +.wd-icon-tips:before { + content: "\e683"; +} + +.wd-icon-pin:before { + content: "\e684"; +} + +.wd-icon-secured:before { + content: "\e685"; +} + +.wd-icon-star:before { + content: "\e686"; +} + +.wd-icon-gender-male:before { + content: "\e687"; +} + +.wd-icon-shop:before { + content: "\e688"; +} + +.wd-icon-money-circle:before { + content: "\e689"; +} + +.wd-icon-file-word:before { + content: "\e66a"; +} + +.wd-icon-file-unknown:before { + content: "\e66b"; +} + +.wd-icon-folder-open:before { + content: "\e66c"; +} + +.wd-icon-file-pdf:before { + content: "\e66d"; +} + +.wd-icon-folder:before { + content: "\e66e"; +} + +.wd-icon-folder-add:before { + content: "\e66f"; +} + +.wd-icon-file:before { + content: "\e670"; +} + +.wd-icon-file-image:before { + content: "\e671"; +} + +.wd-icon-file-powerpoint:before { + content: "\e672"; +} + +.wd-icon-file-add:before { + content: "\e673"; +} + +.wd-icon-file-icon:before { + content: "\e674"; +} + +.wd-icon-file-paste:before { + content: "\e675"; +} + +.wd-icon-file-excel:before { + content: "\e676"; +} + +.wd-icon-file-copy:before { + content: "\e677"; +} + +.wd-icon-video1:before { + content: "\e678"; +} + +.wd-icon-wallet:before { + content: "\e679"; +} + +.wd-icon-ie:before { + content: "\e65d"; +} + +.wd-icon-logo-codepen:before { + content: "\e65e"; +} + +.wd-icon-github-filled:before { + content: "\e65f"; +} + +.wd-icon-ie-filled:before { + content: "\e660"; +} + +.wd-icon-apple:before { + content: "\e661"; +} + +.wd-icon-windows-filled:before { + content: "\e662"; +} + +.wd-icon-internet:before { + content: "\e663"; +} + +.wd-icon-github:before { + content: "\e664"; +} + +.wd-icon-windows:before { + content: "\e665"; +} + +.wd-icon-apple-filled:before { + content: "\e666"; +} + +.wd-icon-chrome-filled:before { + content: "\e667"; +} + +.wd-icon-chrome:before { + content: "\e668"; +} + +.wd-icon-android:before { + content: "\e669"; +} + +.wd-icon-edit-outline:before { + content: "\e64a"; +} + +.wd-icon-detection:before { + content: "\e64b"; +} + +.wd-icon-check-outline:before { + content: "\e64c"; +} + +.wd-icon-close:before { + content: "\e64d"; +} + +.wd-icon-check:before { + content: "\e64e"; +} + +.wd-icon-arrow-left:before { + content: "\e64f"; +} + +.wd-icon-computer:before { + content: "\e650"; +} + +.wd-icon-clock:before { + content: "\e651"; +} + +.wd-icon-check-bold:before { + content: "\e652"; +} + +.wd-icon-bags:before { + content: "\e653"; +} + +.wd-icon-arrow-down:before { + content: "\e654"; +} + +.wd-icon-arrow-right:before { + content: "\e655"; +} + +.wd-icon-circle:before { + content: "\e656"; +} + +.wd-icon-arrow-thin-down:before { + content: "\e657"; +} + +.wd-icon-camera:before { + content: "\e658"; +} + +.wd-icon-close-bold:before { + content: "\e659"; +} + +.wd-icon-add-circle:before { + content: "\e65a"; +} + +.wd-icon-arrow-thin-up:before { + content: "\e65b"; +} + +.wd-icon-add:before { + content: "\e65c"; +} + +.wd-icon-keyboard-delete:before { + content: "\e634"; +} + +.wd-icon-transfer:before { + content: "\e635"; +} + +.wd-icon-eye-close:before { + content: "\e61f"; +} + +.wd-icon-delete:before { + content: "\e61e"; +} + +.wd-icon-download:before { + content: "\e636"; +} + +.wd-icon-picture:before { + content: "\e637"; +} + +.wd-icon-refresh:before { + content: "\e638"; +} + +.wd-icon-read:before { + content: "\e639"; +} + +.wd-icon-note:before { + content: "\e63a"; +} + +.wd-icon-phone:before { + content: "\e63b"; +} + +.wd-icon-lenovo:before { + content: "\e63c"; +} + +.wd-icon-home:before { + content: "\e63d"; +} + +.wd-icon-search:before { + content: "\e63e"; +} + +.wd-icon-fill-camera:before { + content: "\e63f"; +} + +.wd-icon-fill-arrow-down:before { + content: "\e640"; +} + +.wd-icon-arrow-up:before { + content: "\e61d"; +} + +.wd-icon-delete-thin:before { + content: "\e641"; +} + +.wd-icon-filter:before { + content: "\e642"; +} + +.wd-icon-evaluation:before { + content: "\e643"; +} + +.wd-icon-close-outline:before { + content: "\e644"; +} + +.wd-icon-dong:before { + content: "\e645"; +} + +.wd-icon-error-fill:before { + content: "\e646"; +} + +.wd-icon-chat:before { + content: "\e647"; +} + +.wd-icon-decrease:before { + content: "\e648"; +} + +.wd-icon-copy:before { + content: "\e649"; +} + +.wd-icon-setting:before { + content: "\e621"; +} + +.wd-icon-subscribe:before { + content: "\e622"; +} + +.wd-icon-jdm:before { + content: "\e620"; +} + +.wd-icon-spool:before { + content: "\e623"; +} + +.wd-icon-warning:before { + content: "\e624"; +} + +.wd-icon-wifi-error:before { + content: "\e625"; +} + +.wd-icon-star-on:before { + content: "\e626"; +} + +.wd-icon-rotate:before { + content: "\e627"; +} + +.wd-icon-translate-bold:before { + content: "\e628"; +} + +.wd-icon-keyboard-collapse:before { + content: "\e629"; +} + +.wd-icon-keywords:before { + content: "\e62a"; +} + +.wd-icon-scan:before { + content: "\e62b"; +} + +.wd-icon-view:before { + content: "\e62c"; +} + +.wd-icon-phone-compute:before { + content: "\e62d"; +} + +.wd-icon-video:before { + content: "\e62e"; +} + +.wd-icon-thin-arrow-left:before { + content: "\e62f"; +} + +.wd-icon-goods:before { + content: "\e630"; +} + +.wd-icon-list:before { + content: "\e631"; +} + +.wd-icon-warn-bold:before { + content: "\e632"; +} + +.wd-icon-more:before { + content: "\e633"; +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-icon/types.ts b/src/uni_modules/wot-design-uni/components/wd-icon/types.ts new file mode 100644 index 0000000..7416705 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-icon/types.ts @@ -0,0 +1,21 @@ +import { baseProps, makeRequiredProp, makeStringProp, numericProp } from '../common/props' + +export const iconProps = { + ...baseProps, + /** + * 使用的图标名字,可以使用链接图片 + */ + name: makeRequiredProp(String), + /** + * 图标的颜色 + */ + color: String, + /** + * 图标的字体大小 + */ + size: numericProp, + /** + * 类名前缀,用于使用自定义图标 + */ + classPrefix: makeStringProp('wd-icon') +} diff --git a/src/uni_modules/wot-design-uni/components/wd-icon/wd-icon.vue b/src/uni_modules/wot-design-uni/components/wd-icon/wd-icon.vue new file mode 100644 index 0000000..3cdae30 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-icon/wd-icon.vue @@ -0,0 +1,53 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-icon/wd-icons.ttf b/src/uni_modules/wot-design-uni/components/wd-icon/wd-icons.ttf new file mode 100644 index 0000000..7abffe1 Binary files /dev/null and b/src/uni_modules/wot-design-uni/components/wd-icon/wd-icons.ttf differ diff --git a/src/uni_modules/wot-design-uni/components/wd-img-cropper/index.scss b/src/uni_modules/wot-design-uni/components/wd-img-cropper/index.scss new file mode 100644 index 0000000..7f55853 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-img-cropper/index.scss @@ -0,0 +1,231 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +@include b(img-cropper) { + background: rgba(0, 0, 0, 1); + position: fixed; + top: 0; + left: 0; + width: 100vw; + height: 100vh; + z-index: 1; + + // 裁剪框包裹器 + @include e(wrapper) { + position: relative; + background: rgba(0, 0, 0, 0.45); + } + + @include e(cut) { + z-index: 9; + position: absolute; + width: 100vw; + height: 100vh; + display: flex; + flex-direction: column; + pointer-events: none; + + .wd-img-cropper__cut--top, + .wd-img-cropper__cut--bottom, + .wd-img-cropper__cut--left, + .wd-img-cropper__cut--right { + // 拖动中背景蒙层为0 拖动结束为0.85 + background-color: rgba(0, 0, 0, 0.85); + transition: background 0.2s; + + @include when(hightlight) { + background-color: rgba(0, 0, 0, 0); + } + } + + .wd-img-cropper__cut--bottom, + .wd-img-cropper__cut--right { + flex: auto; + } + + @include m(middle) { + display: flex; + } + + @include m(body) { + // 若需要变化窗体大小,支持控制窗体的大小来控制下方所有对应的展示 + background-color: transparent; + position: relative; + + // 节选框的窗体最外部边缘线 + &::before { + content: ""; + border: 1px solid #fff; + width: calc(200% - 1px); + height: calc(200% - 1px); + position: absolute; + transform: scale(0.5) translate(-1px, -1px); + top: -50%; + left: -50%; + } + + // 结算框对角尺寸 + $border-size: 2px; + + // 节选框的四个角 + .is-left-top, + .is-left-bottom, + .is-right-top, + .is-right-bottom { + &::before { + content: ""; + position: absolute; + width: $border-size; + height: 20px; + background-color: #fff; + } + + &::after { + content: ""; + position: absolute; + width: 20px; + height: $border-size; + background-color: #fff; + } + } + + .is-left-top { + + &::before, + &::after { + left: -$border-size; + top: -$border-size; + } + } + + .is-left-bottom { + + &::before, + &::after { + left: -$border-size; + bottom: -$border-size; + } + } + + .is-right-top { + + &::before, + &::after { + right: -$border-size; + top: -$border-size; + } + } + + .is-right-bottom { + + &::before, + &::after { + right: -$border-size; + bottom: -$border-size; + } + } + + // 内部网格线 + .is-gridlines-x, + .is-gridlines-y { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + display: flex; + } + + .is-gridlines-x { + justify-content: center; + + &::before { + content: ""; + display: inline-block; + width: 66.66%; + height: 200%; + border: 1px solid #fff; + border-top: none; + border-bottom: none; + transform: scale(0.5) translate(0, -50%); + } + } + + // 内部网格线 - y轴 + .is-gridlines-y { + align-items: center; + + &::after { + content: ""; + flex-shrink: 0; + display: inline-block; + width: 200%; + height: 66.66%; + border: 1px solid #fff; + border-left: none; + border-right: none; + transform: scale(0.5) translate(-50%, 0); + } + } + } + } + + @include e(img) { + z-index: 2; + top: 0; + left: 0; + position: absolute; + border: none; + width: 100%; + backface-visibility: hidden; + transform-origin: center; + } + + @include e(canvas) { + position: fixed; + background: white; + width: 150px; + height: 150px; + z-index: 10; + top: -200%; + pointer-events: none; + } + + @include e(footer) { + position: fixed; + z-index: 10; + bottom: 10px; + width: 100%; + height: 15vh; + text-align: center; + + @include m(button) { + position: relative; + text-align: left; + margin: 0 20px; + padding-top: 4vh; + // line-height: 32px; + box-sizing: border-box; + + .is-cancel { + display: inline-block; + color: #fff; + font-size: 16px; + } + + .is-confirm { + position: absolute; + right: 0; + // height: 32px; + width: 56px; + border-radius: 16px; + font-size: 16px; + } + } + } + + @include edeep(rotate) { + font-size: $-img-cropper-icon-size; + color: $-img-cropper-icon-color; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-img-cropper/types.ts b/src/uni_modules/wot-design-uni/components/wd-img-cropper/types.ts new file mode 100644 index 0000000..a8682c1 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-img-cropper/types.ts @@ -0,0 +1,85 @@ +/* + * @Author: weisheng + * @Date: 2024-06-03 23:43:43 + * @LastEditTime: 2025-03-25 17:28:13 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-img-cropper/types.ts + * 记得注释 + */ +import type { ComponentPublicInstance, ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' + +export const imgCropperProps = { + ...baseProps, + /** + * 打开图片裁剪组件 + */ + modelValue: makeBooleanProp(false), + /** + * 取消按钮文案 + */ + cancelButtonText: String, + /** + * 确认按钮文案 + */ + confirmButtonText: String, + /** + * 是否禁用旋转 + */ + disabledRotate: makeBooleanProp(false), + /** canvas绘图参数 start **/ + /** + * 目标文件的类型,wx.canvasToTempFilePath属性介绍 + */ + fileType: makeStringProp('png'), + /** + * 生成的图片质量 wx.canvasToTempFilePath属性介绍 + */ + quality: makeNumberProp(1), + /** + * 设置导出图片尺寸 + */ + exportScale: makeNumberProp(2), + /** canvas绘图参数 end **/ + /** + * 图片源路径 + */ + imgSrc: makeStringProp(''), + /** + * 图片宽 + */ + imgWidth: makeNumericProp(''), + /** + * 图片高 + */ + imgHeight: makeNumericProp(''), + /** + * 最大缩放 + */ + maxScale: makeNumberProp(3), + /** + * 裁剪框宽高比,格式为 width:height + */ + aspectRatio: makeStringProp('1:1') +} + +export type ImgCropperProps = ExtractPropTypes + +export type ImgCropperExpose = { + /** + * 逆转是否使用动画 + */ + revertIsAnimation: (animation: boolean) => void + /** + * 初始化图片的大小和角度以及距离 + */ + resetImg: () => void + /** + * 控制旋转角度 + * @param angle 角度 + */ + setRoate: (angle: number) => void +} + +export type ImgCropperInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-img-cropper/wd-img-cropper.vue b/src/uni_modules/wot-design-uni/components/wd-img-cropper/wd-img-cropper.vue new file mode 100644 index 0000000..a130be2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-img-cropper/wd-img-cropper.vue @@ -0,0 +1,664 @@ + + + + + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-img/index.scss b/src/uni_modules/wot-design-uni/components/wd-img/index.scss new file mode 100644 index 0000000..9d3eba2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-img/index.scss @@ -0,0 +1,19 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +@include b(img) { + position: relative; + display: inline-block; + + @include e(image) { + display: block; + width: 100%; + height: 100%; + box-sizing: border-box; + } + + @include when(round) { + overflow: hidden; + border-radius: 50%; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-img/types.ts b/src/uni_modules/wot-design-uni/components/wd-img/types.ts new file mode 100644 index 0000000..afa36c2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-img/types.ts @@ -0,0 +1,61 @@ +import { baseProps, makeBooleanProp, makeStringProp, numericProp } from '../common/props' +export type ImageMode = + | 'scaleToFill' + | 'aspectFit' + | 'aspectFill' + | 'widthFix' + | 'heightFix' + | 'top' + | 'bottom' + | 'center' + | 'left' + | 'right' + | 'top left' + | 'top right' + | 'bottom left' + | 'bottom right' + +export const imgProps = { + ...baseProps, + customImage: makeStringProp(''), + /** + * 图片链接 + */ + src: String, + /** + * 预览图片链接 + */ + previewSrc: String, + /** + * 是否显示为圆形 + */ + round: makeBooleanProp(false), + /** + * 填充模式:'top left' / 'top right' / 'bottom left' / 'bottom right' / 'right' / 'left' / 'center' / 'bottom' / 'top' / 'heightFix' / 'widthFix' / 'aspectFill' / 'aspectFit' / 'scaleToFill' + */ + mode: makeStringProp('scaleToFill'), + /** + * 是否懒加载 + */ + lazyLoad: makeBooleanProp(false), + /** + * 宽度,默认单位为px + */ + width: numericProp, + /** + * 高度,默认单位为px + */ + height: numericProp, + /** + * 圆角大小,默认单位为px + */ + radius: numericProp, + /** + * 是否允许预览 + */ + enablePreview: makeBooleanProp(false), + /** + * 开启长按图片显示识别小程序码菜单,仅在微信小程序平台有效 + */ + showMenuByLongpress: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-img/wd-img.vue b/src/uni_modules/wot-design-uni/components/wd-img/wd-img.vue new file mode 100644 index 0000000..dba0587 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-img/wd-img.vue @@ -0,0 +1,89 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-index-anchor/index.scss b/src/uni_modules/wot-design-uni/components/wd-index-anchor/index.scss new file mode 100644 index 0000000..f0a1ac6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-index-anchor/index.scss @@ -0,0 +1,35 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(index-anchor) { + background-color: $-color-gray-8; + color: $-color-white; + } +} + +// #ifdef MP-DINGTALK +@include b(index-anchor-ding) { + + @include when(sticky){ + position: sticky; + top: 0; + left: 0; + z-index: 1; + } +} +// #endif + +@include b(index-anchor) { + background-color: $-color-gray-2; + padding: 10px; + font-size: 14px; + color: $-color-title; + + @include when(sticky){ + position: sticky; + top: 0; + left: 0; + z-index: 1; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-index-anchor/type.ts b/src/uni_modules/wot-design-uni/components/wd-index-anchor/type.ts new file mode 100644 index 0000000..8a683fc --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-index-anchor/type.ts @@ -0,0 +1,9 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeRequiredProp } from '../common/props' + +export const indexAnchorProps = { + ...baseProps, + index: makeRequiredProp([String, Number]) +} + +export type IndexAnchorProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-index-anchor/wd-index-anchor.vue b/src/uni_modules/wot-design-uni/components/wd-index-anchor/wd-index-anchor.vue new file mode 100644 index 0000000..8ea7e1a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-index-anchor/wd-index-anchor.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-index-bar/index.scss b/src/uni_modules/wot-design-uni/components/wd-index-bar/index.scss new file mode 100644 index 0000000..a0cf250 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-index-bar/index.scss @@ -0,0 +1,39 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(index-bar) { + @include e(index) { + color: $-color-white; + } + } +} + +@include b(index-bar) { + position: relative; + width: 100%; + height: 100%; + + @include e(content) { + width: 100%; + height: 100%; + } + + @include e(sidebar) { + position: absolute; + top: 50%; + right: 4px; + transform: translateY(-50%); + } + + @include e(index) { + font-size: 12px; + font-weight: $-fw-medium; + color: $-color-title; + padding: 4px 6px; + + @include when(active) { + color: $-color-theme; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-index-bar/type.ts b/src/uni_modules/wot-design-uni/components/wd-index-bar/type.ts new file mode 100644 index 0000000..9a8c603 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-index-bar/type.ts @@ -0,0 +1,23 @@ +import type { InjectionKey } from 'vue' +import type { ExtractPropTypes } from 'vue' +import { makeBooleanProp } from '../common/props' + +export type AnchorIndex = number | string + +export const indexBarProps = { + /** + * @description 索引是否吸顶 + */ + sticky: makeBooleanProp(false) +} + +export type IndexBarProps = ExtractPropTypes + +export type InderBarProvide = { + props: { sticky?: boolean } + anchorState: { + activeIndex: AnchorIndex | null // 当前激活的索引 + } +} + +export const indexBarInjectionKey: InjectionKey = Symbol('wd-index-bar') diff --git a/src/uni_modules/wot-design-uni/components/wd-index-bar/wd-index-bar.vue b/src/uni_modules/wot-design-uni/components/wd-index-bar/wd-index-bar.vue new file mode 100644 index 0000000..d822559 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-index-bar/wd-index-bar.vue @@ -0,0 +1,156 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-input-number/index.scss b/src/uni_modules/wot-design-uni/components/wd-input-number/index.scss new file mode 100644 index 0000000..32879c2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input-number/index.scss @@ -0,0 +1,132 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(input-number) { + @include e(action) { + color: $-dark-color; + @include when(disabled) { + color: $-dark-color-gray; + } + } + + @include e(input) { + color: $-dark-color; + } + + @include when(disabled) { + .wd-input-number__input { + color: $-dark-color-gray; + } + .wd-input-number__sub, + .wd-input-number__add { + color: $-dark-color-gray; + } + } + } +} + +@include b(input-number) { + display: inline-block; + user-select: none; + line-height: 1.15; + + @include e(action) { + position: relative; + display: inline-block; + width: $-input-number-btn-width; + height: $-input-number-height; + vertical-align: middle; + color: $-input-number-icon-color; + -webkit-tap-highlight-color: transparent; + box-sizing: border-box; + + // 左右加减号的边框 + &::after { + position: absolute; + content: ""; + width: calc(200% - 2px); + height: calc(200% - 2px); + left: 0; + top: 0; + border: 1px solid $-input-number-border-color; + border-top-left-radius: calc($-input-number-radius * 2); + border-bottom-left-radius: calc($-input-number-radius * 2); + transform: scale(0.5); + transform-origin: left top; + } + &:last-child::after { + border-top-left-radius: 0; + border-bottom-left-radius: 0; + border-top-right-radius: calc($-input-number-radius * 2); + border-bottom-right-radius: calc($-input-number-radius * 2); + } + @include when(disabled) { + color: $-input-number-disabled-color; + } + } + + @include e(inner) { + position: relative; + display: inline-block; + vertical-align: middle; + } + + @include e(input) { + position: relative; + display: block; + width: $-input-number-input-width; + height: $-input-number-height; + padding: 0 2px; + box-sizing: border-box; + z-index: 1; + background: transparent; + border: none; + outline: none; + text-align: center; + color: $-input-number-color; + font-size: $-input-number-fs; + -webkit-appearance: none; + -webkit-tap-highlight-color: transparent; + } + + @include e(input-border) { + position: absolute; + width: 100%; + height: calc(200% - 2px); + left: 0; + top: 0; + border-top: 1px solid $-input-number-border-color; + border-bottom: 1px solid $-input-number-border-color; + transform: scaleY(0.5); + transform-origin: left top; + z-index: 0; + } + + @include edeep(action-icon) { + position: absolute; + display: inline-block; + font-size: $-input-number-icon-size; + width: $-input-number-icon-size; + height: $-input-number-icon-size; + left: 50%; + top: 50%; + transform: translate(-50%, -50%); + } + + @include when(disabled) { + .wd-input-number__input { + color: $-input-number-disabled-color; + z-index: inherit; + } + .wd-input-number__sub, + .wd-input-number__add { + color: $-input-number-disabled-color; + } + } + @include when(without-input) { + .wd-input-number__action:last-child::after { + border-left: none; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-input-number/types.ts b/src/uni_modules/wot-design-uni/components/wd-input-number/types.ts new file mode 100644 index 0000000..2931f64 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input-number/types.ts @@ -0,0 +1,110 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 20:40:34 + * @LastEditTime: 2025-06-21 18:23:35 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-input-number/types.ts + * 记得注释 + */ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeRequiredProp, makeStringProp, numericProp } from '../common/props' + +/** + * 输入框值变化前的回调函数类型定义 + * @param value 输入框的新值 + * @returns 返回布尔值或Promise,用于控制是否允许值的变化 + */ +export type InputNumberBeforeChange = (value: number | string) => boolean | Promise + +export type OperationType = 'add' | 'sub' + +export const inputNumberProps = { + ...baseProps, + /** + * 绑定值 + */ + modelValue: makeRequiredProp(numericProp), + /** + * 最小值 + */ + min: makeNumberProp(1), + /** + * 最大值 + */ + max: makeNumberProp(Number.MAX_SAFE_INTEGER), + /** + * 步进值 + */ + step: makeNumberProp(1), + /** + * 是否严格按照步进值递增或递减 + */ + stepStrictly: makeBooleanProp(false), + /** + * 数值精度 + */ + precision: makeNumericProp(0), + /** + * 是否禁用 + */ + disabled: makeBooleanProp(false), + /** + * 是否禁用输入框 + */ + disableInput: makeBooleanProp(false), + /** + * 是否禁用减号按钮 + */ + disableMinus: makeBooleanProp(false), + /** + * 是否禁用加号按钮 + */ + disablePlus: makeBooleanProp(false), + /** + * 是否不显示输入框 + */ + withoutInput: makeBooleanProp(false), + /** + * 输入框宽度 + */ + inputWidth: makeNumericProp(36), + /** + * 是否允许为空 + */ + allowNull: makeBooleanProp(false), + /** + * 输入框占位符 + */ + placeholder: makeStringProp(''), + /** + * 原生属性,键盘弹起时,是否自动上推页面 + */ + adjustPosition: makeBooleanProp(true), + /** + * 输入值变化前的回调函数,返回 `false` 可阻止输入,支持返回 `Promise` + */ + beforeChange: Function as PropType, + /** + * 是否开启长按加减手势 + */ + longPress: makeBooleanProp(false), + /** + * 是否立即响应输入变化,false 时仅在失焦和按钮点击时更新 + */ + immediateChange: makeBooleanProp(true), + /** + * 是否在初始化时更新 v-model 为修正后的值 + * true: 自动修正并更新 v-model + * false: 保持原始值不修正,但仍会进行显示格式化 + */ + updateOnInit: makeBooleanProp(true), + /** + * 输入框类型 + * number: 数字输入 + * digit: 整数输入 + */ + inputType: makeStringProp<'number' | 'digit'>('digit') +} + +export type InputNumberProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-input-number/wd-input-number.vue b/src/uni_modules/wot-design-uni/components/wd-input-number/wd-input-number.vue new file mode 100644 index 0000000..65e3bc7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input-number/wd-input-number.vue @@ -0,0 +1,464 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-input/index.scss b/src/uni_modules/wot-design-uni/components/wd-input/index.scss new file mode 100644 index 0000000..adef5a0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input/index.scss @@ -0,0 +1,323 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(input) { + background: $-dark-background2; + + &::after { + background: $-dark-color-gray; + } + + @include when(not-empty) { + &:not(.is-disabled) { + &::after { + background-color: $-dark-color; + } + } + } + + + @include e(inner) { + color: $-dark-color; + + &::-webkit-input-placeholder { + color: $-dark-color3; + } + } + + @include e(count) { + color: $-dark-color3; + background: transparent; + } + + @include e(count-current) { + color: $-dark-color; + } + + :deep(.wd-input__icon), + :deep(.wd-input__clear) { + color: $-dark-color; + background: transparent; + } + + @include when(cell) { + background-color: $-dark-background2; + line-height: $-cell-line-height; + + @include when(border) { + @include halfPixelBorder("top", $-input-cell-padding, $-dark-border-color); + } + } + + @include when(disabled) { + + .wd-input__inner { + color: $-dark-color-gray; + background: transparent; + } + } + + + @include e(label) { + color: $-dark-color; + } + } +} + +@include b(input) { + position: relative; + -webkit-tap-highlight-color: transparent; + text-align: left; + background: $-input-bg; + + &::after { + position: absolute; + content: ""; + bottom: 0; + left: 0; + right: 0; + height: 1px; + background: $-input-border-color; + transform: scaleY(0.5); + transition: background-color 0.2s ease-in-out; + } + + @include when(not-empty) { + &:not(.is-disabled) { + &::after { + background-color: $-input-not-empty-border-color; + } + } + } + + @include e(label) { + position: relative; + display: flex; + width: $-input-cell-label-width; + color: $-cell-title-color; + margin-right: $-cell-padding; + box-sizing: border-box; + font-size: $-input-fs; + flex-shrink: 0; + } + + @include e(label-inner) { + display: inline-block; + font-size: $-input-fs; + line-height: $-cell-line-height; + } + + + + @include e(required) { + font-size: $-cell-required-size; + color: $-cell-required-color; + margin-left: $-cell-required-margin; + + @include m(left) { + margin-left: 0; + margin-right: $-cell-required-margin; + } + } + + @include e(body) { + flex: 1; + } + + @include e(value) { + position: relative; + display: flex; + flex-direction: row; + align-items: center; + } + + + @include e(prefix) { + margin-right: $-input-icon-margin; + font-size: $-input-fs; + line-height: initial; + + :deep(.wd-input__icon), + :deep(.wd-input__clear) { + margin-left: 0; + } + } + + @include e(suffix) { + flex-shrink: 0; + line-height: initial; + } + + @include e(error-message){ + color: $-form-item-error-message-color; + font-size: $-form-item-error-message-font-size; + line-height: $-form-item-error-message-line-height; + text-align: left; + vertical-align: middle; + } + + @include when(disabled) { + + .wd-input__inner { + color: $-input-disabled-color; + background: transparent; + } + } + + @include when(error) { + + .wd-input__inner { + color: $-input-error-color; + background: transparent; + } + } + + @include when(no-border) { + &::after { + display: none; + } + + .wd-input__inner { + height: $-input-inner-height-no-border; + padding-top: 0; + padding-bottom: 0; + } + } + + @include when(cell) { + display: flex; + align-items: flex-start; + padding: $-input-cell-padding $-input-padding; + background-color: $-input-cell-bg; + + &.is-error::after { + background: $-input-cell-border-color; + } + + :deep(.wd-input__icon), + :deep(.wd-input__clear) { + display: inline-flex; + align-items: center; + height: $-input-cell-height; + line-height: $-input-cell-height; + } + + .wd-input__prefix { + display: inline-block; + margin-right: $-cell-icon-right; + } + + .wd-input__inner { + height: $-input-cell-height; + } + + &.wd-input::after { + display: none; + } + + + @include when(center) { + align-items: center; + } + + @include when(border) { + @include halfPixelBorder("top", $-input-cell-padding); + } + } + + @include when(large) { + padding: $-input-cell-padding-large; + + .wd-input__prefix { + font-size: $-input-fs-large; + } + + .wd-input__label-inner { + font-size: $-input-fs-large; + } + + .wd-input__inner { + font-size: $-input-fs-large; + } + + + .wd-input__count { + font-size: $-input-count-fs-large; + } + + :deep(.wd-input__icon), + :deep(.wd-input__clear) { + font-size: $-input-icon-size-large; + } + + } + + + @include e(inner) { + flex: 1; + height: $-input-inner-height; + font-size: $-input-fs; + color: $-input-color; + outline: none; + border: none; + background: none; + padding: 0; + box-sizing: border-box; + + &::-webkit-input-placeholder { + color: $-input-placeholder-color; + } + + @include when(align-right) { + text-align: right; + } + } + + @include e(readonly-mask) { + position: absolute; + top: 0; + left: 0; + z-index: 2; + width: 100%; + height: 100%; + } + + + @include edeep(icon) { + margin-left: $-input-icon-margin; + font-size: $-input-icon-size; + color: $-input-icon-color; + vertical-align: middle; + background: $-input-bg; + } + + @include edeep(clear) { + margin-left: $-input-icon-margin; + font-size: $-input-icon-size; + color: $-input-clear-color; + vertical-align: middle; + background: $-input-bg; + } + + @include e(count) { + margin-left: 15px; + font-size: $-input-count-fs; + color: $-input-count-color; + vertical-align: middle; + background: $-input-bg; + } + + @include e(count-current) { + color: $-input-count-current-color; + + @include when(error) { + color: $-input-error-color; + } + } + + .wd-input__count, + .wd-input__count-current { + display: inline-flex; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-input/placeholder.scss b/src/uni_modules/wot-design-uni/components/wd-input/placeholder.scss new file mode 100644 index 0000000..53ca272 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input/placeholder.scss @@ -0,0 +1,21 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(input) { + @include e(placeholder) { + color: $-dark-color3; + } + } +} + + +@include b(input) { + @include e(placeholder) { + color: $-input-placeholder-color; + + &.is-error { + color: $-input-error-color; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-input/types.ts b/src/uni_modules/wot-design-uni/components/wd-input/types.ts new file mode 100644 index 0000000..a56dab6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input/types.ts @@ -0,0 +1,189 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' +import type { FormItemRule } from '../wd-form/types' + +export type InputClearTrigger = 'focus' | 'always' + +export type InputType = 'text' | 'number' | 'digit' | 'idcard' | 'safe-password' | 'nickname' | 'tel' + +export type InputConfirmType = 'send' | 'search' | 'next' | 'go' | 'done' + +export type InputSize = 'large' + +export type InputMode = 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url' + +export const inputProps = { + ...baseProps, + customInputClass: makeStringProp(''), + customLabelClass: makeStringProp(''), + // 原生属性 + /** + * 占位文本 + */ + placeholder: String, + /** + * 原生属性,指定 placeholder 的样式,目前仅支持color,font-size和font-weight + */ + placeholderStyle: String, + /** + * 原生属性,指定 placeholder 的样式类 + */ + placeholderClass: makeStringProp(''), + /** + * 原生属性,指定光标与键盘的距离。取 input 距离底部的距离和cursor-spacing指定的距离的最小值作为光标与键盘的距离 + */ + cursorSpacing: makeNumberProp(0), + /** + * 原生属性,指定focus时的光标位置 + */ + cursor: makeNumberProp(-1), + /** + * 原生属性,光标起始位置,自动聚集时有效,需与selection-end搭配使用 + */ + selectionStart: makeNumberProp(-1), + /** + * 原生属性,光标结束位置,自动聚集时有效,需与selection-start搭配使用 + */ + selectionEnd: makeNumberProp(-1), + /** + * 原生属性,键盘弹起时,是否自动上推页面 + */ + adjustPosition: makeBooleanProp(true), + /** + * focus时,点击页面的时候不收起键盘 + */ + holdKeyboard: makeBooleanProp(false), + /** + * 设置键盘右下角按钮的文字,仅在type='text'时生效,可选值:done / go / next / search / send + */ + confirmType: makeStringProp('done'), + /** + * 点击键盘右下角按钮时是否保持键盘不收起 + */ + confirmHold: makeBooleanProp(false), + /** + * 原生属性,获取焦点 + */ + focus: makeBooleanProp(false), + /** + * 类型,可选值:text / number / digit / idcard / safe-password / nickname / tel + */ + type: makeStringProp('text'), + /** + * 原生属性,最大长度 + */ + maxlength: { + type: Number, + // #ifndef MP-ALIPAY + default: -1 + // #endif + }, + /** + * 原生属性,禁用 + */ + disabled: makeBooleanProp(false), + /** + * 微信小程序原生属性,强制 input 处于同层状态,默认 focus 时 input 会切到非同层状态 (仅在 iOS 下生效) + */ + alwaysEmbed: makeBooleanProp(false), + // 原生属性结束 + /** + * 输入框的值靠右展示 + */ + alignRight: makeBooleanProp(false), + /** + * 绑定值 + */ + modelValue: makeNumericProp(''), + /** + * 显示为密码框 + */ + showPassword: makeBooleanProp(false), + /** + * 显示清空按钮 + */ + clearable: makeBooleanProp(false), + /** + * 只读 + */ + readonly: makeBooleanProp(false), + /** + * 前置图标,icon组件中的图标类名 + */ + prefixIcon: String, + /** + * 后置图标,icon组件中的图标类名 + */ + suffixIcon: String, + /** + * 显示字数限制,需要同时设置 maxlength + */ + showWordLimit: makeBooleanProp(false), + /** + * 设置左侧标题 + */ + label: String, + /** + * 设置左侧标题宽度 + */ + labelWidth: makeStringProp(''), + /** + * 设置输入框大小,可选值:large + */ + size: String as PropType, + /** + * 设置输入框错误状态,错误状态时为红色 + */ + error: makeBooleanProp(false), + /** + * 当有label属性时,设置标题和输入框垂直居中,默认为顶部居中 + */ + center: makeBooleanProp(false), + /** + * 非 cell 类型下是否隐藏下划线 + */ + noBorder: makeBooleanProp(false), + /** + * 是否必填 + */ + required: makeBooleanProp(false), + /** + * 表单域 model 字段名,在使用表单校验功能的情况下,该属性是必填的 + */ + prop: String, + /** + * 表单验证规则,结合wd-form组件使用 + */ + rules: makeArrayProp(), + /** + * 显示清除图标的时机,always 表示输入框不为空时展示,focus 表示输入框聚焦且不为空时展示 + * 类型: "focus" | "always" + * 默认值: "always" + */ + clearTrigger: makeStringProp('always'), + /** + * 是否在点击清除按钮时聚焦输入框 + * 类型: boolean + * 默认值: true + */ + focusWhenClear: makeBooleanProp(true), + /** + * 是否忽略组件内对文本合成系统事件的处理。为 false 时将触发 compositionstart、compositionend、compositionupdate 事件,且在文本合成期间会触发 input 事件 + * 类型: boolean + * 默认值: true + */ + ignoreCompositionEvent: makeBooleanProp(true), + /** + * 它提供了用户在编辑元素或其内容时可能输入的数据类型的提示。在符合条件的高版本webview里,uni-app的web和app-vue平台中可使用本属性。 + * 类型: InputMode + * 可选值: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | "password" + * 默认值: "text" + */ + inputmode: makeStringProp('text'), + /** + * 必填标记位置,可选值:before(标签前)、after(标签后) + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} + +export type InputProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-input/wd-input.vue b/src/uni_modules/wot-design-uni/components/wd-input/wd-input.vue new file mode 100644 index 0000000..9240123 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-input/wd-input.vue @@ -0,0 +1,300 @@ + + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/constants.ts b/src/uni_modules/wot-design-uni/components/wd-keyboard/constants.ts new file mode 100644 index 0000000..764fb95 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/constants.ts @@ -0,0 +1,81 @@ +/** + * 车牌号键盘-省份简称 + */ +export const CAR_KEYBOARD_AREAS = [ + '京', + '沪', + '粤', + '津', + '冀', + '豫', + '云', + '辽', + '黑', + '湘', + '皖', + '鲁', + '苏', + '浙', + '赣', + '鄂', + '桂', + '甘', + '晋', + '陕', + '蒙', + '吉', + '闽', + '贵', + '渝', + '川', + '青', + '琼', + '宁', + '挂', + '藏', + '港', + '澳', + '新', + '使', + '学' +] + +/** + * 车牌号键盘-数字和字母(不包含I和O,因为车牌号规则中不使用这两个字母) + */ +export const CAR_KEYBOARD_KEYS = [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 0, + 'Q', + 'W', + 'E', + 'R', + 'T', + 'Y', + 'U', + 'P', + 'A', + 'S', + 'D', + 'F', + 'G', + 'H', + 'J', + 'K', + 'L', + 'Z', + 'X', + 'C', + 'V', + 'B', + 'N', + 'M' +] diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/index.scss b/src/uni_modules/wot-design-uni/components/wd-keyboard/index.scss new file mode 100644 index 0000000..feffeb0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/index.scss @@ -0,0 +1,102 @@ +@import './../common/abstracts/_mixin.scss'; +@import './../common/abstracts/variable.scss'; + +.wot-theme-dark { + @include b(keyboard) { + background: $-dark-background5; + + @include e(header) { + color: $-dark-color; + } + } +} + +@include b(keyboard) { + width: 100%; + background: $-keyboard-background; + color: $-color-black; + user-select: none; + + @include m(with-title) { + border-radius: 20px 20px 0 0; + } + + @include e(header) { + position: relative; + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; + height: $-keyboard-title-height; + padding-top: 6px; + color: $-keyboard-title-color; + font-size: $-keyboard-title-font-size; + } + + @include e(title) { + display: inline-block; + font-weight: normal; + + &-left { + position: absolute; + left: 0; + } + } + + @include e(body) { + display: flex; + padding: 6px 0 0 6px; + } + + @include e(keys) { + display: flex; + flex: 3; + flex-wrap: wrap; + } + + &-car { + @include e(body) { + display: flex; + padding: 6px 0 0 6px; + } + } + + &-car { + @include e(keys) { + display: flex; + flex: 10; + flex-wrap: wrap; + + .wd-key-wrapper { + --wot-keyboard-key-font-size: 18px; + flex-basis: 10%; + + @include m(wider) { + flex-basis: 20%; + } + } + } + } + + @include e(close) { + position: absolute; + display: flex; + align-items: center; + right: 0; + height: 100%; + padding: $-keyboard-close-padding; + color: $-keyboard-close-color; + font-size: $-keyboard-close-font-size; + background-color: transparent; + border: none; + @include m(hover) { + opacity: 0.6; + } + } + + @include e(sidebar) { + display: flex; + flex: 1; + flex-direction: column; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/key/index.scss b/src/uni_modules/wot-design-uni/components/wd-keyboard/key/index.scss new file mode 100644 index 0000000..6e256c2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/key/index.scss @@ -0,0 +1,79 @@ +@import './../../common/abstracts/_mixin.scss'; +@import './../../common/abstracts/variable.scss'; + +.wot-theme-dark { + @include b(key) { + background: $-dark-background2; + color: $-dark-color; + + &:active { + background-color: $-dark-background4; + } + + @include m(active) { + background-color: $-dark-background4; + } + } +} + +.wd-key-wrapper { + position: relative; + flex: 1; + flex-basis: 33%; + box-sizing: border-box; + padding: 0 6px 6px 0; + + @include m(wider) { + flex-basis: 66%; + } +} + +@include b(key) { + display: flex; + align-items: center; + justify-content: center; + height: $-keyboard-key-height; + font-size: $-keyboard-key-font-size; + line-height: 1.5; + background: $-keyboard-key-background; + border-radius: $-keyboard-key-border-radius; + + &:active { + background-color: $-keyboard-key-active-color; + } + + @include m(large) { + position: absolute; + top: 0; + right: 6px; + bottom: 6px; + left: 0; + height: auto; + } + + @include m(delete, close) { + font-size: $-keyboard-delete-font-size; + } + + @include m(active) { + background-color: $-keyboard-key-active-color; + } + + @include m(close) { + color: $-keyboard-button-text-color; + background: $-keyboard-button-background; + + &:active { + background: $-keyboard-button-background; + opacity: $-keyboard-button-active-opacity; + } + } + + @include edeep(loading-icon) { + color: $-keyboard-button-text-color; + } + + @include edeep(icon) { + font-size: $-keyboard-icon-size; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/key/index.vue b/src/uni_modules/wot-design-uni/components/wd-keyboard/key/index.vue new file mode 100644 index 0000000..b1a9a7c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/key/index.vue @@ -0,0 +1,71 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/key/types.ts b/src/uni_modules/wot-design-uni/components/wd-keyboard/key/types.ts new file mode 100644 index 0000000..efa497a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/key/types.ts @@ -0,0 +1,11 @@ +import { makeBooleanProp, makeNumericProp, makeStringProp } from '../../common/props' + +export type NumberKeyType = '' | 'delete' | 'extra' | 'close' + +export const keyProps = { + type: makeStringProp(''), + text: makeNumericProp(''), + wider: makeBooleanProp(false), + large: makeBooleanProp(false), + loading: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/types.ts b/src/uni_modules/wot-design-uni/components/wd-keyboard/types.ts new file mode 100644 index 0000000..789f76b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/types.ts @@ -0,0 +1,92 @@ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type KeyboardMode = 'default' | 'custom' | 'car' +export type KeyType = '' | 'delete' | 'extra' | 'close' +export type CarKeyboardLang = 'zh' | 'en' + +export interface Key { + text?: number | string // key文本 + type?: KeyType // key的类型 + wider?: boolean // 是否占2个key的宽度 +} + +export const keyboardProps = { + ...baseProps, + /** + * 是否可见 + */ + visible: makeBooleanProp(false), + /** + * 绑定的值 + */ + modelValue: makeStringProp(''), + /** + * 标题 + */ + title: String, + /** + * 键盘模式 + */ + mode: makeStringProp('default'), + /** + * 层级 + */ + zIndex: makeNumberProp(100), + /** + * 最大长度 + */ + maxlength: makeNumberProp(Infinity), + /** + * 是否显示删除键 + */ + showDeleteKey: makeBooleanProp(true), + /** + * 是否随机键盘按键顺序 + */ + randomKeyOrder: makeBooleanProp(false), + /** + * 确认按钮文本 + */ + closeText: String, + /** + * 删除按钮文本 + */ + deleteText: String, + /** + * 关闭按钮是否显示加载状态 + */ + closeButtonLoading: makeBooleanProp(false), + /** + * 是否显示蒙层 + */ + modal: makeBooleanProp(false), + /** + * 是否在点击外部时收起键盘 + */ + hideOnClickOutside: makeBooleanProp(true), + /** + * 是否锁定滚动 + */ + lockScroll: makeBooleanProp(true), + /** + * 是否在底部安全区域内 + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 额外按键 + */ + extraKey: [String, Array] as PropType>, + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 车牌键盘语言模式 当mode=car时生效 + */ + carLang: String as PropType, + /** + * 是否自动切换车牌键盘语言 当mode=car且carLang是非受控状态时生效 + */ + autoSwitchLang: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-keyboard/wd-keyboard.vue b/src/uni_modules/wot-design-uni/components/wd-keyboard/wd-keyboard.vue new file mode 100644 index 0000000..2a5e48f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-keyboard/wd-keyboard.vue @@ -0,0 +1,206 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-loading/index.scss b/src/uni_modules/wot-design-uni/components/wd-loading/index.scss new file mode 100644 index 0000000..bc995a7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-loading/index.scss @@ -0,0 +1,37 @@ +@import "../common/abstracts/_mixin.scss"; +@import "../common/abstracts/variable.scss"; + +@include b(loading) { + font-size: 0; + line-height: 0; + vertical-align: middle; + display: inline-block; + width: $-loading-size; + height: $-loading-size; + + @include e(body) { + width: 100%; + height: 100%; + animation: wd-rotate 0.8s linear infinite; + animation-duration: 2s; + + } + @include e(svg) { + width: 100%; + height: 100%; + background-size: cover; + background-repeat: no-repeat; + } +} + +@keyframes wd-rotate { + from { + transform: rotate(0deg); + } + + to { + transform: rotate(360deg); + } +} + + diff --git a/src/uni_modules/wot-design-uni/components/wd-loading/types.ts b/src/uni_modules/wot-design-uni/components/wd-loading/types.ts new file mode 100644 index 0000000..c997f2a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-loading/types.ts @@ -0,0 +1,31 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 20:40:34 + * @LastEditTime: 2024-07-18 22:09:12 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-loading/types.ts + * 记得注释 + */ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeNumericProp, makeStringProp } from '../common/props' + +export type LoadingType = 'outline' | 'ring' // 提示信息加载状态类型 + +export const loadingProps = { + ...baseProps, + /** + * 加载指示器类型,可选值:'outline' | 'ring' + */ + type: makeStringProp('ring'), + /** + * 设置加载指示器颜色 + */ + color: makeStringProp('#4D80F0'), + /** + * 设置加载指示器大小 + */ + size: makeNumericProp('') +} + +export type LoadingProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-loading/wd-loading.vue b/src/uni_modules/wot-design-uni/components/wd-loading/wd-loading.vue new file mode 100644 index 0000000..d887e8f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-loading/wd-loading.vue @@ -0,0 +1,90 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-loadmore/index.scss b/src/uni_modules/wot-design-uni/components/wd-loadmore/index.scss new file mode 100644 index 0000000..78974f6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-loadmore/index.scss @@ -0,0 +1,39 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; +.wot-theme-dark { + @include b(loadmore) { + color: $-dark-color; + } +} + +@include b(loadmore) { + width: 100%; + height: $-loadmore-height; + line-height: $-loadmore-height; + text-align: center; + color: $-loadmore-color; + + @include edeep(loading) { + display: inline-block; + margin-right: 8px; + vertical-align: middle; + width: $-loadmore-loading-size; + height: $-loadmore-loading-size; + } + @include e(text) { + display: inline-block; + font-size: $-loadmore-fs; + vertical-align: middle; + + @include when(light) { + margin: 0 6px; + color: $-loadmore-error-color; + } + } + @include edeep(refresh) { + display: inline-block; + color: $-loadmore-error-color; + vertical-align: middle; + font-size: $-loadmore-refresh-fs; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-loadmore/types.ts b/src/uni_modules/wot-design-uni/components/wd-loadmore/types.ts new file mode 100644 index 0000000..8ee2d00 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-loadmore/types.ts @@ -0,0 +1,30 @@ +import type { PropType } from 'vue' +import { baseProps } from '../common/props' +import type { LoadingProps } from '../wd-loading/types' + +export type LoadMoreState = 'loading' | 'error' | 'finished' + +export const loadmoreProps = { + ...baseProps, + /** + * 加载状态,可选值:'loading' | 'error' | 'finished' + */ + state: String as PropType, + /** + * 加载提示文案 + */ + loadingText: String, + /** + * 全部加载完的提示文案 + */ + finishedText: String, + /** + * 加载失败的提示文案 + */ + errorText: String, + /** + * 加载中loading组件的属性 + * 参考loading组件 + */ + loadingProps: Object as PropType> +} diff --git a/src/uni_modules/wot-design-uni/components/wd-loadmore/wd-loadmore.vue b/src/uni_modules/wot-design-uni/components/wd-loadmore/wd-loadmore.vue new file mode 100644 index 0000000..2852119 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-loadmore/wd-loadmore.vue @@ -0,0 +1,68 @@ + + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-message-box/index.scss b/src/uni_modules/wot-design-uni/components/wd-message-box/index.scss new file mode 100644 index 0000000..b4c39e3 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-message-box/index.scss @@ -0,0 +1,108 @@ +@import "../common/abstracts/variable.scss"; +@import "../common/abstracts/_mixin.scss"; + +.wot-theme-dark { + @include b(message-box) { + @include e(body) { + background-color: $-dark-background2; + } + + @include e(title) { + color: $-dark-color; + } + + @include e(content) { + color: $-dark-color3; + + &::-webkit-scrollbar-thumb { + background: $-dark-border-color; + } + } + } +} + +:deep(.wd-message-box){ + border-radius: $-message-box-radius; + overflow: hidden; +} + +@include b(message-box) { + border-radius: $-message-box-radius; + overflow: hidden; + + @include e(container) { + width: $-message-box-width; + box-sizing: border-box; + } + + @include e(body) { + background-color: $-message-box-bg; + padding: $-message-box-padding; + + @include when(no-title) { + padding: 25px 24px 0px; + } + } + + @include e(title) { + text-align: center; + font-size: $-message-box-title-fs; + color: $-message-box-title-color; + line-height: 20px; + font-weight: 500; + padding-top: 5px; + padding-bottom: 10px; + } + + @include e(content) { + max-height: $-message-box-content-max-height; + color: $-message-box-content-color; + font-size: $-message-box-content-fs; + text-align: center; + overflow: auto; + line-height: 20px; + + &::-webkit-scrollbar { + width: $-message-box-content-scrollbar-width; + } + + &::-webkit-scrollbar-thumb { + width: $-message-box-content-scrollbar-width; + background: $-message-box-content-scrollbar-color; + border-radius: calc($-message-box-content-scrollbar-width / 2); + } + } + + @include e(input-error) { + min-height: 18px; + margin-top: 2px; + color: $-message-box-input-error-color; + text-align: left; + + @include when(hidden) { + visibility: hidden; + } + } + + @include e(actions) { + padding: 24px; + } + + @include edeep(actions-btn) { + &:not(:last-child) { + margin-right: 16px; + } + } + + @include e(flex) { + display: flex; + } + + @include e(block) { + display: block; + } + + @include e(cancel) { + margin-right: 16px; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-message-box/index.ts b/src/uni_modules/wot-design-uni/components/wd-message-box/index.ts new file mode 100644 index 0000000..5e67a4e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-message-box/index.ts @@ -0,0 +1,96 @@ +/* + * @Author: weisheng + * @Date: 2022-12-14 17:33:21 + * @LastEditTime: 2024-12-05 13:23:17 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-message-box\index.ts + * 记得注释 + */ +import { inject, provide, ref } from 'vue' +import type { Message, MessageOptions, MessageOptionsWithCallBack, MessageResult, MessageType } from './types' +import { deepMerge } from '../common/util' + +const messageDefaultOptionKey = '__MESSAGE_OPTION__' + +const None = Symbol('None') + +// 默认模板 +export const defaultOptions: MessageOptionsWithCallBack = { + title: '', + showCancelButton: false, + show: false, + closeOnClickModal: true, + msg: '', + type: 'alert', + inputType: 'text', + inputValue: '', + showErr: false, + zIndex: 99, + lazyRender: true, + inputError: '' +} + +export function useMessage(selector: string = ''): Message { + const messageOptionKey = selector ? messageDefaultOptionKey + selector : messageDefaultOptionKey + const messageOption = inject(messageOptionKey, ref(None)) // Message选项 + if (messageOption.value === None) { + messageOption.value = defaultOptions + provide(messageOptionKey, messageOption) + } + + const createMethod = (type: MessageType) => { + // 优先级:options->MessageOptions->defaultOptions + return (options: MessageOptions | string) => { + const messageOptions = deepMerge({ type: type }, typeof options === 'string' ? { title: options } : options) as MessageOptions + if (messageOptions.type === 'confirm' || messageOptions.type === 'prompt') { + messageOptions.showCancelButton = true + } else { + messageOptions.showCancelButton = false + } + return show(messageOptions) + } + } + + const show = (option: MessageOptions | string) => { + // 返回一个promise + return new Promise((resolve, reject) => { + const options = deepMerge(defaultOptions, typeof option === 'string' ? { title: option } : option) + messageOption.value = deepMerge(options, { + show: true, + success: (res: MessageResult) => { + close() + resolve(res) + }, + fail: (res: MessageResult) => { + close() + reject(res) + } + }) + }) + } + + // 打开Alert 弹框 + const alert = createMethod('alert') + // 打开Confirm 弹框 + const confirm = createMethod('confirm') + // 打开Prompt 弹框 + const prompt = createMethod('prompt') + + const close = () => { + if (messageOption.value !== None) { + messageOption.value.show = false + } + } + return { + show, + alert, + confirm, + prompt, + close + } +} + +export const getMessageDefaultOptionKey = (selector: string) => { + return selector ? `${messageDefaultOptionKey}${selector}` : messageDefaultOptionKey +} diff --git a/src/uni_modules/wot-design-uni/components/wd-message-box/types.ts b/src/uni_modules/wot-design-uni/components/wd-message-box/types.ts new file mode 100644 index 0000000..d4e74a3 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-message-box/types.ts @@ -0,0 +1,141 @@ +/* + * @Author: weisheng + * @Date: 2024-04-08 22:34:01 + * @LastEditTime: 2024-12-05 13:26:50 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-message-box\types.ts + * 记得注释 + */ +import { baseProps, makeStringProp, makeBooleanProp } from '../common/props' +import type { ButtonProps } from '../wd-button/types' +import { type InputSize, type InputType } from '../wd-input/types' + +export type MessageType = 'alert' | 'confirm' | 'prompt' + +export type MessageBeforeConfirmOption = { + resolve: (isPass: boolean) => void +} + +export type MessageOptions = { + /** + * 标题 + */ + title?: string + /** + * 是否展示取消按钮 + */ + showCancelButton?: boolean + /** + * 是否支持点击蒙层进行关闭,点击蒙层回调传入的action为'modal' + */ + closeOnClickModal?: boolean + /** + * 确定按钮文案 + */ + confirmButtonText?: string + /** + * 取消按钮文案 + */ + cancelButtonText?: string + /** + * 消息文案 + */ + msg?: string + /** + * 弹框类型 + */ + type?: MessageType + /** + * 当type为prompt时,输入框类型 + */ + inputType?: InputType + /** + * 设置输入框大小,可选值:large + */ + inputSize?: InputSize + /** + * 当type为prompt时,输入框初始值 + */ + inputValue?: string | number + /** + * 当type为prompt时,输入框placeholder + */ + inputPlaceholder?: string + /** + * 当type为prompt时,输入框正则校验,点击确定按钮时进行校验 + */ + inputPattern?: RegExp + /** + * 当type为prompt时,输入框校验函数,点击确定按钮时进行校验 + */ + inputValidate?: InputValidate + /** + * 当type为prompt时,输入框检验不通过时的错误提示文案 + */ + inputError?: string + /** + * 是否展示错误信息 + */ + showErr?: boolean + /** + * 弹窗层级 + */ + zIndex?: number + /** + * 弹层内容懒渲染,触发展示时才渲染内容 + */ + lazyRender?: boolean + /** + * 确认前钩子 + */ + beforeConfirm?: (options: MessageBeforeConfirmOption) => void + /** + * 取消按钮Props + */ + cancelButtonProps?: Partial + /** + * 确认按钮Props + */ + confirmButtonProps?: Partial +} + +export type MessageOptionsWithCallBack = MessageOptions & { + show?: boolean + success?: (res: MessageResult) => void + fail?: (res: MessageResult) => void +} + +export type ActionType = 'confirm' | 'cancel' | 'modal' + +export type InputValidate = (inputValue: string | number) => boolean + +export interface MessageResult { + action: ActionType + value?: string | number +} + +export interface Message { + // 打开Message + show(toastOptions: MessageOptions | string): Promise + // 打开Alert 弹框 + alert(toastOptions: MessageOptions | string): Promise + // 打开Confirm 弹框 + confirm(toastOptions: MessageOptions | string): Promise + // 打开Prompt 弹框 + prompt(toastOptions: MessageOptions | string): Promise + // 关闭Message + close(): void +} + +export const messageBoxProps = { + ...baseProps, + /** + * 指定唯一标识 + */ + selector: makeStringProp(''), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-message-box/wd-message-box.vue b/src/uni_modules/wot-design-uni/components/wd-message-box/wd-message-box.vue new file mode 100644 index 0000000..6421528 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-message-box/wd-message-box.vue @@ -0,0 +1,291 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/index.scss b/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/index.scss new file mode 100644 index 0000000..b41d43d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/index.scss @@ -0,0 +1,66 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(navbar-capsule) { + &::before { + border: 2rpx solid $-dark-border-color; + } + + &::after { + background: $-dark-border-color; + } + + :deep(.wd-navbar-capsule__icon) { + color: $-dark-color; + } + } +} + + +@include b(navbar-capsule) { + position: relative; + box-sizing: border-box; + width: $-navbar-capsule-width; + height: $-navbar-capsule-height; + display: flex; + align-items: center; + justify-content: center; + + &::before { + content: ''; + position: absolute; + top: 0; + left: 0; + width: 200%; + height: 200%; + transform: scale(0.5); + transform-origin: 0 0; + box-sizing: border-box; + border-radius: calc($-navbar-capsule-border-radius * 2); + border: 2rpx solid $-navbar-capsule-border-color; + } + + &::after { + content: ''; + display: block; + position: absolute; + left: 50%; + top: 50%; + transform: translateY(-50%); + width: 1px; + height: 36rpx; + background: $-navbar-capsule-border-color; + } + + &:empty { + display: none; + } + + @include edeep(icon) { + flex: 1; + position: relative; + color: $-navbar-desc-font-color; + font-size: $-navbar-capsule-icon-size; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/types.ts b/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/types.ts new file mode 100644 index 0000000..2aee4bc --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/types.ts @@ -0,0 +1,8 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps } from '../common/props' + +export const navbarCapsuleProps = { + ...baseProps +} + +export type NavbarCapsuleProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/wd-navbar-capsule.vue b/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/wd-navbar-capsule.vue new file mode 100644 index 0000000..8b3568e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-navbar-capsule/wd-navbar-capsule.vue @@ -0,0 +1,35 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-navbar/index.scss b/src/uni_modules/wot-design-uni/components/wd-navbar/index.scss new file mode 100644 index 0000000..e1685f2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-navbar/index.scss @@ -0,0 +1,93 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(navbar) { + background-color: $-dark-background; + + @include e(title) { + color: $-dark-color; + } + + @include e(text) { + color: $-dark-color; + } + + :deep(.wd-navbar__arrow) { + color: $-dark-color; + } + } +} + + +@include b(navbar) { + position: relative; + text-align: center; + user-select: none; + height: $-navbar-height; + line-height: $-navbar-height; + background-color: $-navbar-background; + box-sizing: content-box; + + @include e(content) { + position: relative; + height: 100%; + width: 100%; + } + + @include e(title) { + max-width: 60%; + height: 100%; + margin: 0 auto; + color: $-navbar-color; + font-weight: $-navbar-title-font-weight; + font-size: $-navbar-title-font-size; + @include lineEllipsis(); + } + + @include e(text) { + display: inline-block; + vertical-align: middle; + color: $-navbar-desc-font-color; + } + + @include e(left, right, capsule) { + position: absolute; + top: 0; + bottom: 0; + font-size: $-navbar-desc-font-size; + display: flex; + align-items: center; + padding: 0 12px; + + @include when(disabled) { + opacity: $-navbar-disabled-opacity; + } + } + + @include e(left, capsule) { + left: 0; + } + + @include e(right) { + right: 0; + } + + @include edeep(arrow) { + font-size: $-navbar-arrow-size; + color: $-navbar-color; + } + + + @include when(border) { + @include halfPixelBorder('bottom'); + } + + @include when(fixed) { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 500; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-navbar/types.ts b/src/uni_modules/wot-design-uni/components/wd-navbar/types.ts new file mode 100644 index 0000000..1879865 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-navbar/types.ts @@ -0,0 +1,52 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp } from '../common/props' + +export const navbarProps = { + ...baseProps, + /** + * 标题文字 + */ + title: String, + /** + * 左侧文案 + */ + leftText: String, + /** + * 右侧文案 + */ + rightText: String, + /** + * 是否显示左侧箭头 + */ + leftArrow: makeBooleanProp(false), + /** + * 是否显示下边框 + */ + bordered: makeBooleanProp(true), + /** + * 是否固定到顶部 + */ + fixed: makeBooleanProp(false), + /** + * 固定在顶部时,是否在标签位置生成一个等高的占位元素 + */ + placeholder: makeBooleanProp(false), + /** + * 导航栏 z-index + */ + zIndex: makeNumberProp(500), + /** + * 是否开启顶部安全区适配 + */ + safeAreaInsetTop: makeBooleanProp(false), + /** + * 是否禁用左侧按钮,禁用时透明度降低,且无法点击 + */ + leftDisabled: makeBooleanProp(false), + /** + * 是否禁用右侧按钮,禁用时透明度降低,且无法点击 + */ + rightDisabled: makeBooleanProp(false) +} + +export type NavbarProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-navbar/wd-navbar.vue b/src/uni_modules/wot-design-uni/components/wd-navbar/wd-navbar.vue new file mode 100644 index 0000000..0965d55 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-navbar/wd-navbar.vue @@ -0,0 +1,111 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-notice-bar/index.scss b/src/uni_modules/wot-design-uni/components/wd-notice-bar/index.scss new file mode 100644 index 0000000..5ee8d3c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notice-bar/index.scss @@ -0,0 +1,68 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(notice-bar) { + display: flex; + padding: $-notice-bar-padding; + align-items: center; + font-size: $-notice-bar-fs; + border-radius: $-notice-bar-border-radius; + position: relative; + box-sizing: border-box; + @include when(warning) { + background: $-notice-bar-warning-bg; + color: $-notice-bar-warning-color; + } + @include when(info) { + background: $-notice-bar-info-bg; + color: $-notice-bar-info-color; + } + @include when(danger) { + background: $-notice-bar-danger-bg; + color: $-notice-bar-danger-color; + } + @include edeep(prefix) { + padding-right: 4px; + font-size: $-notice-bar-prefix-size; + } + + @include edeep(suffix) { + text-align: center; + font-size: $-notice-bar-close-size; + display: inline-block; + background-color: $-notice-bar-close-bg; + color: $-notice-bar-close-color; + padding: 0; + border-radius: 0px 8px 0px 4px; + position: absolute; + right: 0; + top: 0; + } + @include e(wrap) { + position: relative; + flex: 1; + height: $-notice-bar-line-height; + overflow: hidden; + line-height: $-notice-bar-line-height; + } + @include e(content) { + position: absolute; + white-space: nowrap; + } + @include m(ellipse) { + .wd-notice-bar__content { + position: static; + @include lineEllipsis; + } + } + @include m(wrap) { + + .wd-notice-bar__wrap { + height: auto; + } + .wd-notice-bar__content { + position: static; + white-space: normal; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-notice-bar/types.ts b/src/uni_modules/wot-design-uni/components/wd-notice-bar/types.ts new file mode 100644 index 0000000..df6f796 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notice-bar/types.ts @@ -0,0 +1,67 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type NoticeBarType = 'warning' | 'info' | 'danger' | '' +export type NoticeBarScrollDirection = 'horizontal' | 'vertical' + +export const noticeBarProps = { + ...baseProps, + /** + * 设置通知栏文案 + */ + text: { + type: [String, Array] as PropType, + default: '' + }, + /** + * 设置通知栏类型,可选值为:'warning' | 'info' | 'danger' + */ + type: makeStringProp('warning'), + /** + * 是否可滚动 + */ + scrollable: makeBooleanProp(true), + /** + * 滚动延迟时间(秒) + */ + delay: makeNumberProp(1), + /** + * 滚动速度(px/s) + */ + speed: makeNumberProp(50), + /** + * 是否可关闭 + */ + closable: makeBooleanProp(false), + /** + * 是否换行显示 + */ + wrapable: makeBooleanProp(false), + /** + * 设置左侧图标,使用 icon 章节中的图标名 + */ + prefix: String, + /** + * 文字、图标颜色 + */ + color: String, + /** + * 背景颜色 + */ + backgroundColor: String, + /** + * 滚动方向 + */ + direction: makeStringProp('horizontal') +} + +export type NoticeBarProps = ExtractPropTypes + +export type NoticeBarExpose = { + /** + * 重置NoticeBar动画 + */ + reset: () => void +} + +export type NoticeBarInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue b/src/uni_modules/wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue new file mode 100644 index 0000000..1c0e16a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notice-bar/wd-notice-bar.vue @@ -0,0 +1,266 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-notify/index.scss b/src/uni_modules/wot-design-uni/components/wd-notify/index.scss new file mode 100644 index 0000000..5df8f4d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notify/index.scss @@ -0,0 +1,34 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(notify) { + display: flex; + align-items: center; + justify-content: center; + box-sizing: border-box; + padding: $-notify-padding; + font-size: $-notify-font-size; + line-height: $-notify-line-height; + color: $-notify-text-color; + + // allow newline character + white-space: pre-wrap; + text-align: center; + word-wrap: break-word; + + @include m(primary) { + background: $-notify-primary-background; + } + + @include m(success) { + background: $-notify-success-background; + } + + @include m(danger) { + background: $-notify-danger-background; + } + + @include m(warning) { + background: $-notify-warning-background; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-notify/index.ts b/src/uni_modules/wot-design-uni/components/wd-notify/index.ts new file mode 100644 index 0000000..aaefa7c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notify/index.ts @@ -0,0 +1,61 @@ +import { inject, provide, reactive, ref } from 'vue' +import type { NotifyProps } from './types' +import { deepMerge, isString } from '../common/util' + +let timer: ReturnType +let currentOptions = getDefaultOptions() +const notifyDefaultOptionKey = '__NOTIFY_OPTION__' +const None = Symbol('None') +export const setNotifyDefaultOptions = (options: NotifyProps) => { + currentOptions = deepMerge(currentOptions, options) as NotifyProps +} +export const resetNotifyDefaultOptions = () => { + currentOptions = getDefaultOptions() +} +export const useNotify = (selector: string = '') => { + const notifyOptionKey = getNotifyOptionKey(selector) + + const notifyOption = inject(notifyOptionKey, ref(None)) + if (notifyOption.value === None) { + notifyOption.value = currentOptions + provide(notifyOptionKey, notifyOption) + } + const showNotify = (option: NotifyProps | string) => { + const options = deepMerge(currentOptions, isString(option) ? { message: option } : option) as NotifyProps + notifyOption.value = deepMerge(options, { visible: true }) + if (notifyOption.value.duration && notifyOption.value.duration > 0) { + timer && clearTimeout(timer) + timer = setTimeout(() => closeNotify(), options.duration) + } + } + const closeNotify = () => { + timer && clearTimeout(timer) + if (notifyOption.value !== None) { + notifyOption.value.visible = false + } + } + + return { + showNotify, + closeNotify + } +} +export const getNotifyOptionKey = (selector: string) => { + return selector ? `${notifyDefaultOptionKey}${selector}` : notifyDefaultOptionKey +} + +function getDefaultOptions(): NotifyProps { + return { + type: 'danger', + color: undefined, + zIndex: 99, + message: '', + duration: 3000, + position: 'top', + safeHeight: undefined, + background: undefined, + onClick: undefined, + onClosed: undefined, + onOpened: undefined + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-notify/types.ts b/src/uni_modules/wot-design-uni/components/wd-notify/types.ts new file mode 100644 index 0000000..6b6e6d0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notify/types.ts @@ -0,0 +1,66 @@ +import type { PropType, ExtractPropTypes } from 'vue' +import { makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' + +export type NotifyType = 'primary' | 'success' | 'danger' | 'warning' +export type NotifyPosition = 'top' | 'bottom' +export type NotifyProps = Omit>, 'selector'> & { + onClick?: (event: MouseEvent) => void + onClosed?: () => void + onOpened?: () => void +} +export type NotifyThemeVars = { + notifyPadding?: string + notifyFontSize?: string + notifyTextColor?: string + notifyLineHeight?: number | string + notifyDangerBackground?: string + notifyPrimaryBackground?: string + notifySuccessBackground?: string + notifyWarningBackground?: string +} +export const notifyProps = { + /** + * 类型,可选值为 primary success danger warning + */ + type: makeStringProp('danger'), + /** + * 字体颜色 + */ + color: makeStringProp(''), + /** + * 将组件的 z-index 层级设置为一个固定值 + */ + zIndex: makeNumberProp(99), + /** + * 显示 + */ + visible: makeBooleanProp(false), + /** + * 展示文案,支持通过\n换行 + */ + message: makeNumericProp(''), + /** + * 指定唯一标识 + */ + selector: makeStringProp(''), + /** + * 展示时长(ms),值为 0 时,notify 不会消失 + */ + duration: makeNumberProp(3000), + /** + * 弹出位置,可选值为 top bottom + */ + position: makeStringProp('top'), + /** + * 顶部安全高度( + */ + safeHeight: Number, + /** + * 背景颜色 + */ + background: makeStringProp(''), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-notify/wd-notify.vue b/src/uni_modules/wot-design-uni/components/wd-notify/wd-notify.vue new file mode 100644 index 0000000..390c2be --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-notify/wd-notify.vue @@ -0,0 +1,85 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-number-keyboard/index.scss b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/index.scss new file mode 100644 index 0000000..09a903a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/index.scss @@ -0,0 +1,78 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(number-keyboard) { + background: $-dark-background5; + + @include e(header){ + color: $-dark-color; + } + } +} + +@include b(number-keyboard) { + width: 100%; + background: $-number-keyboard-background; + color: $-color-black; + user-select: none; + + @include m(with-title) { + border-radius: 20px 20px 0 0; + } + + @include e(header) { + position: relative; + display: flex; + align-items: center; + justify-content: center; + box-sizing: content-box; + height: $-number-keyboard-title-height; + padding-top: 6px; + color: $-number-keyboard-title-color; + font-size: $-number-keyboard-title-font-size; + } + + @include e(title) { + display: inline-block; + font-weight: normal; + + &-left { + position: absolute; + left: 0; + } + } + + @include e(body) { + display: flex; + padding: 6px 0 0 6px; + } + + @include e(keys) { + display: flex; + flex: 3; + flex-wrap: wrap; + } + + @include e(close) { + position: absolute; + display: flex; + align-items: center; + right: 0; + height: 100%; + padding: $-number-keyboard-close-padding; + color: $-number-keyboard-close-color; + font-size: $-number-keyboard-close-font-size; + background-color: transparent; + border: none; + @include m(hover){ + opacity: 0.6; + } + } + + @include e(sidebar) { + display: flex; + flex: 1; + flex-direction: column; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.scss b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.scss new file mode 100644 index 0000000..e2f9692 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.scss @@ -0,0 +1,81 @@ +@import "./../../common/abstracts/_mixin.scss"; +@import "./../../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(key) { + background: $-dark-background2; + color: $-dark-color; + + &:active { + background-color: $-dark-background4; + } + + @include m(active) { + background-color: $-dark-background4; + } + + } +} + +.wd-key-wrapper { + position: relative; + flex: 1; + flex-basis: 33%; + box-sizing: border-box; + padding: 0 6px 6px 0; + + @include m(wider) { + flex-basis: 66%; + } +} + +@include b(key) { + display: flex; + align-items: center; + justify-content: center; + height: $-number-keyboard-key-height; + font-size: $-number-keyboard-key-font-size; + line-height: 1.5; + background: $-number-keyboard-key-background; + border-radius: $-number-keyboard-key-border-radius; + + &:active { + background-color: $-number-keyboard-key-active-color; + } + + @include m(large) { + position: absolute; + top: 0; + right: 6px; + bottom: 6px; + left: 0; + height: auto; + } + + @include m(delete, close) { + font-size: $-number-keyboard-delete-font-size; + } + + @include m(active) { + background-color: $-number-keyboard-key-active-color; + } + + @include m(close) { + color: $-number-keyboard-button-text-color; + background: $-number-keyboard-button-background; + + &:active { + background: $-number-keyboard-button-background; + opacity: $-number-keyboard-button-active-opacity; + } + } + + @include edeep(loading-icon) { + color: $-number-keyboard-button-text-color; + } + + @include edeep(icon) { + font-size: $-number-keyboard-icon-size; + } + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.vue b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.vue new file mode 100644 index 0000000..4ff505c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/index.vue @@ -0,0 +1,73 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/types.ts b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/types.ts new file mode 100644 index 0000000..efa497a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/key/types.ts @@ -0,0 +1,11 @@ +import { makeBooleanProp, makeNumericProp, makeStringProp } from '../../common/props' + +export type NumberKeyType = '' | 'delete' | 'extra' | 'close' + +export const keyProps = { + type: makeStringProp(''), + text: makeNumericProp(''), + wider: makeBooleanProp(false), + large: makeBooleanProp(false), + loading: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-number-keyboard/types.ts b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/types.ts new file mode 100644 index 0000000..16dc216 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/types.ts @@ -0,0 +1,83 @@ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type KeyboardMode = 'default' | 'custom' +export type KeyType = '' | 'delete' | 'extra' | 'close' + +export interface Key { + text?: number | string // key文本 + type?: KeyType // key的类型 + wider?: boolean // 是否占2个key的宽度 +} + +export const numberKeyboardProps = { + ...baseProps, + /** + * 是否可见 + */ + visible: makeBooleanProp(false), + /** + * 绑定的值 + */ + modelValue: makeStringProp(''), + /** + * 标题 + */ + title: String, + /** + * 键盘模式 + */ + mode: makeStringProp('default'), + /** + * 层级 + */ + zIndex: makeNumberProp(100), + /** + * 最大长度 + */ + maxlength: makeNumberProp(Infinity), + /** + * 是否显示删除键 + */ + showDeleteKey: makeBooleanProp(true), + /** + * 是否随机键盘按键顺序 + */ + randomKeyOrder: makeBooleanProp(false), + /** + * 确认按钮文本 + */ + closeText: String, + /** + * 删除按钮文本 + */ + deleteText: String, + /** + * 关闭按钮是否显示加载状态 + */ + closeButtonLoading: makeBooleanProp(false), + /** + * 是否显示蒙层 + */ + modal: makeBooleanProp(false), + /** + * 是否在点击外部时收起键盘 + */ + hideOnClickOutside: makeBooleanProp(true), + /** + * 是否锁定滚动 + */ + lockScroll: makeBooleanProp(true), + /** + * 是否在底部安全区域内 + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 额外按键 + */ + extraKey: [String, Array] as PropType>, + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-number-keyboard/wd-number-keyboard.vue b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/wd-number-keyboard.vue new file mode 100644 index 0000000..e3d96d6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-number-keyboard/wd-number-keyboard.vue @@ -0,0 +1,151 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-overlay/index.scss b/src/uni_modules/wot-design-uni/components/wd-overlay/index.scss new file mode 100644 index 0000000..4cb37fa --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-overlay/index.scss @@ -0,0 +1,17 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(overlay) { + background: $-overlay-bg-dark; + } +} + +@include b(overlay) { + position: fixed; + left: 0; + top: 0; + right: 0; + bottom: 0; + background: $-overlay-bg; +} diff --git a/src/uni_modules/wot-design-uni/components/wd-overlay/types.ts b/src/uni_modules/wot-design-uni/components/wd-overlay/types.ts new file mode 100644 index 0000000..fd15be2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-overlay/types.ts @@ -0,0 +1,25 @@ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp } from '../common/props' + +export const overlayProps = { + ...baseProps, + /** + * 是否展示遮罩层 + */ + show: makeBooleanProp(false), + /** + * 动画时长,单位毫秒 + */ + duration: { + type: [Object, Number, Boolean] as PropType | number | boolean>, + default: 300 + }, + /** + * 是否锁定滚动 + */ + lockScroll: makeBooleanProp(true), + /** + * 层级 + */ + zIndex: makeNumberProp(10) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-overlay/wd-overlay.vue b/src/uni_modules/wot-design-uni/components/wd-overlay/wd-overlay.vue new file mode 100644 index 0000000..fce1c10 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-overlay/wd-overlay.vue @@ -0,0 +1,47 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-pagination/index.scss b/src/uni_modules/wot-design-uni/components/wd-pagination/index.scss new file mode 100644 index 0000000..c464c50 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-pagination/index.scss @@ -0,0 +1,57 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(pager) { + background-color: $-dark-background; + @include e(message) { + color: $-dark-color3; + } + } +} + +@include b(pager) { + user-select: none; + background-color: #fff; + + @include edeep(icon) { + font-size: $-pagination-icon-size; + } + + @include e(content) { + display: flex; + justify-content: flex-start; + align-items: center; + padding: $-pagination-content-padding; + } + @include e(message) { + text-align: center; + color:$-pagination-message-color; + font-size: $-pagination-message-fs; + padding: $-pagination-message-padding; + } + @include edeep(nav) { + min-width: $-pagination-nav-width; + @include m(active){ + color: rgba(0,0,0,0.65) + } + @include m(disabled){ + color: rgba(0,0,0,0.15) + } + } + @include e(size){ + flex: 1; + text-align: center; + font-size: $-pagination-nav-content-fs; + } + @include e(separator){ + padding: $-pagination-nav-sepatator-padding; + } + @include edeep(left){ + transform: rotate(180deg) translateY(1px); + display: inline-block; + } + @include e(current){ + color: $-pagination-nav-current-color; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-pagination/types.ts b/src/uni_modules/wot-design-uni/components/wd-pagination/types.ts new file mode 100644 index 0000000..a40c687 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-pagination/types.ts @@ -0,0 +1,41 @@ +import { baseProps, makeBooleanProp, makeNumberProp, makeRequiredProp } from '../common/props' + +export const paginationProps = { + ...baseProps, + /** + * 当前页 + */ + modelValue: makeRequiredProp(Number), + /** + * 总页数,如果有total,则优先使用total计算页数 + */ + totalPage: makeNumberProp(1), + /** + * 是否展示分页为Icon图标 + */ + showIcon: makeBooleanProp(false), + /** + * 是否展示总条数 + */ + showMessage: makeBooleanProp(false), + /** + * 总条数 + */ + total: makeNumberProp(0), + /** + * 每页条数 + */ + pageSize: makeNumberProp(10), + /** + * 上一页文本 + */ + prevText: String, + /** + * 下一页文本 + */ + nextText: String, + /** + * 总页数只有一页时是否隐藏 + */ + hideIfOnePage: makeBooleanProp(true) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-pagination/wd-pagination.vue b/src/uni_modules/wot-design-uni/components/wd-pagination/wd-pagination.vue new file mode 100644 index 0000000..bf52e1b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-pagination/wd-pagination.vue @@ -0,0 +1,110 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-password-input/index.scss b/src/uni_modules/wot-design-uni/components/wd-password-input/index.scss new file mode 100644 index 0000000..347bb00 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-password-input/index.scss @@ -0,0 +1,124 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(password-input) { + @include e(item) { + color: $-dark-color; + background: $-dark-background2; + + @include when(border) { + border-color: $-dark-border-color; + } + } + + @include e(mask) { + background-color: $-dark-color; + } + + @include e(cursor) { + background-color: $-dark-color; + } + + @include e(info) { + color: $-dark-color; + + @include when(border) { + color: $-dark-color2; + } + } + } +} + +@include b(password-input) { + position: relative; + margin: 0 $-password-input-margin; + user-select: none; + + @include e(security) { + display: flex; + width: 100%; + height: $-password-input-height; + cursor: pointer; + } + + @include e(item) { + position: relative; + display: flex; + flex: 1; + align-items: center; + justify-content: center; + height: 100%; + color: $-password-input-text-color; + font-size: $-password-input-font-size; + line-height: 1.2; + background: $-password-input-background; + + @include when(border) { + border: 1px solid $-password-input-border-color; + + &:not(:last-child) { + border-right: none; + } + + &:first-child { + border-top-left-radius: $-password-input-radius; + border-bottom-left-radius: $-password-input-radius; + } + + &:last-child { + border-top-right-radius: $-password-input-radius; + border-bottom-right-radius: $-password-input-radius; + } + } + } + + @include e(mask) { + position: absolute; + top: 50%; + left: 50%; + width: $-password-input-dot-size; + height: $-password-input-dot-size; + background: $-password-input-dot-color; + border-radius: 100%; + transform: translate(-50%, -50%); + visibility: hidden; + } + + @include e(cursor) { + position: absolute; + top: 50%; + left: 50%; + width: $-password-input-cursor-width; + height: $-password-input-cursor-height; + background: $-password-input-cursor-color; + transform: translate(-50%, -50%); + animation: $-password-input-cursor-duration cursor-flicker infinite; + } + + @include e(info) { + margin-top: $-password-input-margin; + font-size: $-password-input-info-font-size; + text-align: center; + color: $-password-input-info-color; + + @include when(error) { + color: $-password-input-error-info-color; + } + + } +} + +@keyframes cursor-flicker { + from { + opacity: 0; + } + + 50% { + opacity: 1; + } + + 100% { + opacity: 0; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-password-input/types.ts b/src/uni_modules/wot-design-uni/components/wd-password-input/types.ts new file mode 100644 index 0000000..550788c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-password-input/types.ts @@ -0,0 +1,42 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 20:40:34 + * @LastEditTime: 2024-03-18 15:12:17 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-password-input\types.ts + * 记得注释 + */ +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' + +export const passwordInputProps = { + ...baseProps, + /** + * 绑定的值 + */ + modelValue: makeStringProp(''), + /** + * 是否隐藏密码内容 + */ + mask: makeBooleanProp(true), + /** + * 输入框下方文字提示 + */ + info: makeStringProp(''), + /** + * 输入框下方错误提示 + */ + errorInfo: makeStringProp(''), + /** + * 输入框格子之间的间距,如 20px 2em,默认单位为 px + */ + gutter: makeNumericProp(0), + /** + * 密码最大长度 + */ + length: makeNumberProp(6), + /** + * 是否已聚焦,聚焦时会显示光标 + */ + focused: makeBooleanProp(true) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-password-input/wd-password-input.vue b/src/uni_modules/wot-design-uni/components/wd-password-input/wd-password-input.vue new file mode 100644 index 0000000..1bad247 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-password-input/wd-password-input.vue @@ -0,0 +1,49 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-picker-view/index.scss b/src/uni_modules/wot-design-uni/components/wd-picker-view/index.scss new file mode 100644 index 0000000..83d4aaf --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-picker-view/index.scss @@ -0,0 +1,92 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(picker-view) { + @include e(columns) { + background: $-dark-background2; + } + + :deep(.wd-picker-view__roller) { + background: $-dark-background4; + } + } + + @include b(picker-view-column) { + color: $-dark-color; + + @include e(item) { + @include m(disabled) { + color: $-dark-color-gray; + } + } + } +} + + +@include b(picker-view) { + position: relative; + padding: 10px 0; + + @include e(columns) { + position: relative; + display: flex; + background: $-picker-bg; + overflow: hidden; + align-items: center; + } + + @include edeep(mask) { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: $-picker-mask; + background-position: top, bottom; + background-repeat: no-repeat; + z-index: 2; + pointer-events: none; + filter: blur(4px); + } + + @include e(loading) { + position: absolute; + display: flex; + top: 0; + right: 0; + bottom: 0; + left: 0; + align-items: center; + justify-content: center; + z-index: 3; + background: $-picker-loading-bg; + } + + @include edeep(roller) { + background: rgba(245, 245, 245, 1); + z-index: 0; + + &::before, + &::after { + display: none; + } + } +} + +@include b(picker-view-column) { + flex: 1; + font-size: $-picker-column-fs; + color: $-picker-column-color; + text-align: center; + transition-timing-function: cubic-bezier(0.28, 0.8, 0.63, 1); + + @include e(item) { + padding: $-picker-column-padding; + @include lineEllipsis; + + @include m(disabled) { + color: $-picker-column-disabled-color; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-picker-view/types.ts b/src/uni_modules/wot-design-uni/components/wd-picker-view/types.ts new file mode 100644 index 0000000..c21a9f4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-picker-view/types.ts @@ -0,0 +1,152 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType, Ref } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' +import { getType, isArray, isObj } from '../common/util' + +export type ColumnItem = { + [key: string]: any + value?: string | number | boolean + label?: string + disabled?: boolean +} + +export type PickerViewColumnChange = ( + pickerView: PickerViewInstance, + selects: Record | Record[], + index: number, + reslove: () => void +) => void + +export const pickerViewProps = { + ...baseProps, + /** + * 加载状态 + */ + loading: makeBooleanProp(false), + /** + * 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 + */ + loadingColor: makeStringProp('#4D80F0'), + /** + * picker内部滚筒高 + */ + columnsHeight: makeNumberProp(217), + /** + * picker item的高度 + */ + itemHeight: makeNumberProp(35), + /** + * 选项对象中,value对应的 key + */ + valueKey: makeStringProp('value'), + /** + * 选项对象中,展示的文本对应的 key + */ + labelKey: makeStringProp('label'), + /** + * 是否在手指松开时立即触发picker-view的 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false), + /** + * 选中项,如果为多列选择器,则其类型应为数组 + */ + modelValue: { + type: [String, Number, Boolean, Array, Array, Array] as PropType< + string | number | boolean | Array | Array | Array + >, + default: '', + required: true + }, + /** + * 选择器数据,可以为字符串数组,也可以为对象数组,如果为二维数组,则为多列选择器 + */ + columns: makeArrayProp | Array | Array>(), + /** + * 接收 pickerView 实例、选中项、当前修改列的下标、resolve 作为入参,根据选中项和列下标进行判断,通过 pickerView 实例暴露出来的 setColumnData 方法修改其他列的数据源。 + */ + columnChange: Function as PropType +} + +export type PickerViewExpose = { + getSelects: () => Record | Record[] + getValues: () => string | string[] + setColumnData: (columnIndex: number, data: Array>, rowIndex?: number) => void + getColumnsData: () => Record[][] + getColumnData: (columnIndex: number) => Record[] + getColumnIndex: (columnIndex: number) => number + getLabels: () => string[] + getSelectedIndex: () => number[] + resetColumns: (columns: (string | number | string[] | number[] | ColumnItem | ColumnItem[])[]) => void +} + +export type PickerViewProps = ExtractPropTypes + +export type PickerViewInstance = ComponentPublicInstance + +/** + * 格式化传入的列数据 + * 列数据统一格式化为二维数组 + * @param array 列数据 + * @param valueKey + * @param labelKey + * @returns + */ +export function formatArray( + array: Array>, + valueKey: string, + labelKey: string +): ColumnItem[][] { + let tempArray: Array> = isArray(array) ? array : [array] + // 判断数组第一层的数据类型,如果存在多种类型,则抛错 + const firstLevelTypeList = new Set(array.map(getType)) + /** + * 存在三种类型的合法数据 + * 1.数组是一维元素,所有元素都是原始值 + * 2.数组是一维元素,所有元素都是object + * 3.数组是二维元素,二维元素可以是任意内容 + */ + if (firstLevelTypeList.size !== 1 && firstLevelTypeList.has('object')) { + // 原始值和引用类型不用混用 + throw Error('The columns are correct') + } + /** + * 简单处理,如果数组第一项不是数组则认为它是一个一维数组 + * 所以需要把一维的转成二维,这样方便统一处理 + */ + if (!isArray(array[0])) { + tempArray = [tempArray as Array] + } + // 转化为二维数组后需要将每一项包装成ColumnItem + const result: Array> = (tempArray as Array>).map((col) => { + return col.map((row) => { + // 非对象类型直接将值作为label和value + if (!isObj(row)) { + return { + [valueKey]: row, + [labelKey]: row + } + } + /** + * 针对已经是object的,修补成{valueKey,labelKey} + * 如果没有labelKey,用valueKey代替 + * 如果没有valueKey,用labelKey代替 + * valueKey,labelKey都没有,直接抛错 + */ + // eslint-disable-next-line no-prototype-builtins + if (!row.hasOwnProperty(valueKey) && !row.hasOwnProperty(labelKey)) { + // eslint-disable-next-line prettier/prettier + throw Error('Can\'t find valueKey and labelKey in columns') + } + // eslint-disable-next-line no-prototype-builtins + if (!row.hasOwnProperty(labelKey)) { + row[labelKey] = row[valueKey] + } + // eslint-disable-next-line no-prototype-builtins + if (!row.hasOwnProperty(valueKey)) { + row[valueKey] = row[labelKey] + } + return row + }) + }) + + return result +} diff --git a/src/uni_modules/wot-design-uni/components/wd-picker-view/wd-picker-view.vue b/src/uni_modules/wot-design-uni/components/wd-picker-view/wd-picker-view.vue new file mode 100644 index 0000000..a6be803 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-picker-view/wd-picker-view.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-picker/index.scss b/src/uni_modules/wot-design-uni/components/wd-picker/index.scss new file mode 100644 index 0000000..00015d6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-picker/index.scss @@ -0,0 +1,110 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(picker) { + @include e(action) { + @include m(cancel) { + color: $-dark-color; + } + @include when(loading) { + color: $-dark-color3; + } + } + + :deep(.wd-picker__arrow), + :deep(.wd-picker__clear) { + color: $-dark-color; + } + + :deep(.wd-picker__cell--placeholder) { + .wd-cell__value { + color: $-dark-color-gray; + } + } + } +} + +@include b(picker) { + @include edeep(popup) { + border-radius: 16px 16px 0px 0px; + } + + @include edeep(cell) { + @include when(disabled) { + .wd-cell__value { + color: $-input-disabled-color; + cursor: not-allowed; + } + } + @include when(error) { + .wd-cell__value { + color: $-input-error-color; + } + .wd-picker__arrow { + color: $-input-error-color; + } + } + @include when(large) { + .wd-picker__arrow, + .wd-picker__clear { + font-size: $-cell-icon-size-large; + } + } + @include m(placeholder) { + .wd-cell__value { + color: $-input-placeholder-color; + } + } + } + + @include edeep(arrow, clear) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-arrow-color; + line-height: $-cell-line-height; + } + + @include edeep(clear) { + color: $-cell-clear-color; + } + + @include e(wraper) { + padding-bottom: var(--window-bottom); + } + + @include e(toolbar) { + position: relative; + display: flex; + font-size: $-picker-toolbar-fs; + height: $-picker-toolbar-height; + line-height: $-picker-action-height; + justify-content: space-between; + align-items: center; + box-sizing: border-box; + } + + @include e(action) { + display: block; + border: none; + outline: none; + font-size: $-picker-toolbar-fs; + color: $-picker-toolbar-finish-color; + background: transparent; + padding: 24px 15px 14px 15px; + + @include m(cancel) { + color: $-picker-toolbar-cancel-color; + } + + @include when(loading) { + color: $-picker-loading-button-color; + } + } + + @include e(title) { + display: block; + float: 1; + color: $-picker-toolbar-title-color; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-picker/types.ts b/src/uni_modules/wot-design-uni/components/wd-picker/types.ts new file mode 100644 index 0000000..391c851 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-picker/types.ts @@ -0,0 +1,189 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' +import type { ColumnItem, PickerViewColumnChange } from '../wd-picker-view/types' +import type { FormItemRule } from '../wd-form/types' + +export const pickerProps = { + ...baseProps, + /** + * label 外部自定义样式 + */ + customLabelClass: makeStringProp(''), + /** + * value 外部自定义样式 + */ + customValueClass: makeStringProp(''), + /** + * pickerView 外部自定义样式 + */ + customViewClass: makeStringProp(''), + /** + * 选择器左侧文案 + */ + label: String, + /** + * 选择器占位符 + */ + placeholder: String, + /** + * 是否禁用 + */ + disabled: makeBooleanProp(false), + /** + * 是否只读 + */ + readonly: makeBooleanProp(false), + /** + * 加载中 + */ + loading: makeBooleanProp(false), + /** + * 加载中颜色 + */ + loadingColor: makeStringProp('#4D80F0'), + /* popup */ + /** + * 弹出层标题 + */ + title: String, + /** + * 取消按钮文案 + */ + cancelButtonText: String, + /** + * 确认按钮文案 + */ + confirmButtonText: String, + /** + * 是否必填 + */ + required: makeBooleanProp(false), + /** + * 尺寸 + */ + size: String, + /** + * 设置左侧标题宽度 + */ + labelWidth: makeStringProp('33%'), + /** + * 使用默认插槽 + * @deprecated 可以直接使用默认插槽,无需配置此选项 + */ + useDefaultSlot: makeBooleanProp(false), + /** + * 使用标签插槽 + * @deprecated 可以直接使用标签插槽,无需配置此选项 + */ + useLabelSlot: makeBooleanProp(false), + /** + * 错误状态 + */ + error: makeBooleanProp(false), + /** + * 右对齐 + */ + alignRight: makeBooleanProp(false), + /** + * 确定前校验函数,接收 (value, resolve, picker) 参数,通过 resolve 继续执行 picker,resolve 接收1个boolean参数 + */ + beforeConfirm: Function as PropType, + /** + * 点击蒙层关闭 + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 底部安全区域内 + */ + safeAreaInsetBottom: makeBooleanProp(true), + /** + * 文本溢出显示省略号 + */ + ellipsis: makeBooleanProp(false), + /** + * 选项总高度 + */ + columnsHeight: makeNumberProp(217), + /** + * 选项值对应的键名 + */ + valueKey: makeStringProp('value'), + /** + * 选项文本对应的键名 + */ + labelKey: makeStringProp('label'), + /** + * 选中项,如果为多列选择器,则其类型应为数组 + */ + modelValue: { + type: [String, Number, Array] as PropType | Array>, + default: '' + }, + /** + * 选择器数据,可以为字符串数组,也可以为对象数组,如果为二维数组,则为多列选择器 + */ + columns: { + type: Array as PropType>>, + default: () => [] + }, + /** + * 接收 pickerView 实例、选中项、当前修改列的下标、resolve 作为入参,根据选中项和列下标进行判断,通过 pickerView 实例暴露出来的 setColumnData 方法修改其他列的数据源。 + */ + columnChange: Function as PropType, + /** + * 自定义展示文案的格式化函数,返回一个字符串 + */ + displayFormat: Function as PropType, + /** + * 自定义层级 + */ + zIndex: makeNumberProp(15), + /** + * 表单域 model 字段名,在使用表单校验功能的情况下,该属性是必填的 + */ + prop: String, + /** + * 表单验证规则,结合wd-form组件使用 + */ + rules: makeArrayProp(), + /** + * 是否在手指松开时立即触发 change 事件。若不开启则会在滚动动画结束后触发 change 事件,1.2.25版本起提供,仅微信小程序和支付宝小程序支持。 + */ + immediateChange: makeBooleanProp(false), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 显示清空按钮 + */ + clearable: makeBooleanProp(false), + /** + * 必填标记位置,可选值:before、after + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} + +export type PickerProps = ExtractPropTypes + +export type PickerDisplayFormat = (item: ColumnItem | ColumnItem[], vl: { valueKey: string; labelKey: string }) => string + +export type PickerBeforeConfirm = ( + value: string | number | boolean | string[] | number[] | boolean[], + resolve: (isPass: boolean) => void, + picker: any +) => void + +export type PickerExpose = { + // 打开picker弹框 + open: () => void + // 关闭picker弹框 + close: () => void + /** + * 设置加载状态 + * @param loading 加载状态 + */ + setLoading: (loading: boolean) => void +} + +export type PickerInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue b/src/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue new file mode 100644 index 0000000..82b5abe --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-picker/wd-picker.vue @@ -0,0 +1,412 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-popover/index.scss b/src/uni_modules/wot-design-uni/components/wd-popover/index.scss new file mode 100644 index 0000000..6d6e1f7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-popover/index.scss @@ -0,0 +1,116 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(popover) { + + @include e(pos) { + background: rgb(75, 76, 77); + color: $-dark-color; + box-shadow: 0px 2px 10px 0px rgba(75, 76, 77, 0.1); + } + + @include e(menu) { + background: rgb(75, 76, 77); + } + + @include e(inner) { + background-color: rgb(75, 76, 77); + } + + @include e(menu-inner) { + + @include halfPixelBorder("top", 0, $-dark-border-color); + } + + @include squareArrow($-popover-arrow-size, rgb(75, 76, 77), $-popover-z-index - 1, $-popover-arrow-box-shadow); + + } +} + +@include b(popover) { + position: relative; + display: inline-block; + + @include edeep(icon) { + vertical-align: middle; + font-size: 18px; + margin-right: 5px; + } + + @include e(menu-inner) { + position: relative; + padding: $-popover-padding 0; + display: flex; + align-items: center; + + @include halfPixelBorder("top", 0, $-popover-border-color); + + &:first-child::after { + display: none; + } + } + + @include e(menu) { + display: inline-block; + padding: 0 $-popover-padding; + white-space: nowrap; + z-index: $-popover-z-index; + position: relative; + background: $-popover-bg; + border-radius: $-popover-radius; + } + + @include edeep(pos) { + position: absolute; + box-sizing: border-box; + background-clip: padding-box; + text-align: center; + min-height: 36px; + z-index: $-popover-z-index; + line-height: $-popover-line-height; + font-size: $-popover-fs; + border-radius: $-popover-radius; + transition: opacity 0.2s; + background: $-popover-bg; + box-shadow: $-popover-box-shadow; + color: $-popover-color; + } + + // @include edeep(transition) { + // position: relative; + // z-index: $-popover-z-index; + // } + + @include e(hidden) { + left: -100vw; + visibility: hidden; + } + + @include e(container) { + position: relative; + line-height: $-tooltip-line-height; + font-size: $-tooltip-fs; + } + + @include e(inner) { + position: relative; + white-space: nowrap; + padding: $-popover-padding; + line-height: $-popover-line-height; + z-index: $-popover-z-index; + background-color: $-popover-bg; + border-radius: $-popover-radius; + } + + @include edeep(close-icon) { + font-size: 12px; + position: absolute; + right: -8px; + top: -10px; + transform: scale(0.5); + padding: 10px; + } + + @include squareArrow($-popover-arrow-size, $-popover-bg, $-popover-z-index - 1, $-popover-arrow-box-shadow); +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-popover/types.ts b/src/uni_modules/wot-design-uni/components/wd-popover/types.ts new file mode 100644 index 0000000..8faa789 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-popover/types.ts @@ -0,0 +1,69 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export type PlacementType = + | 'top' + | 'top-start' + | 'top-end' + | 'bottom' + | 'bottom-start' + | 'bottom-end' + | 'left' + | 'left-start' + | 'left-end' + | 'right' + | 'right-start' + | 'right-end' + +export type PopoverMode = 'menu' | 'normal' + +export const popoverProps = { + ...baseProps, + customArrow: makeStringProp(''), + customPop: makeStringProp(''), + /** + * 是否显示 popover 箭头 + */ + visibleArrow: makeBooleanProp(true), + /** + * 显示的内容,也可以通过 slot#content 传入 + */ + content: [String, Object] as PropType[]>, + /** + * 指定 popover 的放置位置:top / top-start / top-end / bottom / bottom-start / bottom-end / left / left-start / left-end / right / right-start / right-end + */ + placement: makeStringProp('bottom'), + /** + * 偏移量 + */ + offset: makeNumberProp(0), + /** + * 是否使用内容插槽 + */ + useContentSlot: makeBooleanProp(false), + /** + * 是否禁用 popover + */ + disabled: makeBooleanProp(false), + /** + * 是否显示关闭按钮 + */ + showClose: makeBooleanProp(false), + /** + * 控制 popover 的显示状态 + */ + modelValue: makeBooleanProp(false), + /** + * 当前显示的模式,决定内容的展现形式,可选值:normal(普通模式)/ menu(菜单模式) + */ + mode: makeStringProp('normal') +} + +export type PopoverProps = ExtractPropTypes + +export type PopoverExpose = { + // 打开popover + open: () => void + // 关闭popover + close: () => void +} diff --git a/src/uni_modules/wot-design-uni/components/wd-popover/wd-popover.vue b/src/uni_modules/wot-design-uni/components/wd-popover/wd-popover.vue new file mode 100644 index 0000000..b3d15de --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-popover/wd-popover.vue @@ -0,0 +1,180 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-popup/index.scss b/src/uni_modules/wot-design-uni/components/wd-popup/index.scss new file mode 100644 index 0000000..e23439c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-popup/index.scss @@ -0,0 +1,84 @@ +@import './../common/abstracts/_mixin.scss'; +@import './../common/abstracts/variable.scss'; + +.wot-theme-dark { + @include b(popup-wrapper) { + :deep() { + .wd-popup { + background: $-dark-background2; + } + + .wd-popup__close { + color: $-dark-color; + } + } + } +} + +@include b(popup-wrapper) { + :deep() { + .wd-popup { + position: fixed; + max-height: 100%; + overflow-y: auto; + background: #fff; + } + } +} + + +@include b(popup) { + @include edeep(close) { + position: absolute; + top: 10px; + right: 10px; + color: $-popup-close-color; + font-size: $-popup-close-size; + transform: rotate(-45deg); + } + + @include mdeep(center) { + left: 50%; + top: 50%; + transform: translate3d(-50%, -50%, 0); + transform-origin: 0% 0%; + + &.wd-zoom-in-enter, + &.wd-zoom-in-leave-to { + transform: scale(0.8) translate3d(-50%, -50%, 0) !important; + } + + @include when(deep) { + + &.wd-zoom-in-enter, + &.wd-zoom-in-leave-to { + transform: scale(0.1) translate3d(-50%, -50%, 0) !important; + } + } + + } + + @include mdeep(left) { + top: 0; + bottom: 0; + left: 0; + } + + @include mdeep(right) { + top: 0; + right: 0; + bottom: 0; + } + + @include mdeep(top) { + top: 0; + left: 0; + right: 0; + } + + @include mdeep(bottom) { + right: 0; + bottom: 0; + left: 0; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-popup/types.ts b/src/uni_modules/wot-design-uni/components/wd-popup/types.ts new file mode 100644 index 0000000..ee11904 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-popup/types.ts @@ -0,0 +1,104 @@ +/* + * @Author: weisheng + * @Date: 2024-03-18 11:22:03 + * @LastEditTime: 2025-07-06 21:00:04 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-popup/types.ts + * 记得注释 + */ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' +import type { TransitionName } from '../wd-transition/types' + +export type PopupType = 'center' | 'top' | 'right' | 'bottom' | 'left' + +export const popupProps = { + ...baseProps, + /** + * 动画类型,参见 wd-transition 组件的name + * 类型:string + * 可选值:fade / fade-up / fade-down / fade-left / fade-right / slide-up / slide-down / slide-left / slide-right / zoom-in + */ + transition: String as PropType, + /** + * 关闭按钮 + * 类型:boolean + * 默认值:false + */ + closable: makeBooleanProp(false), + /** + * 弹出框的位置 + * 类型:string + * 默认值:center + * 可选值:center / top / right / bottom / left + */ + position: makeStringProp('center'), + /** + * 点击遮罩是否关闭 + * 类型:boolean + * 默认值:true + */ + closeOnClickModal: makeBooleanProp(true), + /** + * 动画持续时间 + * 类型:number | boolean + * 默认值:300 + */ + duration: { + type: [Number, Boolean], + default: 300 + }, + /** + * 是否显示遮罩 + * 类型:boolean + * 默认值:true + */ + modal: makeBooleanProp(true), + /** + * 设置层级 + * 类型:number + * 默认值:10 + */ + zIndex: makeNumberProp(10), + /** + * 是否当关闭时将弹出层隐藏(display: none) + * 类型:boolean + * 默认值:true + */ + hideWhenClose: makeBooleanProp(true), + /** + * 遮罩样式 + * 类型:string + * 默认值:'' + */ + modalStyle: makeStringProp(''), + /** + * 弹出面板是否设置底部安全距离(iphone X 类型的机型) + * 类型:boolean + * 默认值:false + */ + safeAreaInsetBottom: makeBooleanProp(false), + /** + * 弹出层是否显示 + */ + modelValue: makeBooleanProp(false), + /** + * 弹层内容懒渲染,触发展示时才渲染内容 + * 类型:boolean + * 默认值:true + */ + lazyRender: makeBooleanProp(true), + /** + * 是否锁定滚动 + * 类型:boolean + * 默认值:true + */ + lockScroll: makeBooleanProp(true), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + * 类型:boolean + * 默认值:false + */ + rootPortal: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-popup/wd-popup.vue b/src/uni_modules/wot-design-uni/components/wd-popup/wd-popup.vue new file mode 100644 index 0000000..8ff8917 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-popup/wd-popup.vue @@ -0,0 +1,169 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-progress/index.scss b/src/uni_modules/wot-design-uni/components/wd-progress/index.scss new file mode 100644 index 0000000..fc5cd32 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-progress/index.scss @@ -0,0 +1,68 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(progress) { + @include e(label) { + color: $-dark-color3; + } + } +} + +@include b(progress) { + width: 100%; + height: $-progress-height; + display: flex; + align-items: center; + padding: $-progress-padding; + + @include e(outer) { + display: block; + position: relative; + flex: 1; + height: $-progress-height; + border-radius: calc($-progress-height / 2); + background: $-progress-bg; + } + @include e(inner) { + display: block; + position: absolute; + top: 0; + left: 0; + height: 100%; + border-radius: calc($-progress-height / 2); + background: $-progress-color; + transition-property: width; + transition-timing-function: linear; + font-size: $-progress-icon-fs; + + @include when(danger) { + background: $-progress-danger-color; + } + @include when(success) { + background: $-progress-success-color; + } + @include when(warning) { + background: $-progress-warning-color; + } + } + @include edeep(label) { + width: 30px; + margin-left: 9px; + color: $-progress-label-color; + font-size: $-progress-label-fs; + } + @include edeep(icon) { + font-size: $-progress-icon-fs; + + @include when(danger) { + color: $-progress-danger-color; + } + @include when(success) { + color: $-progress-success-color; + } + @include when(warning) { + color: $-progress-warning-color; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-progress/types.ts b/src/uni_modules/wot-design-uni/components/wd-progress/types.ts new file mode 100644 index 0000000..0ae22c7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-progress/types.ts @@ -0,0 +1,44 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 20:40:34 + * @LastEditTime: 2024-11-30 00:01:23 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-progress/types.ts + * 记得注释 + */ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp } from '../common/props' + +export type ProgressStatus = 'success' | 'danger' | 'warning' // 状态类型 + +export type ProgressColor = { + color: string // 颜色 + percentage: number // 百分比 +} + +export const progressProps = { + ...baseProps, + /** + * 进度数值,最大值100 + */ + percentage: makeNumberProp(0), + /** + * 是否隐藏进度条上的文字,默认值为false + */ + hideText: makeBooleanProp(false), + /** + * 进度条颜色 + */ + color: { + type: [String, Array] as PropType + }, + /** + * 进度增加1%所需毫秒数 + */ + duration: makeNumberProp(30), + /** + * 进度条状态 + */ + status: String as PropType +} diff --git a/src/uni_modules/wot-design-uni/components/wd-progress/wd-progress.vue b/src/uni_modules/wot-design-uni/components/wd-progress/wd-progress.vue new file mode 100644 index 0000000..7e4df51 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-progress/wd-progress.vue @@ -0,0 +1,197 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-radio-group/index.scss b/src/uni_modules/wot-design-uni/components/wd-radio-group/index.scss new file mode 100644 index 0000000..b21629c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-radio-group/index.scss @@ -0,0 +1,23 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(radio-group) { + background-color: $-dark-background2; + } +} + +@include b(radio-group) { + background-color: $-radio-bg; + font-size: 0; + + // 上下20px 左右15px 内部间隔12px + @include when(button) { + width: 100%; + height: 100%; + padding: 8px 3px 20px 15px; + box-sizing: border-box; + overflow: hidden; + height: auto; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-radio-group/types.ts b/src/uni_modules/wot-design-uni/components/wd-radio-group/types.ts new file mode 100644 index 0000000..83d5cd7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-radio-group/types.ts @@ -0,0 +1,39 @@ +import { type InjectionKey } from 'vue' +import type { RadioShape, RadioIconPlacement } from '../wd-radio/types' +import { baseProps, makeBooleanProp, makeStringProp } from '../common/props' + +export type RadioGroupProvide = { + props: { + modelValue?: string | number | boolean + shape?: RadioShape + checkedColor?: string + disabled?: boolean + cell?: boolean + size?: string + inline?: boolean + iconPlacement?: RadioIconPlacement + } + updateValue: (value: string | number | boolean) => void +} + +export const RADIO_GROUP_KEY: InjectionKey = Symbol('wd-radio-group') + +export const radioGroupProps = { + ...baseProps, + /** 会自动选中value对应的单选框 */ + modelValue: [String, Number, Boolean], + /** 单选框形状,可选值为 dot / button / check,默认为 check */ + shape: makeStringProp('check'), + /** 选中的颜色,默认为 #4D80F0 */ + checkedColor: String, + /** 是否禁用,默认为 false */ + disabled: makeBooleanProp(false), + /** 表单模式,默认为 false */ + cell: makeBooleanProp(false), + /** 设置大小,默认为空 */ + size: makeStringProp(''), + /** 同行展示,默认为 false */ + inline: makeBooleanProp(false), + /** 图标位置,默认为 left */ + iconPlacement: makeStringProp('auto') +} diff --git a/src/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue b/src/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue new file mode 100644 index 0000000..321613b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-radio-group/wd-radio-group.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-radio/index.scss b/src/uni_modules/wot-design-uni/components/wd-radio/index.scss new file mode 100644 index 0000000..e029624 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-radio/index.scss @@ -0,0 +1,301 @@ +@import "./../common/abstracts/_mixin.scss"; +@import "./../common/abstracts/variable.scss"; + +.wot-theme-dark { + @include b(radio) { + @include e(shape) { + background: transparent; + } + @include e(label) { + color: $-dark-color; + } + @include when(button) { + .wd-radio__label { + background-color: $-dark-background; + } + @include when(checked) { + .wd-radio__label { + background-color: $-dark-background2; + } + } + } + + @include when(disabled) { + .wd-radio__label { + color: $-dark-color-gray; + } + @include when(checked) { + .wd-radio__label { + color: $-dark-color-gray; + } + } + + @include when(button) { + .wd-radio__label { + border-color: #c8c9cc; + background: #3a3a3c; + color: $-dark-color-gray; + } + @include when(checked) { + .wd-radio__label { + border-color: #c8c9cc; + background: #3a3a3c; + color: #c8c9cc; + } + } + } + + @include when(dot) { + .wd-radio__shape { + border-color: #c8c9cc; + background: #3a3a3c; + &::before { + background-color: #c8c9cc; + } + } + } + } + } +} + +@include b(radio) { + display: flex; + margin-top: $-radio-margin; + justify-content: space-between; + align-items: center; + text-align: center; + line-height: 1.2; + + @include when(first) { + margin-top: 0; + } + @include e(shape) { + position: relative; + display: inline-block; + width: $-radio-size; + height: $-radio-size; + font-size: $-radio-size; + color: transparent; + display: none; + vertical-align: middle; + transition: background 0.2s; + } + @include e(input) { + position: absolute; + width: 0; + height: 0; + margin: 0; + opacity: 0; + } + @include e(label) { + display: inline-block; + vertical-align: top; + font-size: $-radio-label-fs; + color: $-radio-label-color; + line-height: 20px; + word-break: break-all; + } + @include when(checked) { + .wd-radio__shape { + color: $-radio-checked-color; + border-color: currentColor; + display: inline-block; + } + .wd-radio__check { + color: $-radio-checked-color; + opacity: 1; + } + } + + @include when(dot) { + .wd-radio__shape { + border: 2px solid $-radio-dot-border-color; + border-radius: 50%; + position: relative; + display: inline-block; + box-sizing: border-box; + transition: none; + + &::before { + content: ""; + position: absolute; + width: $-radio-dot-size; + height: $-radio-dot-size; + left: calc(50% - #{$-radio-dot-size / 2}); + top: calc(50% - #{$-radio-dot-size / 2}); + border-radius: 50%; + background-color: #fff; + transform: scale(0); + transition: transform .2s ease-in; + } + } + @include when(checked) { + .wd-radio__shape { + background-color: currentColor; + border-color: currentColor; + // background-color: $-radio-dot-checked-bg; + // border-color: $-radio-dot-checked-border-color; + &::before { + transform: scale(1); + } + } + } + } + + @include when(button) { + display: inline-block; + margin-top: 0; + margin-right: 10px; + + .wd-radio__shape { + display: none; + } + .wd-radio__label { + height: $-radio-button-height; + min-width: $-radio-button-min-width; + max-width: $-radio-button-max-width; + padding: 5px 15px; + margin-right: 0; + border-radius: $-radio-button-radius; + background-color: $-radio-button-bg; + font-size: $-radio-button-fs; + box-sizing: border-box; + border: 1px solid $-radio-button-border; + transition: all 0.2s; + @include lineEllipsis; + } + @include when(checked) { + .wd-radio__label { + color: $-radio-checked-color; + border-color: currentColor; + background-color: $-radio-bg; + } + } + } + + &.icon-placement-left { + flex-direction: row-reverse; + } + + @include when(inline) { + display: inline-block; + margin-top: 0; + margin-right: $-radio-margin; + + @include when(first) { + margin-left: 0; + } + .wd-radio__shape { + display: block; + margin-right: 4px; + float: left; + &::after { + content: ""; + display: table; + clear: both; + } + } + + @include when(dot) { + .wd-radio__shape { + margin-top: 2px; + } + @include when(large) { + .wd-radio__shape { + margin-top: 0; + } + } + } + + &.icon-placement-right { + .wd-radio__shape { + margin-right: 0; + margin-left: 4px; + float: right; + } + } + } + + @include when(disabled) { + .wd-radio__label { + color: $-radio-disabled-label-color; + } + @include when(checked) { + .wd-radio__shape { + color: $-radio-disabled-label-color; + } + .wd-radio__check { + color: $-radio-disabled-label-color; + } + .wd-radio__label { + color: $-radio-disabled-label-color; + } + } + + @include when(button) { + .wd-radio__label { + border-color: $-radio-disabled-color; + background: $-radio-disabled-color; + border-color: $-radio-button-border; + color: $-radio-disabled-label-color; + } + @include when(checked) { + .wd-radio__label { + border-color: $-radio-button-disabled-border; + background: $-radio-disabled-color; + } + } + } + + @include when(dot) { + .wd-radio__shape { + background: $-radio-dot-disabled-bg; + border-color: $-radio-dot-disabled-border; + } + } + } + + // 以下内容用于解决父子组件样式隔离的问题 —— START + @include when(cell-radio) { + padding: 13px 15px; + margin: 0; + + @include when(large) { + padding: 14px 15px; + } + } + + @include when(button-radio) { + display: inline-flex; + width: 33.3333%; + padding: 12px 12px 0px 0px; + box-sizing: border-box; + + .wd-radio__label { + width: 100%; + max-width: inherit; + } + } + @include when(large) { + .wd-radio__shape { + width: $-radio-large-size; + height: $-radio-large-size; + font-size: $-radio-large-size; + } + .wd-radio__label { + font-size: $-radio-large-label-fs; + } + + @include when(dot) { + .wd-radio__shape { + &::before { + width: $-radio-dot-large-size; + height: $-radio-dot-large-size; + left: calc(50% - #{$-radio-dot-large-size / 2}); + top: calc(50% - #{$-radio-dot-large-size / 2}); + } + } + } + } + // 以下内容用于解决父子组件样式隔离的问题 —— END +} diff --git a/src/uni_modules/wot-design-uni/components/wd-radio/types.ts b/src/uni_modules/wot-design-uni/components/wd-radio/types.ts new file mode 100644 index 0000000..d0f03cc --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-radio/types.ts @@ -0,0 +1,51 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 20:40:34 + * @LastEditTime: 2024-12-07 18:52:34 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-radio/types.ts + * 记得注释 + */ +import type { PropType } from 'vue' +import { baseProps, makeRequiredProp, makeStringProp } from '../common/props' + +export type RadioShape = 'dot' | 'button' | 'check' + +export type RadioIconPlacement = 'left' | 'right' | 'auto' + +export const radioProps = { + ...baseProps, + /** 选中时的值 */ + value: makeRequiredProp([String, Number, Boolean]), + /** 单选框的形状 */ + shape: String as PropType, + /** 选中的颜色 */ + checkedColor: String, + /** 禁用 */ + disabled: { + type: [Boolean, null] as PropType, + default: null + }, + /** 单元格 */ + cell: { + type: [Boolean, null] as PropType, + default: null + }, + /** 大小 */ + size: String, + /** 内联 */ + inline: { + type: [Boolean, null] as PropType, + default: null + }, + /** 最大宽度 */ + maxWidth: String, + /** + * 图标位置 + * 可选值: 'left' | 'right' | 'auto' + */ + iconPlacement: { + type: String as PropType + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue b/src/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue new file mode 100644 index 0000000..14cecdf --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-radio/wd-radio.vue @@ -0,0 +1,118 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-rate/index.scss b/src/uni_modules/wot-design-uni/components/wd-rate/index.scss new file mode 100644 index 0000000..12b71b1 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-rate/index.scss @@ -0,0 +1,25 @@ +@import './../common/abstracts/_mixin.scss'; +@import './../common/abstracts/variable.scss'; + +@include b(rate) { + display: inline-block; + vertical-align: middle; + line-height: 1; + + @include e(item) { + position: relative; + display: inline-block; + touch-action: none; // 禁用默认触摸行为 + } + @include edeep(item-star) { + -webkit-background-clip: text !important; + color: transparent; + } + @include e(item-half) { + position: absolute; + left: 0; + top: 0; + overflow: hidden; + width: 50%; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-rate/types.ts b/src/uni_modules/wot-design-uni/components/wd-rate/types.ts new file mode 100644 index 0000000..f890184 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-rate/types.ts @@ -0,0 +1,103 @@ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export const rateProps = { + ...baseProps, + + /** + * 评分最大值 + * 类型: number + * 默认值: 5 + */ + num: makeNumberProp(5), + + /** + * 当前分数,使用v-model进行双向绑定 + * 类型: string | number | null + * 默认值: null + */ + modelValue: { + type: [String, Number, null] as PropType, + default: null + }, + + /** + * 是否只读 + * 类型: boolean + * 默认值: false + */ + readonly: makeBooleanProp(false), + + /** + * 图标大小 + * 类型: string + * 默认值: '16px' + */ + size: makeStringProp('16px'), + + /** + * 图标间距 + * 类型: string + * 默认值: '4px' + */ + space: makeStringProp('4px'), + + /** + * 未选中的图标颜色 + * 类型: string + * 默认值: '#E8E8E8' + */ + color: makeStringProp('#E8E8E8'), + + /** + * 选中的图标颜色,支持传颜色数组(用于分段颜色) + * 类型: string | Array + * 默认值: 'linear-gradient(180deg, rgba(255,238,0,1) 0%,rgba(250,176,21,1) 100%)' + */ + activeColor: { + type: [String, Array] as PropType>, + default: 'linear-gradient(180deg, rgba(255,238,0,1) 0%,rgba(250,176,21,1) 100%)' + }, + + /** + * 未选中的图标类名 + * 类型: string + * 默认值: 'star-on' + */ + icon: makeStringProp('star-on'), + + /** + * 选中的图标类名 + * 类型: string + * 默认值: 'star-on' + */ + activeIcon: makeStringProp('star-on'), + + /** + * 是否禁用 + * 类型: boolean + * 默认值: false + */ + disabled: makeBooleanProp(false), + + /** + * 禁用的图标颜色 + * 类型: string + * 默认值: 'linear-gradient(315deg, rgba(177,177,177,1) 0%,rgba(199,199,199,1) 100%)' + */ + disabledColor: makeStringProp('linear-gradient(315deg, rgba(177,177,177,1) 0%,rgba(199,199,199,1) 100%)'), + + /** + * 是否允许半选 + * 类型: boolean + * 默认值: false + */ + allowHalf: makeBooleanProp(false), + + /** + * 当 clearable 属性设置为 true,再次点击相同的值时,可以将值重置为 0。 + * 类型: boolean + * 默认值: false + */ + clearable: makeBooleanProp(false) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-rate/wd-rate.vue b/src/uni_modules/wot-design-uni/components/wd-rate/wd-rate.vue new file mode 100644 index 0000000..45d8171 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-rate/wd-rate.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-resize/index.scss b/src/uni_modules/wot-design-uni/components/wd-resize/index.scss new file mode 100644 index 0000000..cb0a039 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-resize/index.scss @@ -0,0 +1,27 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(resize) { + + @include e(container) { + position: absolute; + min-width: 1px; + min-height: 1px; + } + + @include e(wrapper) { + position: absolute; + top: 0; + bottom: 0; + left: 0; + right: 0; + z-index: -9999; + overflow: hidden; + visibility: hidden; + + @include m(placeholder) { + transition: 0s; + animation: none; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-resize/types.ts b/src/uni_modules/wot-design-uni/components/wd-resize/types.ts new file mode 100644 index 0000000..094de17 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-resize/types.ts @@ -0,0 +1,6 @@ +import { baseProps, makeStringProp } from '../common/props' + +export const resizeProps = { + ...baseProps, + customContainerClass: makeStringProp('') +} diff --git a/src/uni_modules/wot-design-uni/components/wd-resize/wd-resize.vue b/src/uni_modules/wot-design-uni/components/wd-resize/wd-resize.vue new file mode 100644 index 0000000..2b65423 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-resize/wd-resize.vue @@ -0,0 +1,144 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-root-portal/wd-root-portal.vue b/src/uni_modules/wot-design-uni/components/wd-root-portal/wd-root-portal.vue new file mode 100644 index 0000000..a038e69 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-root-portal/wd-root-portal.vue @@ -0,0 +1,50 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-row/index.scss b/src/uni_modules/wot-design-uni/components/wd-row/index.scss new file mode 100644 index 0000000..26ffdbd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-row/index.scss @@ -0,0 +1,10 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(row) { + &::after { + display: table; + clear: both; + content: ""; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-row/types.ts b/src/uni_modules/wot-design-uni/components/wd-row/types.ts new file mode 100644 index 0000000..f03f970 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-row/types.ts @@ -0,0 +1,16 @@ +import { type InjectionKey } from 'vue' +import { baseProps, makeNumberProp } from '../common/props' + +export type RowProvide = { + props: { gutter?: number } +} + +export const ROW_KEY: InjectionKey = Symbol('wd-row') + +export const rowProps = { + ...baseProps, + /** + * 列元素之间的间距(单位为px) + */ + gutter: makeNumberProp(0) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-row/wd-row.vue b/src/uni_modules/wot-design-uni/components/wd-row/wd-row.vue new file mode 100644 index 0000000..7f74b90 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-row/wd-row.vue @@ -0,0 +1,42 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-search/index.scss b/src/uni_modules/wot-design-uni/components/wd-search/index.scss new file mode 100644 index 0000000..c57330c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-search/index.scss @@ -0,0 +1,148 @@ +@import '../common/abstracts/_mixin.scss'; +@import '../common/abstracts/variable.scss'; + +.wot-theme-dark { + @include b(search) { + background: $-dark-background4; + + @include e(block) { + background-color: $-dark-background; + } + + @include e(input) { + color: $-dark-color; + } + + @include e(cover) { + background-color: $-dark-background; + } + + @include e(search-icon) { + color: $-dark-color; + } + @include e(search-left-icon) { + color: $-dark-color; + } + @include e(clear) { + color: $-dark-color; + } + @include e(cancel) { + color: $-dark-color; + } + + @include when(light) { + background: $-dark-background4; + + .wd-search__block { + background: $-dark-background7; + } + + .wd-search__cover { + background: $-dark-background7; + } + } + } +} + +@include b(search) { + display: flex; + padding: $-search-padding; + align-items: center; + background: #fff; + + @include e(block) { + flex: 1; + background-color: $-search-input-bg; + border-radius: $-search-input-radius; + display: flex; + flex-direction: row; + align-items: center; + position: relative; + } + @include e(field) { + flex: 1; + display: flex; + flex-direction: row; + align-items: center; + position: relative; + } + @include e(input) { + flex: 1; + height: $-search-input-height; + box-sizing: border-box; + padding: $-search-input-padding; + border: none; + background: transparent; + font-size: $-search-input-fs; + -webkit-appearance: none; + outline: none; + color: $-search-input-color; + z-index: 0; + + @include lineEllipsis; + + &::-webkit-search-cancel-button { + -webkit-appearance: none; + } + } + @include e(cover) { + width: 100%; + height: $-search-input-height; + background-color: $-search-input-bg; + line-height: $-search-input-height; + font-size: $-search-input-fs; + border-radius: $-search-input-radius; + flex-direction: row; + justify-content: center; + align-items: center; + } + @include edeep(search-icon) { + margin-right: 8px; + color: $-search-icon-color; + font-size: $-search-icon-size; + } + @include edeep(search-left-icon) { + position: absolute; + font-size: $-search-icon-size; + top: 50%; + left: 16px; + transform: translateY(-50%); + color: $-search-icon-color; + } + @include e(placeholder-txt) { + color: $-search-placeholder-color; + font-size: $-search-input-fs; + } + @include edeep(clear) { + position: absolute; + right: 0; + padding: 6px 9px 6px 7px; + color: $-search-cancel-color; + } + @include edeep(clear-icon) { + vertical-align: middle; + font-size: $-search-clear-icon-size; + } + @include e(cancel) { + padding: $-search-cancel-padding; + height: $-search-input-height; + line-height: $-search-input-height; + font-size: $-search-cancel-fs; + color: $-search-cancel-color; + -webkit-tap-highlight-color: transparent; + } + @include when(light) { + background: $-search-light-bg; + + .wd-search__block { + background: #fff; + } + + .wd-search__cover { + background: #fff; + } + } + @include when(without-cancel) { + padding-right: $-search-side-padding; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-search/types.ts b/src/uni_modules/wot-design-uni/components/wd-search/types.ts new file mode 100644 index 0000000..dc9a0cd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-search/types.ts @@ -0,0 +1,102 @@ +/* + * @Author: weisheng + * @Date: 2024-09-01 15:42:04 + * @LastEditTime: 2024-09-21 15:36:09 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-search\types.ts + * 记得注释 + */ +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' + +export const searchProps = { + ...baseProps, + customInputClass: makeStringProp(''), + /** + * 输入框内容,双向绑定 + * 类型: string + * 默认值: '' + */ + modelValue: makeStringProp(''), + + /** + * 是否使用输入框右侧插槽 + * 类型: boolean + * 默认值: false + * @deprecated 该属性已废弃,将在下一个minor版本被移除,直接使用插槽即可 + */ + useSuffixSlot: makeBooleanProp(false), + + /** + * 搜索框占位文本 + * 类型: string + */ + placeholder: String, + + /** + * 搜索框右侧文本 + * 类型: string + */ + cancelTxt: String, + + /** + * 搜索框亮色(白色) + * 类型: boolean + * 默认值: false + */ + light: makeBooleanProp(false), + + /** + * 是否隐藏右侧文本 + * 类型: boolean + * 默认值: false + */ + hideCancel: makeBooleanProp(false), + + /** + * 是否禁用搜索框 + * 类型: boolean + * 默认值: false + */ + disabled: makeBooleanProp(false), + + /** + * 原生属性,设置最大长度。-1 表示无限制 + * 类型: string / number + * 默认值: -1 + */ + maxlength: makeNumberProp(-1), + + /** + * placeholder 居左边 + * 类型: boolean + * 默认值: false + */ + placeholderLeft: makeBooleanProp(false), + + /** + * 是否自动聚焦 + * 类型: boolean + * 默认值: false + * 最低版本: 0.1.63 + */ + focus: makeBooleanProp(false), + + /** + * 是否在点击清除按钮时聚焦输入框 + * 类型: boolean + * 默认值: false + * 最低版本: 0.1.63 + */ + focusWhenClear: makeBooleanProp(false), + + /** + * 原生属性,指定 placeholder 的样式,目前仅支持color,font-size和font-weight + */ + placeholderStyle: String, + + /** + * 原生属性,指定 placeholder 的样式类 + */ + placeholderClass: makeStringProp('') +} diff --git a/src/uni_modules/wot-design-uni/components/wd-search/wd-search.vue b/src/uni_modules/wot-design-uni/components/wd-search/wd-search.vue new file mode 100644 index 0000000..b15ee90 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-search/wd-search.vue @@ -0,0 +1,187 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-segmented/index.scss b/src/uni_modules/wot-design-uni/components/wd-segmented/index.scss new file mode 100644 index 0000000..f79061e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-segmented/index.scss @@ -0,0 +1,101 @@ +@import './../common/abstracts/_mixin.scss'; +@import './../common/abstracts/variable.scss'; + +.wot-theme-dark { + @include b(segmented) { + background: $-dark-background2; + + @include e(item) { + color: $-dark-color3; + + @include when(active) { + color: $-dark-color; + + @include when(disabled) { + color: $-dark-color3; + } + } + + @include when(disabled) { + color: $-dark-color-gray; + } + + @include m(active) { + background-color: $-color-theme; + + @include when(disabled) { + opacity: 0.6; + } + } + } + + } +} + +@include b(segmented) { + position: relative; + display: flex; + align-items: stretch; + justify-items: flex-start; + width: 100%; + background-color: $-segmented-item-bg-color; + padding: $-segmented-padding; + border-radius: 4px; + box-sizing: border-box; + + + @include e(item) { + position: relative; + text-align: center; + border-radius: 4px; + flex: 1; + min-width: 0; + z-index: 1; + min-height: 28px; + line-height: 28px; + padding: 0 12px; + font-size: 14px; + color: $-segmented-item-color; + font-weight: 400; + + @include when(active) { + font-weight: 550; + } + + @include when(large) { + min-height: 32px; + line-height: 32px; + padding: 0 12px; + font-size: 16px; + } + + + @include when(small) { + min-height: 24px; + line-height: 24px; + padding: 0 7px; + font-size: 12px; + } + + @include when(disabled) { + cursor: no-drop; + color: $-segmented-item-disabled-color; + } + + @include m(active) { + background-color: $-segmented-item-acitve-bg; + border-radius: 4px; + height: calc(100% - $-segmented-padding * 2); + @include when(disabled) { + opacity: 0.8; + } + } + } + + @include e(item-label) { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-segmented/types.ts b/src/uni_modules/wot-design-uni/components/wd-segmented/types.ts new file mode 100644 index 0000000..99c3a39 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-segmented/types.ts @@ -0,0 +1,80 @@ +/* + * @Author: weisheng + * @Date: 2024-03-18 11:22:03 + * @LastEditTime: 2024-11-24 23:04:55 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-segmented/types.ts + * 记得注释 + */ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeRequiredProp, makeStringProp } from '../common/props' + +export type SegmentedType = 'large' | 'middle' | 'small' + +export interface SegmentedOption { + value: string | number // 选中值 + disabled?: boolean // 是否禁用 + payload?: any // 更多数据 +} + +export const segmentedProps = { + ...baseProps, + + /** + * 当前选中的值 + * 类型: string | number + * 最低版本: 0.1.23 + */ + value: makeRequiredProp([String, Number]), + + /** + * 是否禁用分段器 + * 类型: boolean + * 默认值: false + * 最低版本: 0.1.23 + */ + disabled: makeBooleanProp(false), + + /** + * 控件尺寸 + * 类型: string + * 可选值: 'large' | 'middle' | 'small' + * 默认值: 'middle' + * 最低版本: 0.1.23 + */ + size: makeStringProp('middle'), + + /** + * 数据集合 + * 类型: string[] | number[] | SegmentedOption[] + * 必需: 是 + * 默认值: [] + * 最低版本: 0.1.23 + */ + options: { + type: Array as PropType, + required: true, + default: () => [] + }, + + /** + * 切换选项时是否振动 + * 类型: boolean + * 默认值: false + * 最低版本: 0.1.23 + */ + vibrateShort: makeBooleanProp(false) +} + +export type SegmentedExpose = { + /** + * 更新滑块偏移量 + * @param animation 是否开启动画,默认开启 + */ + updateActiveStyle: (animation?: boolean) => void +} + +export type SegmentedProps = ExtractPropTypes + +export type SegmentedInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-segmented/wd-segmented.vue b/src/uni_modules/wot-design-uni/components/wd-segmented/wd-segmented.vue new file mode 100644 index 0000000..e836658 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-segmented/wd-segmented.vue @@ -0,0 +1,143 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-select-picker/index.scss b/src/uni_modules/wot-design-uni/components/wd-select-picker/index.scss new file mode 100644 index 0000000..25d94da --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-select-picker/index.scss @@ -0,0 +1,102 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(select-picker) { + :deep(.wd-select-picker__arrow), + :deep(.wd-select-picker__close), + :deep(.wd-select-picker__clear) { + color: $-dark-color; + } + + :deep(.wd-select-picker__cell--placeholder) { + .wd-cell__value { + color: $-dark-color-gray; + } + } + } +} + +@include b(select-picker) { + @include edeep(cell) { + @include when(disabled) { + .wd-cell__value { + color: $-input-disabled-color; + cursor: not-allowed; + } + } + @include when(error) { + .wd-cell__value { + color: $-input-error-color; + } + .wd-select-picker__arrow { + color: $-input-error-color; + } + } + + @include m(placeholder) { + .wd-cell__value { + color: $-input-placeholder-color; + } + } + + @include when(large) { + .wd-select-picker__arrow, + .wd-select-picker__clear { + font-size: $-cell-icon-size-large; + } + } + } + + @include edeep(arrow, clear) { + display: block; + font-size: $-cell-icon-size; + color: $-cell-arrow-color; + line-height: $-cell-line-height; + } + + @include edeep(clear) { + color: $-cell-clear-color; + } + + @include e(loading) { + position: absolute; + display: flex; + top: 0; + right: 0; + bottom: 0; + left: 0; + align-items: center; + justify-content: center; + z-index: 3; + background: $-picker-loading-bg; + } + + @include edeep(header) { + height: 72px; + line-height: 72px; + } + @include e(wrapper) { + padding: 0 10px; + position: relative; + max-height: 356px; + box-sizing: border-box; + overflow: auto; + + @include when(filterable) { + height: 314px; + max-height: 314px; + } + + @include when(loading) { + overflow: hidden; + } + } + @include e(text-active) { + color: $-color-theme; + } + + @include e(footer) { + padding: 24px 15px; + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-select-picker/types.ts b/src/uni_modules/wot-design-uni/components/wd-select-picker/types.ts new file mode 100644 index 0000000..b41f11a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-select-picker/types.ts @@ -0,0 +1,123 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeRequiredProp, makeStringProp } from '../common/props' +import type { FormItemRule } from '../wd-form/types' + +export type SelectPickerType = 'checkbox' | 'radio' + +export const selectPickerProps = { + ...baseProps, + /** 选择器左侧文案 */ + label: String, + /** 设置左侧标题宽度 */ + labelWidth: makeStringProp('33%'), + /** 禁用 */ + disabled: makeBooleanProp(false), + /** 只读 */ + readonly: Boolean, + /** 选择器占位符 */ + placeholder: String, + /** 弹出层标题 */ + title: String, + /** 选择器的值靠右展示 */ + alignRight: makeBooleanProp(false), + /** 是否为错误状态,错误状态时右侧内容为红色 */ + error: makeBooleanProp(false), + /** 必填样式 */ + required: makeBooleanProp(false), + /** + * 使用 label 插槽时设置该选项 + * @deprecated 可以直接使用标签插槽,无需配置此选项 + */ + useLabelSlot: makeBooleanProp(false), + /** + * 使用默认插槽时设置该选项 + * @deprecated 可以直接使用默认插槽,无需配置此选项 + */ + useDefaultSlot: makeBooleanProp(false), + /** 设置选择器大小 */ + size: String, + /** + * 是否垂直居中 + */ + center: makeBooleanProp(false), + /** 选中的颜色(单/复选框) */ + checkedColor: String, + /** 最小选中的数量(仅在复选框类型下生效,`type`类型为`checkbox`) */ + min: makeNumberProp(0), + /** 最大选中的数量,0 为无限数量,默认为 0(仅在复选框类型下生效,`type`类型为`checkbox`) */ + max: makeNumberProp(0), + /** 设置 picker 内部的选项组尺寸大小 (单/复选框) */ + selectSize: String, + /** 加载中 */ + loading: makeBooleanProp(false), + /** 加载的颜色,只能使用十六进制的色值写法,且不能使用缩写 */ + loadingColor: makeStringProp('#4D80F0'), + /** 点击遮罩是否关闭 */ + closeOnClickModal: makeBooleanProp(true), + /** 选中项,`type`类型为`checkbox`时,类型为 array;`type`为`radio` 时 ,类型为 number / boolean / string */ + modelValue: makeRequiredProp([String, Number, Boolean, Array] as PropType), + /** 选择器数据,一维数组 */ + columns: makeArrayProp>(), + /** 单复选选择器类型 */ + type: makeStringProp('checkbox'), + /** 选项对象中,value 对应的 key */ + valueKey: makeStringProp('value'), + /** 选项对象中,展示的文本对应的 key */ + labelKey: makeStringProp('label'), + /** 确认按钮文案 */ + confirmButtonText: String, + /** 自定义展示文案的格式化函数,返回一个字符串 */ + displayFormat: Function as PropType, + /** 确定前校验函数,接收 (value, resolve) 参数,通过 resolve 继续执行 picker,resolve 接收 1 个 boolean 参数 */ + beforeConfirm: Function as PropType, + /** 弹窗层级 */ + zIndex: makeNumberProp(15), + /** 弹出面板是否设置底部安全距离(iphone X 类型的机型) */ + safeAreaInsetBottom: makeBooleanProp(true), + /** 可搜索(目前只支持本地搜索) */ + filterable: makeBooleanProp(false), + /** 搜索框占位符 */ + filterPlaceholder: String, + /** 是否超出隐藏 */ + ellipsis: makeBooleanProp(false), + /** 重新打开是否滚动到选中项 */ + scrollIntoView: makeBooleanProp(true), + /** 表单域 `model` 字段名,在使用表单校验功能的情况下,该属性是必填的 */ + prop: String, + /** 表单验证规则,结合`wd-form`组件使用 */ + rules: makeArrayProp(), + /** 自定义内容样式类 */ + customContentClass: makeStringProp(''), + /** 自定义标签样式类 */ + customLabelClass: makeStringProp(''), + /** 自定义值样式类 */ + customValueClass: makeStringProp(''), + /** 是否显示确认按钮(radio类型生效),默认值为:true */ + showConfirm: makeBooleanProp(true), + /** + * 显示清空按钮 + */ + clearable: makeBooleanProp(false), + /** + * 是否从页面中脱离出来,用于解决各种 fixed 失效问题 (H5: teleport, APP: renderjs, 小程序: root-portal) + */ + rootPortal: makeBooleanProp(false), + /** + * 必填标记位置,可选值:before、after + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} +export type SelectPickerProps = ExtractPropTypes + +export type SelectPickerDisplayFormat = (items: string | number | boolean | (string | number | boolean)[], columns: Record[]) => string + +export type SelectPickerBeforeConfirm = (value: string | number | boolean | (string | number | boolean)[], resolve: (isPass: boolean) => void) => void + +export type SelectPickerExpose = { + // 打开picker弹框 + open: () => void + // 关闭picker弹框 + close: () => void +} + +export type SelectPickerInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue b/src/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue new file mode 100644 index 0000000..6182fe9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-select-picker/wd-select-picker.vue @@ -0,0 +1,432 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-sidebar-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-sidebar-item/index.scss new file mode 100644 index 0000000..bb1b407 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sidebar-item/index.scss @@ -0,0 +1,97 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(sidebar-item) { + background: $-dark-background2; + color: $-dark-color; + + &:active { + background-color: $-dark-background4; + } + + @include m(active) { + background: $-dark-background; + color: $-sidebar-active-color; + } + + @include m(disabled) { + color: $-dark-color-gray; + + &:active { + background-color: $-dark-background2; + } + } + } + +} + +@include b(sidebar-item) { + display: flex; + align-items: center; + justify-content: center; + position: relative; + padding: 32rpx; + font-size: $-sidebar-font-size; + color: $-sidebar-color; + background: $-sidebar-bg; + min-height: $-sidebar-item-height; + box-sizing: border-box; + white-space: wrap; + line-height: $-sidebar-item-line-height; + + &:active { + background-color: $-sidebar-hover-bg; + } + + @include m(active) { + font-weight: 600; + background: $-sidebar-active-bg; + color: $-sidebar-active-color; + + &::before { + position: absolute; + top: 50%; + left: 0; + width: $-sidebar-active-border-width; + height: $-sidebar-active-border-height; + background: $-sidebar-active-color; + transform: translateY(-50%); + content: ''; + border-radius: $-sidebar-active-border-width; + } + + &:active { + background-color: transparent; + } + } + + @include m(prefix) { + border-bottom-right-radius: $-sidebar-border-radius; + } + + @include m(suffix) { + border-top-right-radius: $-sidebar-border-radius; + } + + + @include m(disabled) { + color: $-sidebar-disabled-color; + cursor: not-allowed; + + &:active { + background-color: $-sidebar-bg; + } + } + + @include edeep(badge) { + z-index: 2; + word-break: break-all; + } + + @include edeep(icon) { + font-size: $-sidebar-icon-size; + margin-right: 2px; + } + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-sidebar-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-sidebar-item/types.ts new file mode 100644 index 0000000..a51419f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sidebar-item/types.ts @@ -0,0 +1,31 @@ +import type { ExtractPropTypes, Prop, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeRequiredProp } from '../common/props' +import type { BadgeProps } from '../wd-badge/types' + +export const sidebarItemProps = { + ...baseProps, + /** 当前选项标题 */ + label: makeRequiredProp(String), + /** 当前选项的值,唯一标识 */ + value: makeRequiredProp([Number, String]), + /** 徽标显示值 */ + badge: { + type: [String, Number, null] as PropType, + default: null + }, + /** 徽标属性,透传给 Badge 组件 */ + badgeProps: Object as PropType>, + /** 图标 */ + icon: String, + /** 是否点状徽标 */ + isDot: { + type: Boolean, + default: undefined + }, + /** 徽标最大值 */ + max: Number, + /** 是否禁用 */ + disabled: makeBooleanProp(false) +} + +export type SidebarItemProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-sidebar-item/wd-sidebar-item.vue b/src/uni_modules/wot-design-uni/components/wd-sidebar-item/wd-sidebar-item.vue new file mode 100644 index 0000000..f20fa52 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sidebar-item/wd-sidebar-item.vue @@ -0,0 +1,116 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-sidebar/index.scss b/src/uni_modules/wot-design-uni/components/wd-sidebar/index.scss new file mode 100644 index 0000000..2e268fa --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sidebar/index.scss @@ -0,0 +1,25 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(sidebar) { + background: $-dark-background; + @include e(padding){ + background: $-dark-background2; + } + } +} + +@include b(sidebar) { + display: flex; + flex-direction: column; + overflow-y: auto; + width: $-sidebar-width; + height: $-sidebar-height; + background: $-color-white; + + @include e(padding){ + flex: 1 1 auto; + background: $-sidebar-bg; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-sidebar/types.ts b/src/uni_modules/wot-design-uni/components/wd-sidebar/types.ts new file mode 100644 index 0000000..5491953 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sidebar/types.ts @@ -0,0 +1,47 @@ +/* + * @Author: weisheng + * @Date: 2024-01-05 18:03:27 + * @LastEditTime: 2024-11-18 23:27:55 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-sidebar/types.ts + * 记得注释 + */ +import { type ExtractPropTypes, type InjectionKey, type PropType } from 'vue' +import { baseProps, makeNumericProp } from '../common/props' + +export type SidebarProvide = { + props: Partial + setChange: (value: number | string, label: string) => void +} + +export const SIDEBAR_KEY: InjectionKey = Symbol('wd-sidebar') + +/** + * Sidebar切换前的选项接口 + */ +export type SidebarBeforeChangeOption = { + // 目标值 + value: number | string + resolve: (pass: boolean) => void +} + +/** + * Sidebar切换前的钩子函数类型 + * @param option 切换选项 + */ +export type SidebarBeforeChange = (option: SidebarBeforeChangeOption) => void + +export const sidebarProps = { + ...baseProps, + /** + * 当前导航项的索引 + */ + modelValue: makeNumericProp(0), + /** + * 在改变前执行的函数 + */ + beforeChange: Function as PropType +} + +export type SidebarProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-sidebar/wd-sidebar.vue b/src/uni_modules/wot-design-uni/components/wd-sidebar/wd-sidebar.vue new file mode 100644 index 0000000..ff659f6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sidebar/wd-sidebar.vue @@ -0,0 +1,63 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-signature/index.scss b/src/uni_modules/wot-design-uni/components/wd-signature/index.scss new file mode 100644 index 0000000..e8259bb --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-signature/index.scss @@ -0,0 +1,31 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(signature) { + @include e(content) { + justify-content: center; + align-items: center; + display: flex; + overflow: hidden; + background: $-signature-bg; + border-radius: $-signature-radius; + border: $-signature-border; + } + + @include e(content-canvas) { + width: 100%; + } + + + @include e(footer) { + margin-top: $-signature-footer-margin-top; + justify-content: flex-end; + display: flex; + + :deep(){ + .wd-button{ + margin-left: $-signature-button-margin-left; + } + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-signature/types.ts b/src/uni_modules/wot-design-uni/components/wd-signature/types.ts new file mode 100644 index 0000000..39336e1 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-signature/types.ts @@ -0,0 +1,263 @@ +/* + * @Author: 810505339 + * @Date: 2025-01-10 20:03:57 + * @LastEditors: weisheng + * @LastEditTime: 2025-03-23 16:35:14 + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-signature/types.ts + * 记得注释 + */ +import type { ComponentPublicInstance, ExtractPropTypes } from 'vue' +import { baseProps, numericProp } from '../common/props' + +export const signatureProps = { + ...baseProps, + /** + * 签名笔颜色 + * 类型:string + * 默认值:#000 + */ + penColor: { + type: String, + default: '#000' + }, + /** + * 签名笔宽度 + * 类型:number + * 默认值:3 + */ + lineWidth: { + type: Number, + default: 3 + }, + /** + * 清空按钮的文本 + * 类型:string + */ + clearText: String, + /** + * 撤回按钮的文本 + * 类型:string + */ + revokeText: String, + /** + * 恢复按钮的文本 + * 类型:string + */ + restoreText: String, + /** + * 确认按钮的文本 + * 类型:string + */ + confirmText: String, + /** + * 目标文件的类型 + * 类型:string + * 默认值:png + */ + fileType: { + type: String, + default: 'png' + }, + /** + * 目标文件的质量 + * 类型:number + * 默认值:1 + */ + quality: { + type: Number, + default: 1 + }, + /** + * 导出图片的缩放比例 + * 类型:number + * 默认值:1 + */ + exportScale: { + type: Number, + default: 1 + }, + /** + * 是否禁用签名板 + * 类型:boolean + * 默认值:false + */ + disabled: { + type: Boolean, + default: false + }, + /** + * 画布的高度 + * 类型:number + */ + height: numericProp, + /** + * 画布的宽度 + * 类型:number + */ + width: numericProp, + /** + * 画板的背景色 + * 类型:string + */ + backgroundColor: String, + /** + * 是否禁用画布滚动 + * 类型:boolean + * 默认值:true + */ + disableScroll: { + type: Boolean, + default: true + }, + /** + * 是否开启历史记录 + * 类型:boolean + * 默认值:false + */ + enableHistory: { + type: Boolean, + default: false + }, + /** + * 撤回和恢复的步长 + * 类型:number + * 默认值:1 + */ + step: { + type: Number, + default: 1 + }, + /** + * 撤回按钮的文本 + * 类型:string + * 默认值:撤销 + */ + undoText: String, + /** + * 恢复按钮的文本 + * 类型:string + * 默认值:恢复 + */ + redoText: String, + /** + * 是否启用压感模式(笔锋) + * 类型:boolean + * 默认值:false + */ + pressure: { + type: Boolean, + default: false + }, + /** + * 压感模式下笔画最小宽度 + * 类型:number + * 默认值:2 + */ + minWidth: { + type: Number, + default: 2 + }, + /** + * 压感模式下笔画最大宽度 + * 类型:number + * 默认值:6 + */ + maxWidth: { + type: Number, + default: 6 + }, + /** + * 最小速度阈值,影响压感模式下的笔画宽度变化 + * 类型:number + * 默认值:1.5 + */ + minSpeed: { + type: Number, + default: 1.5 + } +} + +/** + * 签名结果类型 + * @property tempFilePath - 生成图片的临时路径 + * @property success - 是否成功生成图片 + * @property width - 生成图片的宽度 + * @property height - 生成图片的高度 + */ +export type SignatureResult = { + tempFilePath: string + success: boolean + width: number + height: number +} + +/** + * 签名线条类型 + * @property points - 线条所包含的所有点的数组 + * @property color - 线条颜色 + * @property width - 线条宽度 + * @property backgroundColor - 线条背景色 (可选) + * @property isPressure - 是否为笔锋模式的线条 (可选) + */ +export interface Line { + points: Point[] + color: string + width: number + backgroundColor?: string + isPressure?: boolean +} + +/** + * 签名点位类型 + * @property x - 点的横坐标 + * @property y - 点的纵坐标 + * @property t - 点的时间戳 + * @property speed - 当前点的绘制速度 (可选) + * @property distance - 与上一个点的距离 (可选) + * @property lineWidth - 当前点的线宽 (可选,用于笔锋模式) + * @property lastX1 - 贝塞尔曲线第一个控制点的x坐标 (可选) + * @property lastY1 - 贝塞尔曲线第一个控制点的y坐标 (可选) + * @property lastX2 - 贝塞尔曲线第二个控制点的x坐标 (可选) + * @property lastY2 - 贝塞尔曲线第二个控制点的y坐标 (可选) + * @property isFirstPoint - 是否为线条的第一个点 (可选) + */ +export interface Point { + x: number + y: number + t: number + speed?: number + distance?: number + lineWidth?: number + lastX1?: number + lastY1?: number + lastX2?: number + lastY2?: number + isFirstPoint?: boolean +} + +/** + * 签名组件暴露的方法类型 + * @property init - 初始化签名板 + * @property clear - 清除签名 + * @property confirm - 确认签名并生成图片 + * @property restore - 恢复上一步操作 + * @property revoke - 撤销上一步操作 + */ +export type SignatureExpose = { + /** 初始化签名板 + * @param forceUpdate - 是否强制更新 + */ + init: (forceUpdate?: boolean) => void + /** 点击清除按钮清除签名 */ + clear: () => void + /** 点击确定按钮 */ + confirm: () => void + /* 点击恢复 */ + restore: () => void + /* 点击撤回 */ + revoke: () => void +} + +export type SignatureProps = ExtractPropTypes + +export type SignatureInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-signature/wd-signature.vue b/src/uni_modules/wot-design-uni/components/wd-signature/wd-signature.vue new file mode 100644 index 0000000..0104022 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-signature/wd-signature.vue @@ -0,0 +1,630 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-skeleton/index.scss b/src/uni_modules/wot-design-uni/components/wd-skeleton/index.scss new file mode 100644 index 0000000..6c0f25c --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-skeleton/index.scss @@ -0,0 +1,96 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(skeleton) { + @include e(col) { + background-color: $-dark-background4; + } + } +} +@include b(skeleton) { + box-sizing: border-box; + + @include e(row) { + justify-content: space-between; + margin-bottom: $-skeleton-row-margin-bottom; + display: flex; + align-items: center; + + &:only-child, + &:last-child { + margin-bottom: 0; + } + } + @include e(col) { + border-radius: $-skeleton-border-radius-text; + background-color: $-skeleton-background-color; + display: flex; + align-items: center; + justify-content: center; + + &:first-child:last-child, + &:last-child { + margin-right: 0; + } + } + @include m(type) { + &-text { + width: 100%; + height: $-skeleton-text-height-default; + border-radius: $-skeleton-border-radius-text; + } + + &-rect { + width: 100%; + height: $-skeleton-rect-height-default; + border-radius: $-skeleton-border-radius-rect; + } + + &-circle { + flex-shrink: 0; + width: $-skeleton-circle-height-default; + height: $-skeleton-circle-height-default; + border-radius: $-skeleton-border-radius-circle; + } + } + @include m(animation) { + &-gradient { + position: relative; + overflow-x: hidden; + + &::after { + content: ' '; + position: absolute; + animation: wd-skeleton-gradient 1.5s linear 2s infinite; + background: linear-gradient(90deg, rgba(255, 255, 255, 0), $-skeleton-animation-gradient, rgba(255, 255, 255, 0)); + inset: 0; + } + } + + &-flashed { + animation: wd-skeleton-flashed 2s linear 2s infinite; + } + } + + @keyframes wd-skeleton-gradient { + 0% { + transform: translateX(-100%) skewX(-15deg); + } + 100% { + transform: translateX(100%) skewX(-15deg); + } + } + @keyframes wd-skeleton-flashed { + 0% { + opacity: 1; + } + 50% { + opacity: 0.3; + background-color: $-skeleton-animation-flashed; + } + 100% { + opacity: 1; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-skeleton/index.ts b/src/uni_modules/wot-design-uni/components/wd-skeleton/index.ts new file mode 100644 index 0000000..43e0049 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-skeleton/index.ts @@ -0,0 +1 @@ +export type { SkeletonThemeVars } from './types' diff --git a/src/uni_modules/wot-design-uni/components/wd-skeleton/types.ts b/src/uni_modules/wot-design-uni/components/wd-skeleton/types.ts new file mode 100644 index 0000000..5effc14 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-skeleton/types.ts @@ -0,0 +1,69 @@ +import type { PropType, ExtractPropTypes, CSSProperties } from 'vue' +import { makeArrayProp, makeBooleanProp, makeStringProp } from '../common/props' + +export type SkeletonTheme = 'text' | 'avatar' | 'paragraph' | 'image' +export type SkeletonAnimation = 'gradient' | 'flashed' +export type SkeletonRowColObj = { + [key: string]: any + type?: 'rect' | 'circle' | 'text' + size?: string | number + width?: string | number + height?: string | number + margin?: string | number + background?: string + marginLeft?: string | number + marginRight?: string | number + borderRadius?: string | number + backgroundColor?: string +} +export type SkeletonRowCol = number | SkeletonRowColObj | Array +export type SkeletonThemeVars = { + notifyPadding?: string + notifyFontSize?: string + notifyTextColor?: string + notifyLineHeight?: number | string + notifyDangerBackground?: string + notifyPrimaryBackground?: string + notifySuccessBackground?: string + notifyWarningBackground?: string +} +export const skeletonProps = { + /** + * 骨架图风格,有基础、头像组合等两大类 + */ + theme: makeStringProp('text'), + /** + * 用于设置行列数量、宽度高度、间距等。 + * @example + * 【示例一】,`[1, 1, 2]` 表示输出三行骨架图,第一行一列,第二行一列,第三行两列。 + * 【示例二】,`[1, 1, { width: '100px' }]` 表示自定义第三行的宽度为 `100px`。 + * 【示例三】,`[1, 2, [{ width, height }, { width, height, marginLeft }]]` 表示第三行有两列,且自定义宽度、高度和间距 + */ + rowCol: makeArrayProp(), + /** + * 是否为加载状态,如果是则显示骨架图,如果不是则显示加载完成的内容 + * @default true + */ + loading: makeBooleanProp(true), + /** + * 动画效果,有「渐变加载动画」和「闪烁加载动画」两种。值为空则表示没有动画 + */ + animation: { + type: String as PropType, + default: '' + }, + // 自定义类名 + customClass: { + type: [String, Array, Object], + default: '' + }, + // 自定义样式 + customStyle: { + type: Object as PropType, + default() { + return {} + } + } +} + +export type SkeletonProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-skeleton/wd-skeleton.vue b/src/uni_modules/wot-design-uni/components/wd-skeleton/wd-skeleton.vue new file mode 100644 index 0000000..68ec6cc --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-skeleton/wd-skeleton.vue @@ -0,0 +1,119 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-slider/index.scss b/src/uni_modules/wot-design-uni/components/wd-slider/index.scss new file mode 100644 index 0000000..6301999 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-slider/index.scss @@ -0,0 +1,98 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(slider) { + @include e(label-min, label-max) { + color: $-dark-color; + } + + @include e(label) { + color: $-dark-color; + background-color: rgba($color: $-dark-background2, $alpha: 0.5); + } + + @include m(disabled) { + @include me(label-min, label-max) { + color: $-dark-color-gray; + } + } + } +} + + +@include b(slider) { + display: flex; + flex-flow: row nowrap; + align-items: center; + height: calc($-slider-handle-radius * 3); + + @include e(label-min, label-max) { + font-size: $-slider-fs; + color: $-slider-color; + } + @include e(label) { + text-align: center; + width: calc($-slider-handle-radius * 2); + line-height: calc($-slider-handle-radius * 2); + font-size: $-slider-fs; + line-height: 1.2; + color: $-slider-color; + background-color: rgba($color: #fff, $alpha: 0.5); + border-radius: 100%; + position: absolute; + bottom: calc($-slider-handle-radius * 2 + 8px); + } + @include e(bar-wrapper) { + flex: 1; + position: relative; + border-radius: calc($-slider-axie-height / 2); + background-color: #e5e5e5; + margin: calc($-slider-handle-radius - $-slider-axie-height / 2) 0; + } + @include e(bar) { + position: relative; + border-radius: inherit; + height: $-slider-axie-height; + background: $-slider-line-color; + } + @include e(button-wrapper) { + width: calc($-slider-handle-radius * 2); + /* 右侧滑块按钮定位,向右偏移自身宽度的50% */ + transform: translate3d(50%, -50%, 0); + position: absolute; + right: 0; + + @include m(left){ + left: 0; + /* 左侧滑块按钮定位,向左偏移自身宽度的50% */ + transform: translate3d(-50%, -50%, 0); + } + } + @include e(has-label) { + padding-top: calc($-slider-fs * 1.2 + 8px); + } + @include e(button) { + height: calc($-slider-handle-radius * 2); + width: calc($-slider-handle-radius * 2); + background: $-slider-handle-bg; + border-radius: 100%; + border: 1px solid $-slider-axie-bg; + box-sizing: border-box; + box-shadow: 0 2px 4px 0 rgba($color: #9b9b9b, $alpha: 0.5); + } + @include e(label-min) { + margin-right: calc($-slider-handle-radius * 2); + } + @include e(label-max) { + margin-left: calc($-slider-handle-radius * 2); + } + @include m(disabled) { + @include me(bar) { + opacity: 0.25; + } + @include me(label-min, label-max) { + color: $-slider-disabled-color; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-slider/types.ts b/src/uni_modules/wot-design-uni/components/wd-slider/types.ts new file mode 100644 index 0000000..989f7dd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-slider/types.ts @@ -0,0 +1,138 @@ +import type { ComponentPublicInstance, ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +/** + * 滑块值类型 - 单滑块为数字,双滑块为数组 + */ +export type SliderValue = number | number[] + +export const sliderProps = { + ...baseProps, + + /** + * 自定义最小值的样式类名 + * 类型: string + * 默认值: '' + */ + customMinClass: makeStringProp(''), + + /** + * 自定义最大值的样式类名 + * 类型: string + * 默认值: '' + */ + customMaxClass: makeStringProp(''), + + /** + * 是否隐藏左右的最大最小值 + * 类型: boolean + * 默认值: false + */ + hideMinMax: makeBooleanProp(false), + + /** + * 是否隐藏当前滑块值 + * 类型: boolean + * 默认值: false + */ + hideLabel: makeBooleanProp(false), + + /** + * 是否禁用滑块 + * 类型: boolean + * 默认值: false + */ + disabled: makeBooleanProp(false), + + /** + * 进度条未激活的背景颜色 + * 类型: string + * 默认值: '#e5e5e5' + */ + inactiveColor: makeStringProp('#e5e5e5'), + + /** + * 进度条激活的背景颜色 + * 类型: string + * 默认值: '' + */ + activeColor: makeStringProp(''), + + /** + * 滑块的最大值 + * 类型: number + * 默认值: 100 + */ + max: makeNumberProp(100), + + /** + * 滑块的最小值 + * 类型: number + * 默认值: 0 + */ + min: makeNumberProp(0), + + /** + * 滑块的步进值 + * 类型: number + * 默认值: 1 + */ + step: makeNumberProp(1), + + /** + * 滑块的值,如果为数组,则为双向滑块 + * 类型: number | number[] + * 默认值: 0 + */ + modelValue: { + type: [Number, Array] as PropType, + default: 0 + } +} + +/** + * 滑块拖动事件参数 + */ +export interface SliderDragEvent { + /** + * 当前滑块的值 + * 单滑块模式为数字,双滑块模式为数组 + */ + value: SliderValue +} + +/** + * 滑块组件事件类型定义 + */ +export type SliderEmits = { + /** + * 开始拖动滑块时触发 + */ + dragstart: [event: SliderDragEvent] + + /** + * 拖动滑块过程中触发 + */ + dragmove: [event: SliderDragEvent] + + /** + * 结束拖动滑块时触发 + */ + dragend: [event: SliderDragEvent] + + /** + * 更新滑块值时触发,用于v-model绑定 + */ + 'update:modelValue': [value: SliderValue] +} + +export type SliderExpose = { + /** + * 初始化slider宽度 + */ + initSlider: () => void +} + +export type SliderProps = ExtractPropTypes + +export type SliderInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue b/src/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue new file mode 100644 index 0000000..3d86731 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-slider/wd-slider.vue @@ -0,0 +1,356 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-sort-button/index.scss b/src/uni_modules/wot-design-uni/components/wd-sort-button/index.scss new file mode 100644 index 0000000..bbc9af2 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sort-button/index.scss @@ -0,0 +1,89 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(sort-button) { + @include e(wrapper) { + color: $-dark-color; + } + } + +} + +@include b(sort-button) { + display: inline-block; + height: $-sort-button-height; + line-height: $-sort-button-height; + + @include m(line) { + .wd-sort-button__left { + &::after { + position: absolute; + content: ''; + width: 19px; + height: 3px; + bottom: 6px; + left: 50%; + transform: translate(-50%, 0); + background: $-sort-button-line-color; + border-radius: calc($-sort-button-line-height / 2); + transition: opacity .15s; + opacity: 0; + } + + &.is-active::after { + opacity: 1; + } + } + } + + @include e(wrapper) { + font-size: $-sort-button-fs; + color: $-sort-button-color; + word-break: break-all; + white-space: nowrap; + } + + @include e(left) { + position: relative; + display: inline-block; + vertical-align: middle; + + @include when(active) { + font-weight: $-fw-medium; + + .wd-sort-button__right { + justify-content: center; + } + + } + } + + @include e(right) { + display: inline-block; + min-width: 14px; + margin-left: 2px; + vertical-align: middle; + line-height: 1.1; + + @include when(active) { + + :deep(.wd-sort-button__icon-up), + :deep(.wd-sort-button__icon-down) { + transform: scale(calc((10 / 14))); + } + } + } + + @include edeep(icon-up) { + display: block !important; + line-height: 1.1; + transform: scale(calc((10 / 14))) translate(0, 7px); + } + + @include edeep(icon-down) { + display: block !important; + line-height: 1.1; + transform: scale(calc((10 / 14))) translate(0, -7px); + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-sort-button/types.ts b/src/uni_modules/wot-design-uni/components/wd-sort-button/types.ts new file mode 100644 index 0000000..1d94f4f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sort-button/types.ts @@ -0,0 +1,43 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' + +export const sortButtonProps = { + ...baseProps, + /** + * 选中的箭头方向,1表示升序,0表示重置状态,-1表示降序。 + * 类型: number + * 可选值: -1, 0, 1 + * 默认值: 0或-1(根据具体实现可能有所不同) + */ + modelValue: makeNumberProp(0), + + /** + * 排序按钮展示的文案。 + * 类型: string + * 默认值: '' + */ + title: makeStringProp(''), + + /** + * 当展示双箭头时,是否允许手动重置按钮。 + * 类型: boolean + * 默认值: false + */ + allowReset: makeBooleanProp(false), + + /** + * 是否优先切换为降序,如果不开启则默认优先切换为升序。 + * 类型: boolean + * 默认值: false + */ + descFirst: makeBooleanProp(false), + + /** + * 是否展示下划线,当只有一个排序按钮时,通常不展示下划线。 + * 类型: boolean + * 默认值: true + */ + line: makeBooleanProp(true) +} + +export type SortButtonProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-sort-button/wd-sort-button.vue b/src/uni_modules/wot-design-uni/components/wd-sort-button/wd-sort-button.vue new file mode 100644 index 0000000..d8e6c19 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sort-button/wd-sort-button.vue @@ -0,0 +1,69 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-status-tip/index.scss b/src/uni_modules/wot-design-uni/components/wd-status-tip/index.scss new file mode 100644 index 0000000..9ba494a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-status-tip/index.scss @@ -0,0 +1,37 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + background-color: $-dark-background2; + @include b(status-tip) { + @include e(text) { + color: $-dark-color3; + } + } +} + +@include b(status-tip) { + padding: $-statustip-padding; + width: 100%; + margin: 0 auto; + color: $-statustip-color; + font-size: $-statustip-fs; + box-sizing: border-box; + display: flex; + flex-direction: column; + align-items: center; + + @include edeep(image) { + margin: 0 auto; + width: 160px; + height: 160px; + } + @include e(text) { + margin: 20px auto 0; + font-size: $-statustip-fs; + line-height: $-statustip-line-height; + color: $-statustip-color; + text-align: center; + overflow-wrap: break-word; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-status-tip/types.ts b/src/uni_modules/wot-design-uni/components/wd-status-tip/types.ts new file mode 100644 index 0000000..b4f1938 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-status-tip/types.ts @@ -0,0 +1,65 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 13:49:00 + * @LastEditTime: 2024-09-19 14:45:29 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-status-tip\types.ts + * 记得注释 + */ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeStringProp } from '../common/props' +import type { ImageMode } from '../wd-img/types' + +export type ImageSize = { + /** + * 宽度 + */ + width: number | string + /** + * 高度 + */ + height: number | string +} + +export const statusTipProps = { + ...baseProps, + + /** + * 缺省图片类型,支持传入图片 URL。 + * 类型: string + * 可选值: search, network, content, collect, comment, halo, message + * 默认值: network + */ + image: makeStringProp('network'), + + /** + * 图片大小,默认单位为 `px`。 + * 类型: string 或 number 或 ImageSize + * 默认值: 空字符串 + */ + imageSize: { + type: [String, Number, Object] as PropType, + default: '' + }, + /** + * 提示文案。 + * 类型: string + * 默认值: 空字符串 + */ + tip: makeStringProp(''), + /** + * 图片裁剪、缩放的模式 + * 类型:string + * 默认值:'aspectFill' + */ + imageMode: makeStringProp('aspectFill'), + /** + * 图片路径前缀,指向图片所在目录,用于拼接图片 URL。推荐将图片放到自己的服务器上,并设置此属性。 + * 类型: string + * 默认值: https://registry.npmmirror.com/wot-design-uni-assets/*\/files/ + */ + urlPrefix: makeStringProp('https://registry.npmmirror.com/wot-design-uni-assets/*/files/') +} + +export type StatusTipProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-status-tip/wd-status-tip.vue b/src/uni_modules/wot-design-uni/components/wd-status-tip/wd-status-tip.vue new file mode 100644 index 0000000..4ab2ee4 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-status-tip/wd-status-tip.vue @@ -0,0 +1,70 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-step/index.scss b/src/uni_modules/wot-design-uni/components/wd-step/index.scss new file mode 100644 index 0000000..5feb063 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-step/index.scss @@ -0,0 +1,235 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(step) { + @include e(icon) { + background: $-dark-background2; + } + + @include e(content){ + color: $-dark-color3; + } + + @include e(line) { + background: $-dark-color-gray; + } + + @include e(dot) { + background: $-dark-color-gray; + } + + @include e(description) { + color: $-dark-color3; + } + + @include when(wait) { + .wd-step__description { + color: $-dark-color-gray; + } + } + + :deep(.wd-step__icon-outer),:deep(.wd-step__icon-inner){ + color: $-dark-color3; + border-color: $-dark-color-gray; + } + } +} + + +@include b(step) { + position: relative; + display: inline-block; + vertical-align: top; + + @include e(header) { + position: relative; + font-size: 0; + + @include when(dot) { + .wd-step__line { + margin-top: -1px; + } + } + } + @include e(icon) { + display: inline-block; + position: relative; + width: $-steps-icon-size; + height: $-steps-icon-size; + background: #fff; + z-index: 1; + + @include when(icon) { + width: $-steps-is-icon-width; + text-align: center; + } + @include when(dot) { + width: $-steps-dot-size; + height: $-steps-dot-size; + border: 1px solid transparent; + margin-left: -1px; + border-radius: 50%; + background: transparent; + } + } + @include edeep(icon-inner) { + font-size: $-steps-icon-size; + color: $-steps-inactive-color; + } + @include e(icon-outer) { + width: calc($-steps-icon-size - 2px); + height: calc($-steps-icon-size - 2px); + border: 1px solid $-steps-inactive-color; + color: $-steps-inactive-color; + text-align: center; + line-height: calc($-steps-icon-size - 2px); + border-radius: 50%; + font-size: $-steps-icon-text-fs; + } + @include e(line) { + position: absolute; + width: 100%; + height: 1px; + background: $-steps-line-color; + transform: scaleY(0.5); + top: 50%; + left: 0; + } + @include e(dot) { + position: relative; + display: block; + width: 100%; + height: 100%; + border-radius: 50%; + background: $-steps-line-color; + } + @include e(content){ + margin-top: 7px; + color: $-steps-inactive-color; + font-size: $-steps-label-fs; + } + @include e(title) { + font-weight: $-steps-title-fw; + line-height: 1.43; + + @include when(description) { + font-size: $-steps-title-fs; + } + } + @include e(description) { + margin-top: 5px; + padding: 0 2px; + color: $-steps-description-color; + } + @include when(wait) { + .wd-step__description { + color: $-steps-inactive-color; + } + } + @include when(finished) { + :deep(.wd-step__icon-inner) { + color: $-steps-finished-color; + } + .wd-step__icon-outer { + color: $-steps-finished-color; + border-color: $-steps-finished-color; + } + .wd-step__title { + color: $-steps-finished-color; + } + .wd-step__dot { + background: $-steps-finished-color; + } + } + @include when(process) { + .wd-step__icon.is-icon { + :deep(.wd-step__icon-inner) { + color: $-steps-finished-color; + } + } + .wd-step__icon-outer { + color: #fff; + background: $-steps-finished-color; + border-color: $-steps-finished-color; + } + .wd-step__title { + color: $-steps-finished-color; + } + .wd-step__icon { + border-color: $-steps-finished-color; + + &.is-dot { + &::after { + position: absolute; + content: ''; + width: $-steps-dot-size + 10px; + height: $-steps-dot-size + 10px; + left: -5px; + top: -5px; + border-radius: 50%; + background: $-steps-finished-color; + opacity: 0.2; + } + } + } + .wd-step__dot { + background: $-steps-finished-color; + } + } + @include when(error) { + :deep(.wd-step__icon-inner), .wd-step__title { + color: $-steps-error-color; + } + .wd-step__icon-outer { + color: $-steps-error-color; + border-color: $-steps-error-color; + } + .wd-step__dot { + background: $-steps-error-color; + } + } + @include when(center) { + text-align: center; + + .wd-step__line { + left: 50%; + right: -50%; + } + } + @include when(vertical) { + display: block; + + .wd-step__header { + position: absolute; + left: 0; + top: 0; + height: 100%; + + &.is-dot { + top: 6px; + + .wd-step__line { + margin-left: -1px; + margin-top: 0; + } + } + } + .wd-step__content { + margin-left: 30px; + margin-top: 0; + padding-bottom: 20px; + } + .wd-step__line { + top: 0; + left: 50%; + width: 1px; + height: 100%; + transform: scaleX(0.5); + } + .wd-step__icon.is-dot { + margin-left: 0; + margin-top: -1px; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-step/types.ts b/src/uni_modules/wot-design-uni/components/wd-step/types.ts new file mode 100644 index 0000000..3d24ff6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-step/types.ts @@ -0,0 +1,33 @@ +import type { PropType } from 'vue' +import { baseProps, makeBooleanProp } from '../common/props' + +export type StepStatus = 'finished' | 'process' | 'error' + +export const stepProps = { + ...baseProps, + + /** + * 步骤标题,如果没有则使用默认文案。 + * 当只有标题而没有描述时,标题的字号会小2号。 + * 类型: string + */ + title: String, + + /** + * 步骤描述。 + * 类型: string + */ + description: String, + + /** + * 步骤图标。 + * 类型: string + */ + icon: String, + + /** + * 步骤状态,可选值为 'finished'(已完成)、'process'(进行中)、'error'(出错)。 + * 类型: string + */ + status: String as PropType +} diff --git a/src/uni_modules/wot-design-uni/components/wd-step/wd-step.vue b/src/uni_modules/wot-design-uni/components/wd-step/wd-step.vue new file mode 100644 index 0000000..1a40f83 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-step/wd-step.vue @@ -0,0 +1,150 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-steps/index.scss b/src/uni_modules/wot-design-uni/components/wd-steps/index.scss new file mode 100644 index 0000000..e436a2d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-steps/index.scss @@ -0,0 +1,10 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(steps) { + font-size: 0; + + @include when(vertical) { + display: block; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-steps/types.ts b/src/uni_modules/wot-design-uni/components/wd-steps/types.ts new file mode 100644 index 0000000..13382c0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-steps/types.ts @@ -0,0 +1,59 @@ +/* + * @Author: weisheng + * @Date: 2024-01-09 11:46:46 + * @LastEditTime: 2024-03-18 17:23:06 + * @LastEditors: weisheng + * @Description: + * @FilePath: \wot-design-uni\src\uni_modules\wot-design-uni\components\wd-steps\types.ts + * 记得注释 + */ +import { type ExtractPropTypes, type InjectionKey } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp } from '../common/props' + +export const stepsProps = { + ...baseProps, + + /** + * 当前激活的步骤进度,以数字表示。 + * 类型: number + * 默认值: 0 + */ + active: makeNumberProp(0), + + /** + * 是否为垂直方向的步骤条。 + * 类型: boolean + * 默认值: false + */ + vertical: makeBooleanProp(false), + + /** + * 是否为点状步骤条样式。 + * 类型: boolean + * 默认值: false + */ + dot: makeBooleanProp(false), + + /** + * 步骤条之间的间距,默认为自动计算。 + * 如果指定,则使用此值作为间距。 + * 类型: string + * 默认值: 自动计算 + */ + space: String, + + /** + * 是否将步骤条水平居中显示,只对横向步骤条有效。 + * 类型: boolean + * 默认值: false + */ + alignCenter: makeBooleanProp(false) +} + +export type StepsProps = ExtractPropTypes + +export type StepsProvide = { + props: Partial +} + +export const STEPS_KEY: InjectionKey = Symbol('wd-steps') diff --git a/src/uni_modules/wot-design-uni/components/wd-steps/wd-steps.vue b/src/uni_modules/wot-design-uni/components/wd-steps/wd-steps.vue new file mode 100644 index 0000000..0440038 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-steps/wd-steps.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-sticky-box/index.scss b/src/uni_modules/wot-design-uni/components/wd-sticky-box/index.scss new file mode 100644 index 0000000..9456c8b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sticky-box/index.scss @@ -0,0 +1,6 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(sticky-box) { + position: relative; +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-sticky-box/types.ts b/src/uni_modules/wot-design-uni/components/wd-sticky-box/types.ts new file mode 100644 index 0000000..cb0e125 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sticky-box/types.ts @@ -0,0 +1,20 @@ +/* + * @Author: weisheng + * @Date: 2024-04-08 22:34:01 + * @LastEditTime: 2024-06-01 16:04:56 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-sticky-box/types.ts + * 记得注释 + */ +import type { ComponentInternalInstance, InjectionKey } from 'vue' + +export type stickyBoxProvide = { + boxStyle: { + height: number // 高度 + width: number // 宽度 + } + observerForChild: (child: ComponentInternalInstance) => void // 监听子组件 +} + +export const STICKY_BOX_KEY: InjectionKey = Symbol('wd-sticky-box') diff --git a/src/uni_modules/wot-design-uni/components/wd-sticky-box/wd-sticky-box.vue b/src/uni_modules/wot-design-uni/components/wd-sticky-box/wd-sticky-box.vue new file mode 100644 index 0000000..afdb1bd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sticky-box/wd-sticky-box.vue @@ -0,0 +1,155 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-sticky/index.scss b/src/uni_modules/wot-design-uni/components/wd-sticky/index.scss new file mode 100644 index 0000000..36392a0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sticky/index.scss @@ -0,0 +1,9 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(sticky) { + display: inline-block; + @include e(container) { + display: inline-block; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-sticky/types.ts b/src/uni_modules/wot-design-uni/components/wd-sticky/types.ts new file mode 100644 index 0000000..1b14dcf --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sticky/types.ts @@ -0,0 +1,13 @@ +import { baseProps, makeNumberProp } from '../common/props' + +export const stickyProps = { + ...baseProps, + /** + * 层级 + */ + zIndex: makeNumberProp(1), + /** + * 吸顶距离 + */ + offsetTop: makeNumberProp(0) +} diff --git a/src/uni_modules/wot-design-uni/components/wd-sticky/wd-sticky.vue b/src/uni_modules/wot-design-uni/components/wd-sticky/wd-sticky.vue new file mode 100644 index 0000000..8b5e0d9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-sticky/wd-sticky.vue @@ -0,0 +1,190 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-swipe-action/index.scss b/src/uni_modules/wot-design-uni/components/wd-swipe-action/index.scss new file mode 100644 index 0000000..5310e70 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swipe-action/index.scss @@ -0,0 +1,22 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(swipe-action) { + position: relative; + overflow: hidden; + @include e(left) { + left: 0; + transform: translate3d(-100%, 0, 0); + } + @include e(right) { + right: 0; + transform: translate3d(100%, 0, 0); + } +} + +.wd-swipe-action__left, +.wd-swipe-action__right { + position: absolute; + top: 0; + height: 100%; +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-swipe-action/types.ts b/src/uni_modules/wot-design-uni/components/wd-swipe-action/types.ts new file mode 100644 index 0000000..dc828f1 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swipe-action/types.ts @@ -0,0 +1,40 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp } from '../common/props' + +export type SwipeActionStatus = 'left' | 'close' | 'right' + +// 点击关闭按钮、滑动关闭按钮、通过控制value关闭按钮 +export type SwipeActionReason = 'click' | 'swipe' | 'value' + +export type SwipeActionPosition = SwipeActionStatus | 'inside' + +export type SwipeActionBeforeClose = (reason: SwipeActionReason, position: SwipeActionPosition) => void + +export const swipeActionProps = { + ...baseProps, + + /** + * 滑动按钮的状态,使用v-model进行双向绑定。 + * 可选值为:'left'(左滑)、'close'(关闭状态)、'right'(右滑)。 + * 类型:string + * 默认值:'close' + */ + modelValue: makeStringProp('close'), + + /** + * 是否禁用滑动操作。 + * 类型:boolean + * 默认值:false + */ + disabled: makeBooleanProp(false), + + /** + * 在关闭滑动按钮前调用的钩子函数。 + * 可以在此函数中执行一些关闭前的操作,如确认提示等。 + * 类型:function + * 默认值:无 + */ + beforeClose: Function as PropType +} + +export type SwipeActionProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-swipe-action/wd-swipe-action.vue b/src/uni_modules/wot-design-uni/components/wd-swipe-action/wd-swipe-action.vue new file mode 100644 index 0000000..dcffd6a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swipe-action/wd-swipe-action.vue @@ -0,0 +1,294 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-swiper-nav/index.scss b/src/uni_modules/wot-design-uni/components/wd-swiper-nav/index.scss new file mode 100644 index 0000000..f7207ca --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swiper-nav/index.scss @@ -0,0 +1,159 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(swiper-nav) { + + @include e(btn) { + @include m(prev, next) { + position: absolute; + top: 50%; + transform: translateY(-50%); + width: $-swiper-nav-btn-size; + height: $-swiper-nav-btn-size; + border-radius: 50%; + background: $-swiper-nav-btn-bg-color; + + &::after { + position: absolute; + left: 50%; + top: 50%; + display: block; + content: ''; + width: 12rpx; + height: 12rpx; + border-color: $-swiper-nav-btn-color; + border-style: solid; + } + } + + @include m(prev) { + left: 30rpx; + + &::after { + margin-left: 4rpx; + border-width: 2rpx 0 0 2rpx; + transform: translate(-50%, -50%) rotateZ(-45deg); + } + } + + @include m(next) { + right: 30rpx; + + &::after { + margin-left: -4rpx; + border-width: 2rpx 2rpx 0 0; + transform: translate(-50%, -50%) rotateZ(45deg); + } + } + } + + @include m(dots, dots-bar) { + display: flex; + flex-direction: row; + } + + @include m(fraction) { + padding: 0 16rpx; + height: $-swiper-nav-fraction-height; + line-height: $-swiper-nav-fraction-height; + border-radius: calc($-swiper-nav-fraction-height / 2); + background: $-swiper-nav-fraction-bg-color; + color: $-swiper-nav-fraction-color; + font-size: $-swiper-nav-fraction-font-size; + } + + + @include e(item) { + @include m(dots, dots-bar) { + width: $-swiper-nav-dot-size; + height: $-swiper-nav-dot-size; + background: $-swiper-nav-dot-color; + border-radius: 50%; + margin: 0 10rpx; + transition: all 0.4s ease-in; + + @include when(vertical) { + margin: 10rpx 0; + } + + @include when(active) { + background-color: $-swiper-nav-dot-active-color; + } + } + + @include m(dots-bar) { + + @include when(vertical) { + @include when(active) { + width: $-swiper-nav-dot-size; + height: $-swiper-nav-dots-bar-active-width; + } + } + + @include when(active) { + width: $-swiper-nav-dots-bar-active-width; + border-radius: calc($-swiper-nav-dot-size / 2); + background-color: $-swiper-nav-dot-active-color; + } + } + + } + + + @include m(left) { + position: absolute; + left: 24rpx; + top: 50%; + transform: translateY(-50%); + } + + @include m(right) { + position: absolute; + right: 24rpx; + top: 50%; + transform: translateY(-50%); + } + + @include m(top-left) { + position: absolute; + top: 24rpx; + left: 24rpx; + } + + @include m(top) { + position: absolute; + left: 50%; + top: 24rpx; + transform: translateX(-50%); + } + + @include m(top-right) { + position: absolute; + top: 24rpx; + right: 24rpx; + } + + @include m(bottom-left) { + position: absolute; + left: 24rpx; + bottom: 24rpx; + } + + @include m(bottom) { + position: absolute; + left: 50%; + bottom: 24rpx; + transform: translateX(-50%); + } + + @include m(bottom-right) { + position: absolute; + right: 24rpx; + bottom: 24rpx; + } + + @include m(vertical) { + flex-direction: column; + } + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-swiper-nav/types.ts b/src/uni_modules/wot-design-uni/components/wd-swiper-nav/types.ts new file mode 100644 index 0000000..9ed1909 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swiper-nav/types.ts @@ -0,0 +1,42 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeStringProp } from '../common/props' +import type { DirectionType, IndicatorPositionType } from '../wd-swiper/types' + +/** + * 指示器类型,点状(dots)、点条状(dots-bar)、分式(fraction)等 + */ +export type SwiperIndicatorType = 'dots' | 'dots-bar' | 'fraction' + +export const swiperNavprops = { + ...baseProps, + /** + * 当前轮播在哪一项(下标) + */ + current: makeNumberProp(0), + /** + * 轮播滑动方向,包括横向滑动和纵向滑动两个方向 + */ + direction: makeStringProp('horizontal'), + /** + * 小于这个数字不会显示导航器 + */ + minShowNum: makeNumberProp(2), + /** + * 指示器位置 + */ + indicatorPosition: makeStringProp('bottom'), + /** + * 是否显示两侧的控制按钮 + */ + showControls: makeBooleanProp(false), + /** + * 总共的项数 + */ + total: makeNumberProp(0), + /** + * 指示器类型,点状(dots)、点条状(dots-bar)、分式(fraction)等 + */ + type: makeStringProp('dots') +} + +export type SwiperNavProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue b/src/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue new file mode 100644 index 0000000..f7dcc2b --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swiper-nav/wd-swiper-nav.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-swiper/index.scss b/src/uni_modules/wot-design-uni/components/wd-swiper/index.scss new file mode 100644 index 0000000..132d635 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swiper/index.scss @@ -0,0 +1,53 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(swiper) { + position: relative; + + @include e(track) { + border-radius: $-swiper-radius; + overflow: hidden; + transform: translateY(0); + } + + @include e(item) { + display: flex; + align-items: center; + box-sizing: border-box; + padding: $-swiper-item-padding; + + @include m(slot) { + // 问题来自 https://github.com/dcloudio/uni-app/issues/4629,支付宝小程序不支持属性选择器 + /* #ifdef MP */ + :deep() { + /* #ifdef MP-WEIXIN */ + view:not([class]) { + width: 100%; + height: 100%; + } + /* #endif */ + /* #ifndef MP-WEIXIN */ + view { + width: 100%; + height: 100%; + } + /* #endif */ + } + /* #endif */ + } + } + + @include e(image, video) { + width: 100%; + transition: all 0.3s ease; + } + + @include e(text) { + // 随便搞个样式,反正用户还是会覆盖的 + position: absolute; + right: 24rpx; + top: 24rpx; + color: $-swiper-item-text-color; + font-size: $-swiper-item-text-fs; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-swiper/types.ts b/src/uni_modules/wot-design-uni/components/wd-swiper/types.ts new file mode 100644 index 0000000..f37fcc5 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swiper/types.ts @@ -0,0 +1,264 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' +import type { SwiperNavProps } from '../wd-swiper-nav/types' +import type { ImageMode } from '../wd-img/types' + +/** + * 轮播滑动方向 + */ +export type DirectionType = 'horizontal' | 'vertical' + +/** + * 切换动画 + */ +export type EasingType = 'default' | 'linear' | 'easeInCubic' | 'easeOutCubic' | 'easeInOutCubic' + +/** + * 指示器位置 + */ +export type IndicatorPositionType = 'left' | 'top-left' | 'top' | 'top-right' | 'bottom-left' | 'bottom' | 'bottom-right' | 'right' + +/** + * first:第一个滑块。 + * current:实时的当前滑块。 + * highest:高度最大的滑块。 + * none:不根据滑块调整高度,容器高度取决于自身样式。 + */ +export type AdjustHeightType = 'first' | 'current' | 'highest' | 'none' + +// 资源类型 +export type SwiperItemType = 'image' | 'video' + +export interface SwiperList { + [key: string]: any + // 图片、视频等资源地址 + value?: string + // 视频资源的封面 + poster?: string + // 资源文件类型,可选值:'image' | 'video' + type?: SwiperItemType +} + +export const swiperProps = { + ...baseProps, + + /** + * 是否自动播放轮播图 + * 类型:boolean + * 默认值:true + */ + autoplay: makeBooleanProp(true), + + /** + * 当前轮播在哪一项(下标) + * 类型:number + * 默认值:0 + */ + current: makeNumberProp(0), + + /** + * 轮播滑动方向,可选值:'horizontal'(水平)或'vertical'(垂直) + * 类型:string + * 默认值:'horizontal' + */ + direction: makeStringProp('horizontal'), + + /** + * 同时显示的滑块数量 + * 类型:number + * 默认值:1 + */ + displayMultipleItems: makeNumberProp(1), + + /** + * 滑动动画时长,单位为毫秒 + * 类型:number + * 默认值:300 + */ + duration: makeNumberProp(300), + + /** + * 指定 swiper 切换缓动动画类型 + * 类型:string + * 默认值:'default' + */ + easingFunction: makeStringProp('default'), + + /** + * 轮播的高度 + * 类型:number 或 string(数字或可转换为数字的字符串) + * 默认值:'192' + */ + height: makeNumericProp('192'), + + /** + * 轮播间隔时间,单位为毫秒 + * 类型:number + * 默认值:5000 + */ + interval: makeNumberProp(5000), + + /** + * 图片列表,可以是一个图片对象数组或字符串数组 + * 类型:array + * 默认值:空数组 + */ + list: { + type: Array as PropType, + default: () => [] + }, + + /** + * 是否循环播放轮播图 + * 类型:boolean + * 默认值:true + */ + loop: makeBooleanProp(true), + + /** + * 视频是否循环播放 + * 类型:boolean + * 默认值:true + */ + videoLoop: makeBooleanProp(true), + + /** + * 视频是否静音播放 + * 类型:boolean + * 默认值:true + */ + muted: makeBooleanProp(true), + + /** + * 后边距 + * 类型:number 或 string(数字或可转换为数字的字符串) + * 默认值:'0' + */ + nextMargin: makeNumericProp('0'), + + /** + * 页码信息展示位置,可选值:'left' | 'top-left' | 'top' | 'top-right' | 'bottom-left' | 'bottom' | 'bottom-right' | 'right' + * 类型:string + * 默认值:'bottom' + */ + indicatorPosition: makeStringProp('bottom'), + /** + * 前边距 + * 类型:number 或 string(数字或可转换为数字的字符串) + * 默认值:'0' + */ + previousMargin: makeNumericProp('0'), + /** + * 是否应用边距到第一个、最后一个元素 + * 类型:boolean + * 默认值:false + */ + snapToEdge: makeBooleanProp(false), + /** + * 指示器全部配置,可以是布尔值或指示器配置对象 + * 类型:boolean 或 object + * 默认值:true + */ + indicator: { + type: [Boolean, Object] as PropType>, + default: true + }, + + /** + * 图片裁剪、缩放的模式 + * 类型:string + * 默认值:'aspectFill' + */ + imageMode: makeStringProp('aspectFill'), + /** + * 选项对象中,value 对应的 key + */ + valueKey: makeStringProp('value'), + /** + * 选项对象中,标题 text 对应的 key + */ + textKey: makeStringProp('text'), + /** + * 视频是否自动播放 + * 类型:boolean + * 默认值:true + */ + autoplayVideo: makeBooleanProp(true), + /** + * 切换轮播项时是否停止上一个视频的播放 + * 类型:boolean + * 默认值:true + */ + stopPreviousVideo: makeBooleanProp(true), + /** + * 视频播放时是否停止自动轮播 + * 类型:boolean + * 默认值:false + */ + stopAutoplayWhenVideoPlay: makeBooleanProp(false), + /** + * 自动以指定滑块的高度为整个容器的高度。当 vertical 为 true 时,默认不调整 + * 仅支付宝小程序支持 + * 类型:'first' | 'current' | 'highest' | 'none' + * 默认值:false + */ + adjustHeight: makeStringProp('highest'), + /** + * vertical 为 true 时强制使 adjust-height 生效。 + * 仅支付宝小程序支持 + * 类型:boolean + * 默认值:false + */ + adjustVerticalHeight: makeBooleanProp(false), + /** + * 自定义指示器类名 + * 类型:string + */ + customIndicatorClass: makeStringProp(''), + + /** + * 自定义图片类名 + * 类型:string + */ + customImageClass: makeStringProp(''), + + /** + * 自定义上一个图片类名 + * 类型:string + */ + customPrevImageClass: makeStringProp(''), + + /** + * 自定义下一个图片类名 + * 类型:string + */ + customNextImageClass: makeStringProp(''), + + /** + * 自定义swiper子项类名 + * 类型:string + */ + customItemClass: makeStringProp(''), + /** + * 自定义上一个子项类名 + * 类型:string + */ + customPrevClass: makeStringProp(''), + /** + * 自定义下一个子项类名 + * 类型:string + */ + customNextClass: makeStringProp(''), + /** + * 自定义文字标题类名 + * 类型:string + */ + customTextClass: makeStringProp(''), + /** + * 自定义文字标题样式 + * 类型:string + */ + customTextStyle: makeStringProp('') +} + +export type SwiperProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue b/src/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue new file mode 100644 index 0000000..7d60a0a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-swiper/wd-swiper.vue @@ -0,0 +1,318 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-switch/index.scss b/src/uni_modules/wot-design-uni/components/wd-switch/index.scss new file mode 100644 index 0000000..6facd99 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-switch/index.scss @@ -0,0 +1,58 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@include b(switch) { + display: inline-block; + position: relative; + width: $-switch-width; + height: $-switch-height; + border-radius: $-switch-circle-size; + background: $-switch-inactive-color; + font-size: $-switch-size; + transition: all .3s; + + @include e(checkbox) { + position: absolute; + width: 0; + height: 0; + opacity: 0; + margin: 0; + } + @include e(circle) { + box-sizing: border-box; + position: absolute; + display: inline-block; + width: $-switch-circle-size; + height: $-switch-circle-size; + top: 2px; + left: 2px; + background: #fff; + border-radius: 50%; + transition: left .3s ease-out; + box-shadow: 0 2px 4px 0 $-switch-inactive-shadow-color; + + &::after { + position: absolute; + content: ''; + width: calc(200% - 2px); + height: calc(200% - 2px); + top: 50%; + left: 50%; + transform: translate(-50%, -50%) scale(0.5); + border: 1px solid $-switch-border-color; + border-radius: 50%; + } + } + @include when(checked) { + background: $-switch-active-color; + border-color: $-switch-active-color; + + .wd-switch__circle { + left: calc($-switch-width - $-switch-circle-size - 2px); + box-shadow: 0 2px 4px 0 $-switch-active-shadow-color + } + } + @include when(disabled) { + opacity: 0.5; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-switch/types.ts b/src/uni_modules/wot-design-uni/components/wd-switch/types.ts new file mode 100644 index 0000000..ad38038 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-switch/types.ts @@ -0,0 +1,58 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, numericProp } from '../common/props' + +export type SwitchBeforeChangeOption = { + value: number | string | boolean + resolve: (pass: boolean) => void +} + +export type SwitchBeforeChange = (option: SwitchBeforeChangeOption) => void + +export const switchProps = { + ...baseProps, + /** + * 绑定值 + */ + modelValue: { + type: [Boolean, String, Number], + required: true, + default: false + }, + /** + * 是否禁用 + */ + disabled: makeBooleanProp(false), + /** + * 激活值 + */ + activeValue: { + type: [Boolean, String, Number], + default: true + }, + /** + * 非激活值 + */ + inactiveValue: { + type: [Boolean, String, Number], + default: false + }, + /** + * 激活颜色 + */ + activeColor: String, + /** + * 非激活颜色 + */ + inactiveColor: String, + /** + * 大小 + */ + size: { + type: numericProp + }, + /** + * 在改变前执行的函数 + */ + beforeChange: Function as PropType +} +export type SwitchProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-switch/wd-switch.vue b/src/uni_modules/wot-design-uni/components/wd-switch/wd-switch.vue new file mode 100644 index 0000000..3e8e0d7 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-switch/wd-switch.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-tab/index.scss b/src/uni_modules/wot-design-uni/components/wd-tab/index.scss new file mode 100644 index 0000000..671d2f0 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tab/index.scss @@ -0,0 +1,16 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + + +@include b(tab) { + width: 100%; + flex-shrink: 0; + box-sizing: border-box; + + @include e(body) { + @include m(inactive) { + height: 0; + transition: height 0.3s ease-in-out; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-tab/types.ts b/src/uni_modules/wot-design-uni/components/wd-tab/types.ts new file mode 100644 index 0000000..26fde38 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tab/types.ts @@ -0,0 +1,30 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeBooleanProp, numericProp } from '../common/props' +import type { BadgeProps } from '../wd-badge/types' + +export const tabProps = { + ...baseProps, + /** + * 唯一标识符 + */ + name: numericProp, + /** + * tab的标题 + */ + title: String, + /** + * 是否禁用,无法点击 + */ + disabled: makeBooleanProp(false), + /** + * 是否懒加载,切换到该tab时才加载内容 + * @default true + */ + lazy: makeBooleanProp(true), + /** + * 徽标属性,透传给 Badge 组件 + */ + badgeProps: Object as PropType> +} + +export type TabProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-tab/wd-tab.vue b/src/uni_modules/wot-design-uni/components/wd-tab/wd-tab.vue new file mode 100644 index 0000000..ccfee6e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tab/wd-tab.vue @@ -0,0 +1,88 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-tabbar-item/index.scss b/src/uni_modules/wot-design-uni/components/wd-tabbar-item/index.scss new file mode 100644 index 0000000..f4958b9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabbar-item/index.scss @@ -0,0 +1,55 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(tabbar-item) { + @include e(body) { + :deep(){ + @include when(inactive) { + color: $-dark-color-gray; + } + } + } + } +} + + +@include b(tabbar-item) { + flex: 1; + text-align: center; + text-decoration: none; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + + @include e(body) { + display: flex; + align-items: center; + flex-direction: column; + line-height: 1; + padding: 0; + position: relative; + + :deep(){ + @include when(active) { + color: $-tabbar-active-color; + } + + @include when(inactive) { + color: $-tabbar-inactive-color; + } + } + } + + + @include e(body-title) { + font-size: $-tabbar-item-title-font-size; + line-height: $-tabbar-item-title-line-height; + } + + @include edeep(body-icon) { + font-size: $-tabbar-item-icon-size; + } + +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-tabbar-item/types.ts b/src/uni_modules/wot-design-uni/components/wd-tabbar-item/types.ts new file mode 100644 index 0000000..f620eda --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabbar-item/types.ts @@ -0,0 +1,51 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeNumberProp, numericProp } from '../common/props' +import type { BadgeProps } from '../wd-badge/types' + +/** + * 折叠面板子项 + */ +export interface TabbarItem { + // 唯一标识 + name: string | number +} + +export const tabbarItemProps = { + ...baseProps, + /** + * 标签页的标题 + */ + title: String, + /** + * 唯一标识符 + */ + name: numericProp, + /** + * 图标 + */ + icon: String, + /** + * 徽标显示值 + */ + value: { + type: [Number, String, null] as PropType, + default: null + }, + /** + * 是否点状徽标 + */ + isDot: { + type: Boolean, + default: undefined + }, + /** + * 徽标最大值 + */ + max: Number, + /** + * 徽标属性,透传给 Badge 组件 + */ + badgeProps: Object as PropType +} + +export type TabbarItemProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue b/src/uni_modules/wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue new file mode 100644 index 0000000..e14f9ba --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabbar-item/wd-tabbar-item.vue @@ -0,0 +1,99 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-tabbar/index.scss b/src/uni_modules/wot-design-uni/components/wd-tabbar/index.scss new file mode 100644 index 0000000..aa54b07 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabbar/index.scss @@ -0,0 +1,62 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(tabbar) { + background: $-dark-background; + } +} + +@include b(tabbar) { + display: flex; + align-items: center; + flex-wrap: nowrap; + position: relative; + background: $-color-white; + height: $-tabbar-height; + + @include e(placeholder) { + box-sizing: content-box; + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + } + + @include m(round) { + margin-left: 32rpx; + margin-right: 32rpx; + border-radius: 999px; + box-shadow: $-tabbar-box-shadow; + + @include when(fixed) { + @include when(safe) { + bottom: constant(safe-area-inset-bottom); + bottom: env(safe-area-inset-bottom); + } + } + + } + + @include m(default) { + + @include when(fixed) { + @include when(safe) { + box-sizing: content-box; + padding-bottom: constant(safe-area-inset-bottom); + padding-bottom: env(safe-area-inset-bottom); + } + } + + + @include when(border) { + @include halfPixelBorder('top'); + } + } + + @include when(fixed) { + position: fixed; + left: 0; + bottom: 0; + right: 0; + z-index: 500; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-tabbar/types.ts b/src/uni_modules/wot-design-uni/components/wd-tabbar/types.ts new file mode 100644 index 0000000..d3fb28a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabbar/types.ts @@ -0,0 +1,73 @@ +import { type ExtractPropTypes, type InjectionKey } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' +import type { TabbarItem } from '../wd-tabbar-item/types' + +type TabbarShape = 'default' | 'round' + +export type TabbarProvide = { + props: { + // 选中标签的索引值或者名称 + modelValue?: number | string + // 是否固定在底部 + fixed?: boolean + // 是否设置底部安全距离(iphone X 类型的机型) + safeAreaInsetBottom?: boolean + // 是否显示顶部边框 + bordered?: boolean + // 标签栏的形状。可选项:default/round + shape?: TabbarShape + // 激活标签的颜色 + activeColor?: string + // 未激活标签的颜色 + inactiveColor?: string + // 固定在底部时,是否在标签位置生成一个等高的占位元素 + placeholder?: boolean + // 自定义组件的层级 + zIndex?: number + } + setChange: (child: TabbarItem) => void +} + +export const TABBAR_KEY: InjectionKey = Symbol('wd-tabbar') + +export const tabbarProps = { + ...baseProps, + /** + * 选中标签的索引值或者名称 + */ + modelValue: makeNumericProp(0), + /** + * 是否固定在底部 + */ + fixed: makeBooleanProp(false), + /** + * 是否显示顶部边框 + */ + bordered: makeBooleanProp(true), + /** + * 是否设置底部安全距离(iPhone X 类型的机型) + */ + safeAreaInsetBottom: makeBooleanProp(false), + /** + * 标签栏的形状。可选项:default/round + */ + shape: makeStringProp('default'), + /** + * 激活标签的颜色 + */ + activeColor: String, + /** + * 未激活标签的颜色 + */ + inactiveColor: String, + /** + * 固定在底部时,是否在标签位置生成一个等高的占位元素 + */ + placeholder: makeBooleanProp(false), + /** + * 自定义组件的层级 + */ + zIndex: makeNumberProp(99) +} + +export type TabbarProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-tabbar/wd-tabbar.vue b/src/uni_modules/wot-design-uni/components/wd-tabbar/wd-tabbar.vue new file mode 100644 index 0000000..85a42ee --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabbar/wd-tabbar.vue @@ -0,0 +1,91 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-table-col/index.scss b/src/uni_modules/wot-design-uni/components/wd-table-col/index.scss new file mode 100644 index 0000000..d1d1f35 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-table-col/index.scss @@ -0,0 +1,46 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@import '../wd-table/index'; + +.wot-theme-dark { + @include b(table-col) { + @include when(shadow) { + &::after { + background: linear-gradient(270deg, rgba(17, 17, 17, 0.2) 0%, rgba(0, 0, 0, 0) 100%); + } + } + } +} + + +@include b(table-col) { + .wd-table__cell { + width: 100%; + } + + @include m(fixed) { + position: sticky; + z-index: 1; + left: 0; + } + + @include when(shadow) { + &::after { + content: ' '; + position: absolute; + height: 100%; + right: -30rpx; + top: 0; + width: 30rpx; + height: 100%; + background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.04) 100%); + } + } + + .wd-table__cell:last-child { + @include when(border) { + border-bottom: none; + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-table-col/types.ts b/src/uni_modules/wot-design-uni/components/wd-table-col/types.ts new file mode 100644 index 0000000..4f067aa --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-table-col/types.ts @@ -0,0 +1,54 @@ +import type { ComponentPublicInstance, ExtractPropTypes } from 'vue' +import { makeBooleanProp, makeNumericProp, makeRequiredProp, makeStringProp } from '../common/props' + +export type AlignType = 'left' | 'center' | 'right' // 列的对齐方式 + +export type SortDirection = 0 | 1 | -1 // 列的排序方向 + +export interface TableColumn { + // 列对应字段 + prop: string + // 列对应字段标题 + label: string + // 列宽度 + width: string | number + // 是否开启列排序 + sortable?: boolean + // 列的对齐方式,可选值left,center,right + align?: AlignType + // 列的排序方向 + sortDirection: SortDirection + // 是否i固定列 + fixed?: boolean +} + +export const tableColumnProps = { + /** + * 列对应字段 + */ + prop: makeRequiredProp(String), + /** + * 列对应字段标题 + */ + label: makeRequiredProp(String), + /** + * 列宽度,单位px + */ + width: makeNumericProp(100), + /** + * 是否开启列排序 + */ + sortable: makeBooleanProp(false), + /** + * 是否固定本列 + */ + fixed: makeBooleanProp(false), + /** + * 列的对齐方式,可选值left,center,right + */ + align: makeStringProp('left') +} + +export type TableColumnProps = ExtractPropTypes + +export type TableColumnInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue b/src/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue new file mode 100644 index 0000000..41abb8e --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-table-col/wd-table-col.vue @@ -0,0 +1,149 @@ + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-table/index.scss b/src/uni_modules/wot-design-uni/components/wd-table/index.scss new file mode 100644 index 0000000..f751026 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-table/index.scss @@ -0,0 +1,163 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +.wot-theme-dark { + @include b(table) { + background: $-dark-background; + + @include when(border) { + border: 1px solid $-dark-border-color; + } + + @include e(cell) { + color: $-dark-color; + background: $-dark-background2; + + @include when(stripe) { + background: $-dark-background4; + } + + @include when(border) { + border-right: 1px solid $-dark-border-color; + border-bottom: 1px solid $-dark-border-color; + } + + @include when(shadow) { + &::after { + background: linear-gradient(270deg, rgba(17, 17, 17, 0.2) 0%, rgba(0, 0, 0, 0) 100%); + } + } + } + } +} + + + +@include b(table) { + position: relative; + width: 100%; + overflow: auto; + background: $-table-bg; + + @include when(border) { + border: 1px solid $-table-border-color; + } + + :deep() { + .wd-table-col:last-child { + .wd-table__cell { + @include when(border) { + border-right: none; + } + } + } + } + + @include e(header) { + width: 100%; + height: 50px; + position: sticky; + top: 0; + z-index: 2; + display: flex; + overflow-x: auto; + white-space: nowrap; + } + + @include e(body) { + width: 100%; + box-sizing: border-box; + } + + @include e(content) { + display: flex; + + @include m(header) { + position: sticky; + top: 0; + z-index: 2 + } + } + + @include e(cell) { + display: flex; + align-items: center; + box-sizing: border-box; + background: $-table-bg; + width: 100px; + min-height: 50px; + padding: 8px 10px; + font-size: $-table-font-size; + color: $-table-color; + --wot-sort-button-height: 30px; + + @include when(border) { + border-right: 1px solid $-table-border-color; + border-bottom: 1px solid $-table-border-color; + } + + @include when(stripe) { + background: $-table-stripe-bg; + } + + @include when(fixed) { + position: sticky; + z-index: 1; + left: 0; + } + + @include when(shadow) { + &::after { + content: ' '; + position: absolute; + height: 100%; + right: -30rpx; + top: 0; + width: 30rpx; + height: 100%; + background: linear-gradient(270deg, rgba(255, 255, 255, 0) 0%, rgba(0, 0, 0, 0.04) 100%); + } + } + + @include when(left) { + justify-content: flex-start; + } + + @include when(center) { + justify-content: center; + } + + @include when(right) { + justify-content: flex-end; + } + } + + @include e(wrapper) { + width: 100%; + overflow: auto; + } + + @include e(inner) { + display: flex; + flex-direction: column; + } + + @include e(header-row) { + display: flex; + flex-direction: row; + width: 100%; + } + + @include e(body) { + display: flex; + width: 100%; + } + + @include e(value) { + white-space: normal; + @include when(ellipsis) { + word-break: break-all; + @include multiEllipsis(2); + } + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-table/types.ts b/src/uni_modules/wot-design-uni/components/wd-table/types.ts new file mode 100644 index 0000000..f09d875 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-table/types.ts @@ -0,0 +1,67 @@ +/* + * @Author: weisheng + * @Date: 2024-03-15 11:36:12 + * @LastEditTime: 2024-12-08 23:22:26 + * @LastEditors: weisheng + * @Description: + * @FilePath: /wot-design-uni/src/uni_modules/wot-design-uni/components/wd-table/types.ts + * 记得注释 + */ +import type { CSSProperties, ExtractPropTypes, InjectionKey } from 'vue' +import { baseProps, makeBooleanProp, makeNumericProp, makeRequiredProp, numericProp } from '../common/props' +import type { TableColumnProps } from '../wd-table-col/types' +import type { PropType } from 'vue' + +export const tableProps = { + ...baseProps, + /** + * 显示的数据 + */ + data: makeRequiredProp(Array>), + /** + * 是否带有边框 + */ + border: makeBooleanProp(true), + /** + * 是否为斑马纹 table + */ + stripe: makeBooleanProp(true), + /** + * Table 的高度 + */ + height: numericProp, + /** + * 行高 + */ + rowHeight: makeNumericProp(50), + /** + * 是否显示表头 + */ + showHeader: makeBooleanProp(true), + /** + * 是否超出2行隐藏 + */ + ellipsis: makeBooleanProp(true), + /** + * 是否显示索引列 + */ + index: { + type: [Object, Boolean] as PropType, 'prop'>>, + default: false + }, + fixedHeader: makeBooleanProp(true) +} + +export type TableProps = ExtractPropTypes + +export type TableProvide = { + props: Omit + state: { + scrollLeft: number + } + rowClick: (index: number) => void + getIsLastFixed: (column: { fixed: boolean; prop: string }) => boolean + getFixedStyle: (index: number, style: CSSProperties) => CSSProperties +} + +export const TABLE_KEY: InjectionKey = Symbol('wd-table') diff --git a/src/uni_modules/wot-design-uni/components/wd-table/wd-table.vue b/src/uni_modules/wot-design-uni/components/wd-table/wd-table.vue new file mode 100644 index 0000000..123d402 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-table/wd-table.vue @@ -0,0 +1,284 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-tabs/index.scss b/src/uni_modules/wot-design-uni/components/wd-tabs/index.scss new file mode 100644 index 0000000..54e0295 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabs/index.scss @@ -0,0 +1,299 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + + +.wot-theme-dark { + @include b(tabs) { + background: $-dark-background2; + + @include e(nav) { + background: $-dark-background2; + } + + @include e(nav-item) { + color: $-dark-color3; + + @include when(active) { + font-weight: 600; + color: $-dark-color; + } + + @include when(disabled) { + color: $-dark-color-gray; + } + + } + + @include e(map-nav-btn) { + background-color: $-dark-background4; + color: $-dark-color3; + + @include when(active) { + color: $-dark-color; + border: 1px solid $-tabs-nav-active-color; + background-color: $-dark-background; + } + + @include when(disabled) { + color: $-dark-color-gray; + border-color: #f4f4f4; + } + } + + @include e(map-btn) { + background: $-dark-background2; + color: $-dark-color3; + } + + @include e(map-header) { + background: $-dark-background2; + color: $-dark-color; + + &::after { + background: $-dark-background4; + } + } + + @include e(map-body) { + background: $-dark-background2; + } + + } +} + +@include b(tabs) { + position: relative; + background: #fff; + width: 100%; + + @include e(nav) { + left: 0; + right: 0; + height: $-tabs-nav-height; + background-color: #fff; + width: 100%; + position: relative; + + @include m(wrap) { + height: 100%; + overflow: hidden; + } + + @include m(sticky) { + width: 100vw; + } + } + + @include e(nav-container) { + position: relative; + display: flex; + user-select: none; + } + + @include e(nav-item) { + position: relative; + display: flex; + align-items: center; + justify-content: center; + flex: 1; + min-width: 0; + height: $-tabs-nav-height; + font-size: $-tabs-nav-fs; + color: $-tabs-nav-color; + transition: color .3s; + + @include when(active) { + font-weight: 600; + } + + @include when(disabled) { + color: $-tabs-nav-disabled-color; + } + } + + @include e(nav-item-text) { + @include lineEllipsis(); + } + + @include edeep(nav-item-badge){ + display: flex; + align-items: center; + justify-content: center; + max-width: 100%; + min-width: 0; + } + + @include e(line) { + position: absolute; + bottom: 4px; + left: 0; + z-index: 1; + height: $-tabs-nav-line-height; + width: $-tabs-nav-line-width; + background: $-tabs-nav-line-bg-color; + border-radius: calc($-tabs-nav-line-height / 2); + + @include m(inner) { + left: 50%; + transform: translateX(-50%) + } + } + + @include e(container) { + overflow: hidden; + } + + @include e(body) { + position: relative; + width: 100%; + height: 100%; + + @include when(animated) { + display: flex; + transition-property: left; + } + } + + @include e(map) { + position: absolute; + top: 0; + left: 0; + right: 0; + z-index: 1; + } + + @include e(map-btn) { + position: absolute; + right: 0; + top: 0; + width: $-tabs-nav-height; + height: $-tabs-nav-height; + line-height: $-tabs-nav-height; + text-align: center; + color: $-tabs-nav-map-arrow-color; + z-index: 1; + background: $-tabs-nav-bg; + -webkit-tap-highlight-color: transparent; + + &::before { + position: absolute; + content: ''; + top: 0; + left: -24px; + width: 24px; + height: $-tabs-nav-height - 1; + background: $-tabs-nav-map-btn-before-bg; + } + } + + @include e(map-arrow) { + display: block; + transition: transform .3s; + + @include when(open) { + transform: rotate(180deg); + } + } + + @include e(map-header) { + position: relative; + padding-left: 17px; + height: $-tabs-nav-height; + line-height: $-tabs-nav-height; + font-size: $-tabs-nav-map-fs; + color: $-tabs-nav-map-color; + transition: opacity .3s; + background: #fff; + opacity: 0; + + @include halfPixelBorder; + + &::after { + z-index: 3; + } + } + + @include e(map-body) { + display: flex; + flex-wrap: wrap; + padding: 20px 15px 10px; + background: #fff; + transition: transform .3s; + transform: scaleY(0); + transform-origin: center top; + + @include when(open) { + transform: scaleY(1); + } + } + + @include e(map-nav-item) { + flex-basis: 33%; + + &:nth-child(3n + 2) { + text-align: center; + } + + &:nth-child(3n + 3) { + text-align: right; + } + } + + @include e(map-nav-btn) { + @include buttonClear; + @include lineEllipsis; + display: inline-block; + width: 107px; + height: 32px; + line-height: 32px; + background-color: $-tabs-nav-map-button-back-color; + border-color: transparent; + margin-bottom: 10px; + border-radius: $-tabs-nav-map-button-radius; + color: $-tabs-nav-map-color; + font-size: $-tabs-nav-map-fs; + text-align: center; + transition: color .3s, border-color .3s; + + @include when(active) { + color: $-tabs-nav-active-color; + border: 1px solid $-tabs-nav-active-color; + background-color: $-tabs-nav-bg + } + + @include when(disabled) { + color: $-tabs-nav-disabled-color; + border-color: #f4f4f4; + } + } + + @include e(mask) { + position: absolute; + top: $-tabs-nav-height; + left: 0; + right: 0; + bottom: 0; + background: $-tabs-nav-map-modal-bg; + opacity: 0; + transition: opacity .3s; + } + + @include when(slide) { + .wd-tabs__nav-item { + flex: 0 0 auto; + padding: 0 17px; + } + } + + @include when(map) { + .wd-tabs__nav--wrap { + padding-right: 40px; + } + } +} + +@media screen and (max-width: 330px) { + .wd-tabs__map-nav-btn { + width: 90px; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-tabs/types.ts b/src/uni_modules/wot-design-uni/components/wd-tabs/types.ts new file mode 100644 index 0000000..7d4f144 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabs/types.ts @@ -0,0 +1,107 @@ +import { type ComponentPublicInstance, type ExtractPropTypes, type InjectionKey } from 'vue' +import { baseProps, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp, numericProp } from '../common/props' + +export type TabsProvide = { + state: { + activeIndex: number + lineStyle: string // 激活项边框线样式 + inited: boolean // 是否初始化 + animating: boolean // 是否动画中 + mapShow: boolean // map的开关 + scrollLeft: number // scroll-view偏移量 + } + props: Partial +} + +export type TabsSlidable = 'auto' | 'always' + +export const TABS_KEY: InjectionKey = Symbol('wd-tabs') + +export const tabsProps = { + ...baseProps, + /** + * 绑定值 + */ + modelValue: makeNumericProp(0), + /** + * 标签数超过阈值可滑动 + */ + slidableNum: makeNumberProp(6), + /** + * 标签数超过阈值显示导航地图 + */ + mapNum: makeNumberProp(10), + /** + * 导航地图的标题 + */ + mapTitle: String, + /** + * 粘性布局 + */ + sticky: makeBooleanProp(false), + /** + * 粘性布局吸顶位置 + */ + offsetTop: makeNumberProp(0), + /** + * 开启手势滑动 + */ + swipeable: makeBooleanProp(false), + /** + * 自动调整底部条宽度,设置了 lineWidth 后无效 + */ + autoLineWidth: makeBooleanProp(false), + /** + * 底部条宽度,单位像素 + */ + lineWidth: numericProp, + /** + * 底部条高度,单位像素 + */ + lineHeight: numericProp, + /** + * 颜色 + */ + color: makeStringProp(''), + /** + * 非活动状态颜色 + */ + inactiveColor: makeStringProp(''), + /** + * 是否开启切换标签内容时的过渡动画 + */ + animated: makeBooleanProp(false), + /** + * 切换动画过渡时间,单位毫秒 + */ + duration: makeNumberProp(300), + /** + * 是否开启滚动导航 + * 可选值:'auto' | 'always' + * @default auto + */ + slidable: makeStringProp('auto') +} + +export type TabsExpose = { + /** + * 设置激活项 + * @param value 激活值 + * @param init 是否已初始化 + * @param setScroll 是否设置scroll-view滚动 + */ + setActive: (value: number | string, init: boolean, setScroll: boolean) => void + /** + * 使选中项滚动到可视区域 + */ + scrollIntoView: () => void + /** + * 更新激活项边框线样式 + * @param animation 是否开启动画,默认开启 + */ + updateLineStyle: (animation?: boolean) => void +} + +export type TabsProps = ExtractPropTypes + +export type TabsInstance = ComponentPublicInstance diff --git a/src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue b/src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue new file mode 100644 index 0000000..90646b6 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tabs/wd-tabs.vue @@ -0,0 +1,439 @@ + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-tag/index.scss b/src/uni_modules/wot-design-uni/components/wd-tag/index.scss new file mode 100644 index 0000000..3285d58 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tag/index.scss @@ -0,0 +1,115 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + +@mixin tag-type-style ($normalColor, $normalBg) { + background: $normalBg; + + @include when(plain) { + background: transparent; + color: $normalColor; + border: 1px solid $normalColor; + padding: 0 4px; + } + @include when(round) { + line-height: 1.2; + font-size: $-tag-fs; + padding: 4px 11px; + background: transparent; + color: if($normalColor != $-tag-info-color, $normalColor, $-tag-round-color); + border: 1px solid if($normalColor != $-tag-info-color, $normalColor, $-tag-round-border-color); + border-radius: $-tag-round-radius; + } + @include when(mark) { + padding: 1px 6px; + border-radius: $-tag-mark-radius; + + @include when(plain) { + padding: 0 6px; + } + } + @include when(active) { + color: $-tag-primary-color; + border-color: $-tag-primary-color; + } +} +@include b(tag) { + font-size: $-tag-small-fs; + display: inline-block; + color: $-tag-color; + padding: 0 3px; + border-radius: 2px; + transition: opacity .3s; + vertical-align: middle; + line-height: initial; + + @include when(default) { + @include tag-type-style($-tag-info-color, $-tag-info-bg); + } + @include when(primary) { + @include tag-type-style($-tag-primary-color, $-tag-primary-bg); + } + @include when(danger) { + @include tag-type-style($-tag-danger-color, $-tag-danger-bg); + } + @include when(warning) { + @include tag-type-style($-tag-warning-color, $-tag-warning-bg); + } + @include when(success) { + @include tag-type-style($-tag-success-color, $-tag-success-bg); + } + @include when(icon) { + font-size: $-tag-fs; + line-height: 1.2; + padding: 2px 5px; + } + @include when(dynamic) { + box-sizing: border-box; + width: 88px; + transition: .3s; + + &:active { + color: $-tag-primary-color; + border-color: $-tag-primary-color; + } + } + @include when(dynamic-input) { + border-color: $-tag-primary-color; + } + @include edeep(icon) { + display: inline-block; + margin-right: 4px; + font-size: $-tag-fs; + line-height: 1.2; + vertical-align: baseline; + } + @include e(text) { + display: inline-block; + vertical-align: text-top; + } + @include e(add-text) { + width: 60px; + height: 14px; + min-height: 14px; + display: inline-block; + font-size: $-tag-fs; + vertical-align: middle; + padding: 0; + } + @include e(close) { + display: inline-block; + margin-left: 24px; + margin-right: -4px; + font-size: $-tag-close-size; + height: 14px; + line-height: 1.1; + vertical-align: text-bottom; + color: $-tag-close-color; + + &:active { + color: $-tag-close-active-color; + } + } + @include edeep(add) { + vertical-align: bottom; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-tag/types.ts b/src/uni_modules/wot-design-uni/components/wd-tag/types.ts new file mode 100644 index 0000000..39cc0e9 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tag/types.ts @@ -0,0 +1,81 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeStringProp } from '../common/props' + +export type TagType = 'default' | 'primary' | 'success' | 'warning' | 'danger' + +export const tagProps = { + ...baseProps, + + /** + * 是否开启图标插槽 + * 类型:boolean + * 默认值:false + */ + useIconSlot: makeBooleanProp(false), + + /** + * 标签类型 + * 类型:string + * 可选值:'default' / 'primary' / 'danger' / 'warning' / 'success' + * 默认值:'default' + */ + type: makeStringProp('default'), + + /** + * 左侧图标 + * 类型:string + * 默认值:空字符串 + */ + icon: makeStringProp(''), + + /** + * 是否可关闭(只对圆角类型支持) + * 类型:boolean + * 默认值:false + */ + closable: makeBooleanProp(false), + + /** + * 幽灵类型 + * 类型:boolean + * 默认值:false + */ + plain: makeBooleanProp(false), + + /** + * 是否为新增标签 + * 类型:boolean + * 默认值:false + */ + dynamic: makeBooleanProp(false), + + /** + * 文字颜色 + * 类型:string + * 默认值:空字符串 + */ + color: makeStringProp(''), + + /** + * 背景色和边框色 + * 类型:string + * 默认值:空字符串 + */ + bgColor: makeStringProp(''), + + /** + * 圆角类型 + * 类型:boolean + * 默认值:false + */ + round: makeBooleanProp(false), + + /** + * 标记类型 + * 类型:boolean + * 默认值:false + */ + mark: makeBooleanProp(false) +} + +export type TagProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-tag/wd-tag.vue b/src/uni_modules/wot-design-uni/components/wd-tag/wd-tag.vue new file mode 100644 index 0000000..09b8e07 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-tag/wd-tag.vue @@ -0,0 +1,148 @@ + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-text/index.scss b/src/uni_modules/wot-design-uni/components/wd-text/index.scss new file mode 100644 index 0000000..888649d --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-text/index.scss @@ -0,0 +1,37 @@ +@import '../common/abstracts/variable'; +@import '../common/abstracts/mixin'; + + + +@include b(text) { + + @include when(bold) { + font-weight: bold; + } + + @for $i from 1 through 5 { + &.is-lines-#{$i} { + @include multiEllipsis($i); + } + } + + @include when(default) { + color: $-text-info-color; + } + + @include when(primary) { + color: $-text-primary-color; + } + + @include when(error) { + color: $-text-error-color; + } + + @include when(warning) { + color: $-text-warning-color; + } + + @include when(success) { + color: $-text-success-color; + } +} \ No newline at end of file diff --git a/src/uni_modules/wot-design-uni/components/wd-text/types.ts b/src/uni_modules/wot-design-uni/components/wd-text/types.ts new file mode 100644 index 0000000..6aacac8 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-text/types.ts @@ -0,0 +1,98 @@ +import type { ExtractPropTypes } from 'vue' +import { baseProps, makeBooleanProp, makeNumericProp, makeStringProp } from '../common/props' + +export type TextType = 'default' | 'primary' | 'success' | 'warning' | 'error' + +export const textProps = { + ...baseProps, + /** + * 主题类型 + * 类型:string + * 可选值:'default' /'primary' / 'error' / 'warning' / 'success' + * 默认值:'default' + */ + type: makeStringProp('default'), + /** + * 文字 + * 类型:string | number + * 默认值:'空字符串' + */ + text: makeNumericProp(''), + /** + * 字体大小 + * 类型:string + * 默认值:'空字符串' + */ + size: makeStringProp(''), + /** + * 文本处理的匹配模式 + * 可选值:'text-普通文本' / 'date - 日期' / 'phone - 手机号' / 'name - 姓名' / 'price - 金额' + * 类型:string + * 默认值:'text' + */ + mode: makeStringProp('text'), + /** + * 文字装饰,下划线,中划线等 + * 可选值:'underline/line-through/overline' + * 类型:string + * 默认值:'none' + */ + decoration: makeStringProp('none'), + + /** + * mode=phone时,点击文本是否拨打电话 + * 类型:boolean + * 默认值:false + */ + call: makeBooleanProp(false), + /** + * 是否粗体,默认normal + * 类型:boolean + * 默认值:false + */ + bold: makeBooleanProp(false), + /** + * 是否脱敏,当mode为phone和name时生效 + * 类型:boolean + * 默认值:false + */ + format: makeBooleanProp(false), + /** + * 文本颜色 + * 类型:string + * 默认值:'' + */ + color: makeStringProp(''), + /** + * 前置插槽 + * 类型:string + * 默认值:'' + */ + prefix: String, + /** + * 后置插槽 + * 类型:string + * 默认值:'' + */ + suffix: String, + /** + * 文本显示的行数,如果设置,超出此行数,将会显示省略号。最大值为5。 + */ + lines: Number, + /** + * 文本行高 + * 类型:string + * 默认值:'' + */ + lineHeight: makeStringProp(''), + /** + * 自定义根节点样式 + */ + customStyle: makeStringProp(''), + /** + * 自定义根节点样式类 + */ + customClass: makeStringProp('') +} + +export type TextProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-text/wd-text.vue b/src/uni_modules/wot-design-uni/components/wd-text/wd-text.vue new file mode 100644 index 0000000..9af8d45 --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-text/wd-text.vue @@ -0,0 +1,139 @@ + + + + + + + diff --git a/src/uni_modules/wot-design-uni/components/wd-textarea/index.scss b/src/uni_modules/wot-design-uni/components/wd-textarea/index.scss new file mode 100644 index 0000000..224c1bd --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-textarea/index.scss @@ -0,0 +1,340 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(textarea) { + background: $-dark-background2; + + &::after { + background: $-dark-color-gray; + } + + @include when(not-empty) { + &:not(.is-disabled) { + &::after { + background-color: $-dark-color; + } + } + } + + @include e(value) { + background: $-dark-background2; + } + + @include e(inner) { + color: $-dark-color; + + &::-webkit-input-placeholder { + color: $-dark-color3; + } + } + + @include e(count) { + color: $-dark-color3; + background: transparent; + } + + @include e(count-current) { + color: $-dark-color; + } + + :deep(.wd-textarea__icon), + :deep(.wd-textarea__clear) { + color: $-dark-color; + background: transparent; + } + + @include when(cell) { + background-color: $-dark-background2; + + @include when(border) { + @include halfPixelBorder("top", $-textarea-cell-padding, $-dark-border-color); + } + } + + @include when(disabled) { + + .wd-textarea__inner { + color: $-dark-color-gray; + background: transparent; + } + } + + + @include e(label) { + color: $-dark-color; + } + } +} + +@include b(textarea) { + position: relative; + -webkit-tap-highlight-color: transparent; + text-align: left; + background: $-textarea-bg; + padding: $-textarea-cell-padding $-textarea-padding; + + &::after { + position: absolute; + display: none; + content: ""; + bottom: 0; + left: 0; + right: 0; + height: 1px; + background: $-textarea-border-color; + transform: scaleY(0.5); + transition: background-color 0.2s ease-in-out; + } + + + + @include e(label) { + position: relative; + display: flex; + width: $-input-cell-label-width; + color: $-cell-title-color; + margin-right: $-cell-padding; + box-sizing: border-box; + font-size: $-textarea-fs; + flex-shrink: 0; + + + } + + @include e(label-inner) { + display: inline-block; + line-height: $-cell-line-height; + font-size: $-textarea-fs; + } + + + + @include e(required) { + font-size: $-cell-required-size; + color: $-cell-required-color; + margin-left: $-cell-required-margin; + + @include m(left) { + margin-left: 0; + margin-right: $-cell-required-margin; + } + } + + @include e(prefix) { + margin-right: $-textarea-icon-margin; + font-size: $-textarea-fs; + line-height: initial; + + :deep(.wd-textarea__icon) { + margin-left: 0; + } + } + + @include e(suffix) { + flex-shrink: 0; + line-height: initial; + } + + @include e(value) { + position: relative; + padding: 0; + font-size: 0; + background: $-textarea-bg; + box-sizing: border-box; + + @include when(show-limit) { + padding-bottom: 36px; + } + + @include when(suffix) { + padding-right: calc($-textarea-icon-size + 8px); + } + } + + + @include e(inner) { + padding: 0; + width: 100%; + font-size: $-textarea-fs; + line-height: $-cell-line-height; + color: $-textarea-color; + outline: none; + background: none; + border: none; + box-sizing: border-box; + word-break: break-word; + min-height: 24px; + + &::-webkit-input-placeholder { + color: $-input-placeholder-color; + } + } + + @include e(suffix) { + position: absolute; + z-index: 1; + right: 0; + top: 0; + bottom: 0; + } + + @include edeep(icon) { + margin-left: $-textarea-icon-margin; + font-size: $-textarea-icon-size; + color: $-textarea-icon-color; + background: $-textarea-bg; + } + + @include edeep(clear) { + margin-left: $-textarea-icon-margin; + font-size: $-textarea-icon-size; + color: $-textarea-clear-color; + vertical-align: middle; + background: $-textarea-bg; + line-height: $-cell-line-height; + } + + + @include e(count) { + position: absolute; + bottom: 8px; + right: 0; + font-size: $-textarea-count-fs; + color: $-textarea-count-color; + background: $-textarea-bg; + line-height: 20px; + display: inline-flex; + } + + @include e(count-current) { + color: $-textarea-count-current-color; + + @include when(error) { + color: $-input-error-color; + } + } + + @include e(readonly-mask) { + position: absolute; + top: 0; + left: 0; + z-index: 2; + width: 100%; + height: 100%; + } + + @include e(error-message) { + color: $-form-item-error-message-color; + font-size: $-form-item-error-message-font-size; + line-height: $-form-item-error-message-line-height; + text-align: left; + vertical-align: middle; + } + + @include when(not-empty) { + &:not(.is-disabled) { + &::after { + background-color: $-textarea-not-empty-border-color; + } + } + } + + @include when(disabled) { + + .wd-textarea__inner { + color: $-input-disabled-color; + background: transparent; + } + } + + @include when(error) { + + .wd-textarea__inner { + color: $-input-error-color; + background: transparent; + } + } + + @include when(auto-height) { + &:not(.is-cell) { + padding: 5px 0; + } + + &::after { + display: block; + } + } + + @include when(no-border) { + &::after { + display: none; + } + } + + @include when(cell) { + display: flex; + line-height: $-cell-line-height; + + &.is-error::after { + background: $-textarea-cell-border-color; + } + + .wd-textarea__value { + flex: 1; + } + + :deep(.wd-textarea__icon) { + display: inline-flex; + align-items: center; + height: $-textarea-cell-height; + line-height: $-textarea-cell-height; + } + + .wd-textarea__prefix { + display: inline-block; + margin-right: $-cell-icon-right; + } + + &.wd-textarea::after { + display: none; + } + + .wd-textarea__suffix { + right: 0; + } + + @include when(center) { + align-items: center; + } + + @include when(border) { + @include halfPixelBorder("top", $-textarea-cell-padding); + } + } + + @include when(large) { + padding: $-textarea-cell-padding-large; + + .wd-textarea__prefix { + font-size: $-textarea-fs-large; + } + + .wd-textarea__label-inner { + font-size: $-textarea-fs-large; + } + + .wd-textarea__inner { + font-size: $-textarea-fs-large; + } + + .wd-textarea__count { + font-size: $-textarea-count-fs-large; + } + + :deep(.wd-textarea__icon), + :deep(.wd-textarea__clear) { + font-size: $-textarea-icon-size-large; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-textarea/placeholder.scss b/src/uni_modules/wot-design-uni/components/wd-textarea/placeholder.scss new file mode 100644 index 0000000..8abd57a --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-textarea/placeholder.scss @@ -0,0 +1,20 @@ +@import "../common/abstracts/variable"; +@import "../common/abstracts/mixin"; + +.wot-theme-dark { + @include b(textarea) { + @include e(placeholder) { + color: $-dark-color3; + } + } +} + +@include b(textarea) { + @include e(placeholder) { + color: $-input-placeholder-color; + + &.is-error { + color: $-input-error-color; + } + } +} diff --git a/src/uni_modules/wot-design-uni/components/wd-textarea/types.ts b/src/uni_modules/wot-design-uni/components/wd-textarea/types.ts new file mode 100644 index 0000000..603c14f --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-textarea/types.ts @@ -0,0 +1,288 @@ +import type { ExtractPropTypes, PropType } from 'vue' +import { baseProps, makeArrayProp, makeBooleanProp, makeNumberProp, makeNumericProp, makeStringProp } from '../common/props' +import type { FormItemRule } from '../wd-form/types' +import type { InputClearTrigger, InputMode } from '../wd-input/types' + +export type ConfirmType = 'send' | 'search' | 'next' | 'go' | 'done' + +export const textareaProps = { + ...baseProps, + /** + * * 自定义文本域容器class名称。 + * 类型:string + */ + customTextareaContainerClass: makeStringProp(''), + + /** + * * 自定义文本域class名称。 + * 类型:string + */ + customTextareaClass: makeStringProp(''), + + /** + * * 自定义标签class名称。 + * 类型:string + */ + customLabelClass: makeStringProp(''), + // 原生属性 + /** + * * 绑定值。 + * 类型:string | number + */ + modelValue: makeNumericProp(''), + + /** + * * 占位文本。 + * 类型:string + * 默认值:'请输入...' + */ + placeholder: String, + + /** + * 指定placeholder的样式。 + * 类型:string + */ + placeholderStyle: String, + + /** + * * 指定placeholder的样式类。 + * 类型:string + * 默认值:空字符串 + */ + placeholderClass: makeStringProp(''), + + /** + * * 禁用输入框。 + * 类型:boolean + * 默认值:false + */ + disabled: makeBooleanProp(false), + + /** + * * 最大输入长度,设置为-1表示不限制最大长度。 + * 类型:number + * 默认值:-1 + */ + maxlength: makeNumberProp(-1), + + /** + * * 自动聚焦并拉起键盘。 + * 类型:boolean + * 默认值:false + */ + autoFocus: makeBooleanProp(false), + + /** + * * 获取焦点。 + * 类型:boolean + * 默认值:false + */ + focus: makeBooleanProp(false), + + /** + * * 是否自动增高输入框高度,style.height属性在auto-height生效时不生效。 + * 类型:boolean + * 默认值:false + */ + autoHeight: makeBooleanProp(false), + + /** + * * 如果textarea处于position:fixed区域,需要设置此属性为true。 + * 类型:boolean + * 默认值:false + */ + fixed: makeBooleanProp(false), + + /** + * * 指定光标与键盘的距离,取textarea距离底部的距离和cursor-spacing指定的距离的最小值作为实际距离。 + * 类型:number + * 默认值:0 + */ + cursorSpacing: makeNumberProp(0), + + /** + * * 指定focus时的光标位置。 + * 类型:number + * 默认值:-1 + */ + cursor: makeNumberProp(-1), + + /** + * * 设置键盘右下角按钮的文字。 + * 类型:string + * 默认值:'done' + * 可选值有'done', 'go', 'next', 'search', 'send' + */ + confirmType: String as PropType, + + /** + * * 点击键盘右下角按钮时是否保持键盘不收起。 + * 类型:boolean + * 默认值:false + */ + confirmHold: makeBooleanProp(false), + + /** + * * 是否显示键盘上方带有“完成”按钮那一栏。 + * 类型:boolean + * 默认值:true + */ + showConfirmBar: makeBooleanProp(true), + + /** + * * 光标起始位置,自动聚集时有效,需与selection-end搭配使用。 + * 类型:number + * 默认值:-1 + */ + selectionStart: makeNumberProp(-1), + + /** + * * 光标结束位置,自动聚集时有效,需与selection-start搭配使用。 + * 类型:number + * 默认值:-1 + */ + selectionEnd: makeNumberProp(-1), + + /** + * * 键盘弹起时是否自动上推页面。 + * 类型:boolean + * 默认值:true + */ + adjustPosition: makeBooleanProp(true), + + /** + * * 是否去掉iOS下的默认内边距。 + * 类型:boolean + * 默认值:false + */ + disableDefaultPadding: makeBooleanProp(false), + + /** + * * focus状态下点击页面时是否不收起键盘。 + * 类型:boolean + * 默认值:false + */ + holdKeyboard: makeBooleanProp(false), + + // 非原生属性 + /** + * * 显示为密码框。 + * 类型:boolean + * 默认值:false + */ + showPassword: makeBooleanProp(false), + + /** + * * 是否显示清空按钮。 + * 类型:boolean + * 默认值:false + */ + clearable: makeBooleanProp(false), + + /** + * * 输入框只读状态。 + * 类型:boolean + * 默认值:false + */ + readonly: makeBooleanProp(false), + + /** + * * 前置图标,icon组件中的图标类名。 + * 类型:string + */ + prefixIcon: String, + /** + * * 是否显示字数限制,需要同时设置maxlength。 + * 类型:boolean + * 默认值:false + */ + showWordLimit: makeBooleanProp(false), + /** + * 设置左侧标题。 + * 类型:string + */ + label: String, + + /** + * 设置左侧标题宽度。 + * 类型:string + */ + labelWidth: makeStringProp(''), + /** + * * 设置输入框大小。 + * 类型:string + */ + size: String, + + /** + * * 设置输入框错误状态(红色)。 + * 类型:boolean + * 默认值:false + */ + error: makeBooleanProp(false), + + /** + * * 当存在label属性时,设置标题和输入框垂直居中,默认为顶部居中。 + * 类型:boolean + * 默认值:false + */ + center: makeBooleanProp(false), + + /** + * * 非cell类型下是否隐藏下划线。 + * 类型:boolean + * 默认值:false + */ + noBorder: makeBooleanProp(false), + + /** + * * cell类型下必填样式。 + * 类型:boolean + * 默认值:false + */ + required: makeBooleanProp(false), + + /** + * * 表单域model字段名,在使用表单校验功能的情况下,该属性是必填的。 + * 类型:string + */ + prop: makeStringProp(''), + + /** + * * 表单验证规则。 + * 类型:FormItemRule[] + * 默认值:[] + */ + rules: makeArrayProp(), + /** + * 显示清除图标的时机,always 表示输入框不为空时展示,focus 表示输入框聚焦且不为空时展示 + * 类型: "focus" | "always" + * 默认值: "always" + */ + clearTrigger: makeStringProp('always'), + /** + * 是否在点击清除按钮时聚焦输入框 + * 类型: boolean + * 默认值: true + */ + focusWhenClear: makeBooleanProp(true), + /** + * 是否忽略组件内对文本合成系统事件的处理。为 false 时将触发 compositionstart、compositionend、compositionupdate 事件,且在文本合成期间会触发 input 事件 + * 类型: boolean + * 默认值: true + */ + ignoreCompositionEvent: makeBooleanProp(true), + /** + * 它提供了用户在编辑元素或其内容时可能输入的数据类型的提示。在符合条件的高版本webview里,uni-app的web和app-vue平台中可使用本属性。 + * 类型: InputMode + * 可选值: "none" | "text" | "tel" | "url" | "email" | "numeric" | "decimal" | "search" | "password" + * 默认值: "text" + */ + inputmode: makeStringProp('text'), + /** + * 必填标记位置,可选值:before(标签前)、after(标签后) + */ + markerSide: makeStringProp<'before' | 'after'>('before') +} + +export type TextareaProps = ExtractPropTypes diff --git a/src/uni_modules/wot-design-uni/components/wd-textarea/wd-textarea.vue b/src/uni_modules/wot-design-uni/components/wd-textarea/wd-textarea.vue new file mode 100644 index 0000000..31433ca --- /dev/null +++ b/src/uni_modules/wot-design-uni/components/wd-textarea/wd-textarea.vue @@ -0,0 +1,296 @@ +