commit 143a7ae06166275ce69ee793c630337a0be7a45d Author: ko1234 Date: Tue Jun 17 17:38:50 2025 +0800 init diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..c3ed821 --- /dev/null +++ b/.env.development @@ -0,0 +1,4 @@ +VITE_API_BASEURL = "https://ibms-Empower-api.production.mjmtech.com.tw" +VITE_FILE_API_BASEURL = "https://ibms-Empower.production.mjmtech.com.tw" +VITE_MQTT_BASEURL = "wss://mqttwss.mjm-staging.developers-homelab.net" +VITE_FORGE_BASEURL = "https://ibms-Empower.production.mjmtech.com.tw/dist" \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..c3ed821 --- /dev/null +++ b/.env.production @@ -0,0 +1,4 @@ +VITE_API_BASEURL = "https://ibms-Empower-api.production.mjmtech.com.tw" +VITE_FILE_API_BASEURL = "https://ibms-Empower.production.mjmtech.com.tw" +VITE_MQTT_BASEURL = "wss://mqttwss.mjm-staging.developers-homelab.net" +VITE_FORGE_BASEURL = "https://ibms-Empower.production.mjmtech.com.tw/dist" \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..3a51cfe --- /dev/null +++ b/.env.staging @@ -0,0 +1,3 @@ +VITE_API_BASEURL = "http://220.132.206.5:8008" +VITE_FILE_API_BASEURL = "http://220.132.206.5:8085/file" +VITE_FORGE_BASEURL = "http://localhost:5173" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..c35f2a3 --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# 新創賦能 + +Node version: 18 \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..2b7c391 --- /dev/null +++ b/index.html @@ -0,0 +1,26 @@ + + + + + + + + + 新創賦能 + + + + + + +
+ + + + diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..9c592f8 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6457 @@ +{ + "name": "ibms_netzero", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ibms_netzero", + "version": "0.0.0", + "dependencies": { + "@ant-design/icons-vue": "^7.0.1", + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", + "@fortawesome/free-regular-svg-icons": "^5.15.4", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/vue-fontawesome": "^3.0.5", + "@vuepic/vue-datepicker": "^8.0.0", + "ant-design-vue": "^4.0.7", + "axios": "^1.6.2", + "date-fns": "^3.3.1", + "dayjs": "^1.11.10", + "echarts": "^5.4.3", + "flag-icons": "^7.2.3", + "jquery-ui": "^1.14.1", + "json-schema-generator": "^2.0.6", + "mqtt": "^5.10.3", + "pinia": "^2.1.7", + "requirejs": "^2.3.6", + "tailwind-merge": "^2.2.1", + "vue": "^3.3.4", + "vue-i18n": "^10.0.4", + "vue-router": "^4.2.5", + "vuedraggable": "^4.1.0", + "yup": "^1.4.0", + "yup-phone-lite": "^2.0.1" + }, + "devDependencies": { + "@faker-js/faker": "^9.7.0", + "@vitejs/plugin-vue": "^4.4.0", + "autoprefixer": "^10.4.16", + "daisyui": "^4.4.17", + "postcss": "^8.4.31", + "sass": "^1.69.5", + "sass-loader": "^13.3.2", + "tailwindcss": "^3.3.5", + "unplugin-vue-components": "^0.26.0", + "vite": "^4.4.11", + "vite-plugin-svg-icons": "^2.0.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons-svg/-/icons-svg-4.3.1.tgz", + "integrity": "sha512-4QBZg8ccyC6LPIRii7A0bZUk3+lEDCLnhB+FVsflGdcWPPmV+j3fire4AwwoqHV/BibgvBmR9ZIo4s867smv+g==" + }, + "node_modules/@ant-design/icons-vue": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz", + "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1" + }, + "peerDependencies": { + "vue": ">=3.0.3" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.6.tgz", + "integrity": "sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.0.tgz", + "integrity": "sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.1.tgz", + "integrity": "sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@faker-js/faker": { + "version": "9.7.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-9.7.0.tgz", + "integrity": "sha512-aozo5vqjCmDoXLNUJarFZx2IN/GgGaogY4TMJ6so/WLZOWpSV7fvj2dmrV6sEAnUm1O7aCrhTibjpzeDFgNqbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/fakerjs" + } + ], + "license": "MIT", + "engines": { + "node": ">=18.0.0", + "npm": ">=9.0.0" + } + }, + "node_modules/@fortawesome/fontawesome-common-types": { + "version": "0.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.36.tgz", + "integrity": "sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==", + "hasInstallScript": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/fontawesome-svg-core": { + "version": "1.2.36", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.36.tgz", + "integrity": "sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-brands-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-brands-svg-icons/-/free-brands-svg-icons-5.15.4.tgz", + "integrity": "sha512-f1witbwycL9cTENJegcmcZRYyawAFbm8+c6IirLmwbbpqz46wyjbQYLuxOc7weXFXfB7QR8/Vd2u5R3q6JYD9g==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-regular-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-regular-svg-icons/-/free-regular-svg-icons-5.15.4.tgz", + "integrity": "sha512-9VNNnU3CXHy9XednJ3wzQp6SwNwT3XaM26oS4Rp391GsxVYA+0oDR2J194YCIWf7jNRCYKjUCOduxdceLrx+xw==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/free-solid-svg-icons": { + "version": "5.15.4", + "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.15.4.tgz", + "integrity": "sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==", + "hasInstallScript": true, + "dependencies": { + "@fortawesome/fontawesome-common-types": "^0.2.36" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@fortawesome/vue-fontawesome": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-3.0.5.tgz", + "integrity": "sha512-isZZ4+utQH9qg9cWxWYHQ9GwI3r5FeO7GnmzKYV+gbjxcptQhh+F99iZXi1Y9AvFUEgy8kRpAdvDlbb3drWFrw==", + "peerDependencies": { + "@fortawesome/fontawesome-svg-core": "~1 || ~6", + "vue": ">= 3.0.0 < 4" + } + }, + "node_modules/@intlify/core-base": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@intlify/core-base/-/core-base-10.0.4.tgz", + "integrity": "sha512-GG428DkrrWCMhxRMRQZjuS7zmSUzarYcaHJqG9VB8dXAxw4iQDoKVQ7ChJRB6ZtsCsX3Jse1PEUlHrJiyQrOTg==", + "license": "MIT", + "dependencies": { + "@intlify/message-compiler": "10.0.4", + "@intlify/shared": "10.0.4" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/message-compiler": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@intlify/message-compiler/-/message-compiler-10.0.4.tgz", + "integrity": "sha512-AFbhEo10DP095/45EauinQJ5hJ3rJUmuuqltGguvc3WsvezZN+g8qNHLGWKu60FHQVizMrQY7VJ+zVlBXlQQkQ==", + "license": "MIT", + "dependencies": { + "@intlify/shared": "10.0.4", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@intlify/shared": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/@intlify/shared/-/shared-10.0.4.tgz", + "integrity": "sha512-ukFn0I01HsSgr3VYhYcvkTCLS7rGa0gw4A4AMpcy/A9xx/zRJy7PS2BElMXLwUazVFMAr5zuiTk3MQeoeGXaJg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "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/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz", + "integrity": "sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@simonwep/pickr/-/pickr-1.8.2.tgz", + "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.44.8", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.8.tgz", + "integrity": "sha512-4K8GavROwhrYl2QXDXm0Rv9epkA8GBFu0EI+XrrnnuCl7u8CWBRusX7fXJfanhZTDWSAL24gDI/UqXyUM0Injw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "peer": true + }, + "node_modules/@types/node": { + "version": "20.10.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.4.tgz", + "integrity": "sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/readable-stream": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@types/readable-stream/-/readable-stream-4.0.18.tgz", + "integrity": "sha512-21jK/1j+Wg+7jVw1xnSwy/2Q1VgVjWuFssbYGTREPUBeZ+rqVFl2udq0IkxzPC0ZhOzVceUbyIACFZKLqKEBlA==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "safe-buffer": "~5.1.1" + } + }, + "node_modules/@types/readable-stream/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==", + "license": "MIT" + }, + "node_modules/@types/svgo": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-2.6.4.tgz", + "integrity": "sha512-l4cmyPEckf8moNYHdJ+4wkHvFxjyW6ulm9l4YGaOxeyBWPhBOT0gvni1InpFPdzx1dKf/2s62qGITwxNWnPQng==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.13", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.13.tgz", + "integrity": "sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.5.0.tgz", + "integrity": "sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.0.0 || ^5.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.9.tgz", + "integrity": "sha512-+/Lf68Vr/nFBA6ol4xOtJrW+BQWv3QWKfRwGSm70jtXwfhZNF4R/eRgyVJYoxFRhdCTk/F6g99BP0ffPgZihfQ==", + "dependencies": { + "@babel/parser": "^7.23.3", + "@vue/shared": "3.3.9", + "estree-walker": "^2.0.2", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.9.tgz", + "integrity": "sha512-nfWubTtLXuT4iBeDSZ5J3m218MjOy42Vp2pmKVuBKo2/BLcrFUX8nCSr/bKRFiJ32R8qbdnnnBgRn9AdU5v0Sg==", + "dependencies": { + "@vue/compiler-core": "3.3.9", + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.9.tgz", + "integrity": "sha512-wy0CNc8z4ihoDzjASCOCsQuzW0A/HP27+0MDSSICMjVIFzk/rFViezkR3dzH+miS2NDEz8ywMdbjO5ylhOLI2A==", + "dependencies": { + "@babel/parser": "^7.23.3", + "@vue/compiler-core": "3.3.9", + "@vue/compiler-dom": "3.3.9", + "@vue/compiler-ssr": "3.3.9", + "@vue/reactivity-transform": "3.3.9", + "@vue/shared": "3.3.9", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5", + "postcss": "^8.4.31", + "source-map-js": "^1.0.2" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.9.tgz", + "integrity": "sha512-NO5oobAw78R0G4SODY5A502MGnDNiDjf6qvhn7zD7TJGc8XDeIEw4fg6JU705jZ/YhuokBKz0A5a/FL/XZU73g==", + "dependencies": { + "@vue/compiler-dom": "3.3.9", + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.1.tgz", + "integrity": "sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==" + }, + "node_modules/@vue/reactivity": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.9.tgz", + "integrity": "sha512-VmpIqlNp+aYDg2X0xQhJqHx9YguOmz2UxuUJDckBdQCNkipJvfk9yA75woLWElCa0Jtyec3lAAt49GO0izsphw==", + "dependencies": { + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/reactivity-transform": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.9.tgz", + "integrity": "sha512-HnUFm7Ry6dFa4Lp63DAxTixUp8opMtQr6RxQCpDI1vlh12rkGIeYqMvJtK+IKyEfEOa2I9oCkD1mmsPdaGpdVg==", + "dependencies": { + "@babel/parser": "^7.23.3", + "@vue/compiler-core": "3.3.9", + "@vue/shared": "3.3.9", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.5" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.9.tgz", + "integrity": "sha512-xxaG9KvPm3GTRuM4ZyU8Tc+pMVzcu6eeoSRQJ9IE7NmCcClW6z4B3Ij6L4EDl80sxe/arTtQ6YmgiO4UZqRc+w==", + "dependencies": { + "@vue/reactivity": "3.3.9", + "@vue/shared": "3.3.9" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.9.tgz", + "integrity": "sha512-e7LIfcxYSWbV6BK1wQv9qJyxprC75EvSqF/kQKe6bdZEDNValzeRXEVgiX7AHI6hZ59HA4h7WT5CGvm69vzJTQ==", + "dependencies": { + "@vue/runtime-core": "3.3.9", + "@vue/shared": "3.3.9", + "csstype": "^3.1.2" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.9.tgz", + "integrity": "sha512-w0zT/s5l3Oa3ZjtLW88eO4uV6AQFqU8X5GOgzq7SkQQu6vVr+8tfm+OI2kDBplS/W/XgCBuFXiPw6T5EdwXP0A==", + "dependencies": { + "@vue/compiler-ssr": "3.3.9", + "@vue/shared": "3.3.9" + }, + "peerDependencies": { + "vue": "3.3.9" + } + }, + "node_modules/@vue/shared": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.9.tgz", + "integrity": "sha512-ZE0VTIR0LmYgeyhurPTpy4KzKsuDyQbMSdM49eKkMnT5X4VfFBLysMzjIZhLEFQYjjOVVfbvUDHckwjDFiO2eA==" + }, + "node_modules/@vuepic/vue-datepicker": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-8.0.0.tgz", + "integrity": "sha512-0HsxG2GGTWzeitPVhIEFPHLyLwTU+VT0vk15JreqNi0cB6D5Mpf5vqHppJE0ech+ZTQx36Ip99oSfnQdA0SNrA==", + "dependencies": { + "date-fns": "^3.3.1" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ant-design-vue": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/ant-design-vue/-/ant-design-vue-4.0.7.tgz", + "integrity": "sha512-oHTtc1GZkfENZTkt2aDvjaD4yoRsowYvCOmxA6+5AGqm5uz/datdJOXsq9nokIhC+vrAMhk6JQVFZ2hh7eU6Pw==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-vue": "^7.0.0", + "@babel/runtime": "^7.10.5", + "@ctrl/tinycolor": "^3.5.0", + "@emotion/hash": "^0.9.0", + "@emotion/unitless": "^0.8.0", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^4.0.0", + "csstype": "^3.1.1", + "dayjs": "^1.10.5", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "stylis": "^4.1.3", + "throttle-debounce": "^5.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design-vue" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.16", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", + "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.21.10", + "caniuse-lite": "^1.0.30001538", + "fraction.js": "^4.3.6", + "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/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", + "dependencies": { + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "6.0.16", + "resolved": "https://registry.npmjs.org/bl/-/bl-6.0.16.tgz", + "integrity": "sha512-V/kz+z2Mx5/6qDfRCilmrukUXcXuCoXKg3/3hDvzKKoSUx8CJKudfIoT29XZc3UE9xBvxs5qictiHdprwtteEg==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.0", + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^4.2.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz", + "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001541", + "electron-to-chromium": "^1.4.535", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-base/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001565", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001565.tgz", + "integrity": "sha512-xrE//a3O7TP0vaJ8ikzkD2c2NgcVUvsEe2IvFTntV4Yd1Z9FVzh+gW+enX96L0psrbaFMcVcH2l90xNuGDWc8w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "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/chokidar/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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/class-utils/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dev": true, + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/commist": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/commist/-/commist-3.2.0.tgz", + "integrity": "sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==", + "license": "MIT" + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmjs.org/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-js": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.34.0.tgz", + "integrity": "sha512-aDdvlDder8QmY91H88GzNi9EtQi2TjvQhpCX6B1v/dAZHU1AuLgHvRh54RiOerpEhEW46Tkf+vgAViB/CWC0ag==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-select/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/css-select/node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/css-select/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/css-select/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/css-selector-tokenizer": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.8.0.tgz", + "integrity": "sha512-Jd6Ig3/pe62/qe5SBPTN8h8LeUg/pT4lLgtavPf7updwwHpvFzxvOQBHYj2LZDMjUnBzgvIUSjRcf6oT5HzHFg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "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==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", + "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==" + }, + "node_modules/culori": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/culori/-/culori-3.3.0.tgz", + "integrity": "sha512-pHJg+jbuFsCjz9iclQBqyL3B2HLCBF71BwVNujUYEvCeQMvV97R59MNK3R2+jgJ3a1fcZgI9B3vYgz8lzr/BFQ==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/daisyui": { + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/daisyui/-/daisyui-4.4.17.tgz", + "integrity": "sha512-vcxLKoWiqPjEtcBkSayi9sDW1kWgWRdy1GjSu3zNtMiCsXwqDpCzNkdijuY9RuJ/2tBCtnwxhBv72Yizfi7KAQ==", + "dev": true, + "dependencies": { + "css-selector-tokenizer": "^0.8", + "culori": "^3", + "picocolors": "^1", + "postcss-js": "^4" + }, + "engines": { + "node": ">=16.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/daisyui" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-3.3.1.tgz", + "integrity": "sha512-y8e109LYGgoQDveiEBD3DYXKba1jWf5BA8YU1FL5Tvm0BTdEfy54WLCwnuYWZNnzzvALy/QQ4Hov+Q9RVRv+Zw==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/kossnocorp" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", + "integrity": "sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==" + }, + "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/decode-uri-component": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmjs.org/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, + "node_modules/dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/echarts": { + "version": "5.4.3", + "resolved": "https://registry.npmjs.org/echarts/-/echarts-5.4.3.tgz", + "integrity": "sha512-mYKxLxhzy6zyTi/FaEbJMOZU1ULGEQHaeIeuMR5L+JnJTpz+YR03mnnpBhbR4+UYJAgiXgpyTVLffPAjOTLkZA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.4.4" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.600", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.600.tgz", + "integrity": "sha512-KD6CWjf1BnQG+NsXuyiTDDT1eV13sKuYsOUioXkQweYTQIbgHkXPry9K7M+7cKtYHnSUPitVaLrXYB1jTkkYrw==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "peer": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/es-module-lexer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.4.1.tgz", + "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==", + "dev": true, + "peer": true + }, + "node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "peer": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.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/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/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/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/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/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "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/fast-glob/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==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-unique-numbers": { + "version": "8.0.13", + "resolved": "https://registry.npmjs.org/fast-unique-numbers/-/fast-unique-numbers-8.0.13.tgz", + "integrity": "sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.23.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.1.0" + } + }, + "node_modules/fast-unique-numbers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flag-icons": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/flag-icons/-/flag-icons-7.2.3.tgz", + "integrity": "sha512-X2gUdteNuqdNqob2KKTJTS+ZCvyWeLCtDz9Ty8uJP17Y4o82Y+U/Vd4JNrdwTAjagYsRznOn9DZ+E/Q52qbmqg==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz", + "integrity": "sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dev": true, + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dev": true, + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/help-me": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-5.0.0.tgz", + "integrity": "sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==", + "license": "MIT" + }, + "node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "dev": true + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "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==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==" + }, + "node_modules/jquery-ui": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.14.1.tgz", + "integrity": "sha512-DhzsYH8VeIvOaxwi+B/2BCsFFT5EGjShdzOcm5DssWjtcpGWIMsn66rJciDA6jBruzNiLf1q0KvwMoX1uGNvnQ==", + "dependencies": { + "jquery": ">=1.12.0 <5.0.0" + } + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-sdsl": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-sdsl/-/js-sdsl-4.3.0.tgz", + "integrity": "sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/js-sdsl" + } + }, + "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/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, + "node_modules/json-promise": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/json-promise/-/json-promise-1.1.8.tgz", + "integrity": "sha512-rz31P/7VfYnjQFrF60zpPTT0egMPlc8ZvIQHWs4ZtNZNnAXRmXo6oS+6eyWr5sEMG03OVhklNrTXxiIRYzoUgQ==", + "license": "MIT", + "dependencies": { + "bluebird": "*" + } + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-generator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/json-schema-generator/-/json-schema-generator-2.0.6.tgz", + "integrity": "sha512-WyWDTK3jnv/OBI43uWw7pTGoDQ62PfccySZCHTBsOfS6D9QhsQr+95Wcwq5lqjzkiDQkTNkWzXEqHOhswfufmw==", + "license": "MIT", + "dependencies": { + "json-promise": "^1.1.8", + "mkdirp": "^0.5.0", + "optimist": "^0.6.1", + "pretty-data": "^0.40.0", + "request": "^2.81.0" + }, + "bin": { + "json-schema-generator": "bin/cli.js" + } + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/libphonenumber-js": { + "version": "1.10.60", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.60.tgz", + "integrity": "sha512-Ctgq2lXUpEJo5j1762NOzl2xo7z7pqmVWYai0p07LvAkQ32tbPv3wb+tcUeHEiXhKU5buM4H9MXsXo6OlM6C2g==" + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.5", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", + "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dev": true, + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, + "node_modules/merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.1" + }, + "engines": { + "node": ">=4" + } + }, + "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, + "peer": 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==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "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==", + "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==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mqtt": { + "version": "5.10.3", + "resolved": "https://registry.npmjs.org/mqtt/-/mqtt-5.10.3.tgz", + "integrity": "sha512-hA/6YrUS4fywhBGCjH/XXUuLeueJiPqruVVWjK2A24Ma4KcWfZ/x8x07aoesBV+HXDWBC08tbT4IWfSXNW0Jtw==", + "license": "MIT", + "dependencies": { + "@types/readable-stream": "^4.0.5", + "@types/ws": "^8.5.9", + "commist": "^3.2.0", + "concat-stream": "^2.0.0", + "debug": "^4.3.4", + "help-me": "^5.0.0", + "lru-cache": "^10.0.1", + "minimist": "^1.2.8", + "mqtt-packet": "^9.0.1", + "number-allocator": "^1.0.14", + "readable-stream": "^4.4.2", + "reinterval": "^1.1.0", + "rfdc": "^1.3.0", + "split2": "^4.2.0", + "worker-timers": "^7.1.4", + "ws": "^8.17.1" + }, + "bin": { + "mqtt": "build/bin/mqtt.js", + "mqtt_pub": "build/bin/pub.js", + "mqtt_sub": "build/bin/sub.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/mqtt-packet": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/mqtt-packet/-/mqtt-packet-9.0.1.tgz", + "integrity": "sha512-koZF1V/X2RZUI6uD9wN5OK1JxxcG1ofAR4H3LjCw1FkeKzruZQ26aAA6v2m1lZyWONZIR5wMMJFrZJDRNzbiQw==", + "license": "MIT", + "dependencies": { + "bl": "^6.0.8", + "debug": "^4.3.4", + "process-nextick-args": "^2.0.1" + } + }, + "node_modules/mqtt/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "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/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanomatch/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nanopop": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/nanopop/-/nanopop-2.3.0.tgz", + "integrity": "sha512-fzN+T2K7/Ah25XU02MJkPZ5q4Tj5FpjmIYq4rvoHX4yb16HzFdCO6JxFFn5Y/oBhQ8no8fUZavnyIv9/+xkBBw==" + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "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==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/number-allocator": { + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/number-allocator/-/number-allocator-1.0.14.tgz", + "integrity": "sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "js-sdsl": "4.3.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dev": true, + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dev": true, + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-visit/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optimist": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", + "integrity": "sha512-snN4O4TkigujZphWLN0E//nQmm7790RYaE53DdL7ZYwee2D8DDo9/EyYiKUfN3rneWUjhJnueija3G9I2i0h3g==", + "license": "MIT/X11", + "dependencies": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "node_modules/optimist/node_modules/minimist": { + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz", + "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", + "license": "MIT" + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true + }, + "node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinia": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.7.tgz", + "integrity": "sha512-+C2AHFtcFqjPih0zpYuvof37SFxMQ7OEG2zV9jRI12i9BOy3YQVAHwdKtyyc8pDcDyIc33WCIsZaCFWU7WWxGQ==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.6.tgz", + "integrity": "sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==", + "hasInstallScript": true, + "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/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "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" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "dev": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-prefix-selector": { + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/postcss-prefix-selector/-/postcss-prefix-selector-1.16.0.tgz", + "integrity": "sha512-rdVMIi7Q4B0XbXqNUEI+Z4E+pueiu/CS5E6vRCQommzdQ/sgsS4dK42U7GX8oJR+TJOtT+Qv3GkNo6iijUMp3Q==", + "dev": true, + "peerDependencies": { + "postcss": ">4 <9" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "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==", + "dev": true + }, + "node_modules/posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", + "dev": true, + "dependencies": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, + "node_modules/posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "dependencies": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "node_modules/pretty-data": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", + "integrity": "sha512-YFLnEdDEDnkt/GEhet5CYZHCvALw6+Elyb/tp8kQG03ZSIuzeaDWpZYndCXwgqu4NAjh1PI534dhDS1mHarRnQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/property-expr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-2.0.6.tgz", + "integrity": "sha512-SVtmxhRE/CGkn3eZY1T6pC8Nln6Fr/lu1mKSgRud0eC73whjGfoAogbn78LkD8aFL0zz3bAFerKSnOl7NlErBA==" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "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/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "peer": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", + "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==" + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/reinterval": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reinterval/-/reinterval-1.1.0.tgz", + "integrity": "sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==", + "license": "MIT" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/requirejs": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/requirejs/-/requirejs-2.3.6.tgz", + "integrity": "sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg==", + "bin": { + "r_js": "bin/r.js", + "r.js": "bin/r.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.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/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated", + "dev": true + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rollup": { + "version": "3.29.4", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.29.4.tgz", + "integrity": "sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.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==", + "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" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "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==", + "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/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dev": true, + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", + "dev": 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": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmjs.org/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "peer": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/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/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/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/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sortablejs": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.14.0.tgz", + "integrity": "sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==", + "license": "MIT" + }, + "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==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "peer": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated", + "dev": true + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", + "engines": { + "node": ">= 10.x" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dev": true, + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.7.tgz", + "integrity": "sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylis": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.0.tgz", + "integrity": "sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==" + }, + "node_modules/sucrase": { + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz", + "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "7.1.6", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "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==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + } + }, + "node_modules/svg-baker/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/svg-baker/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dev": true, + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/tailwind-merge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.1.tgz", + "integrity": "sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==", + "dependencies": { + "@babel/runtime": "^7.23.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.5.tgz", + "integrity": "sha512-5SEZU4J7pxZgSkv7FP1zY8i2TIAOooNZ1e/OGtxIEv6GltpoiXUqWvLy89+a10qYTB1N5Ifkuw9lqQkN9sscvA==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.26.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz", + "integrity": "sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "peer": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttle-debounce": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-5.0.0.tgz", + "integrity": "sha512-2iQTSgkkc1Zyk0MeVrt/3BvuOXYPl/R8Z0U2xxo9rjwNciaHDG3R+Lm6dh4EeUci49DanvBnuqI6jshoQQRGEg==", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tiny-case": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tiny-case/-/tiny-case-1.0.3.tgz", + "integrity": "sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==" + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "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==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==" + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/traverse": { + "version": "0.6.8", + "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.8.tgz", + "integrity": "sha512-aXJDbk6SnumuaZSANd21XAo15ucCDE38H4fkqiGsc3MhCK+wOlZvLP9cB/TvpHT0mOyWgC4Z8EwRlzqYSUzdsA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.5.1.tgz", + "integrity": "sha512-0QkvG13z6RD+1L1FoibQqnvTwVBXvS4XSPwAyinVgoOCl2jAgwzdUKmEj05o4Lt8xwQI85Hb6mSyYkcAGwZPew==", + "dev": true, + "dependencies": { + "acorn": "^8.11.2", + "chokidar": "^3.5.3", + "webpack-sources": "^3.2.3", + "webpack-virtual-modules": "^0.6.0" + } + }, + "node_modules/unplugin-vue-components": { + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.26.0.tgz", + "integrity": "sha512-s7IdPDlnOvPamjunVxw8kNgKNK8A5KM1YpK5j/p97jEKTjlPNrA0nZBiSfAKKlK1gWZuyWXlKL5dk3EDw874LQ==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.6", + "@rollup/pluginutils": "^5.0.4", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.3.1", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.3", + "minimatch": "^9.0.3", + "resolve": "^1.22.4", + "unplugin": "^1.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-vue-components/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dev": true, + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dev": true, + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated", + "dev": true + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "engines": { + "node": ">=0.10.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/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "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/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vite": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.0.tgz", + "integrity": "sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw==", + "dev": true, + "dependencies": { + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-plugin-svg-icons": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/vite-plugin-svg-icons/-/vite-plugin-svg-icons-2.0.1.tgz", + "integrity": "sha512-6ktD+DhV6Rz3VtedYvBKKVA2eXF+sAQVaKkKLDSqGUfnhqXl3bj5PPkVTl3VexfTuZy66PmINi8Q6eFnVfRUmA==", + "dev": true, + "dependencies": { + "@types/svgo": "^2.6.1", + "cors": "^2.8.5", + "debug": "^4.3.3", + "etag": "^1.8.1", + "fs-extra": "^10.0.0", + "pathe": "^0.2.0", + "svg-baker": "1.7.0", + "svgo": "^2.8.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vue": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.9.tgz", + "integrity": "sha512-sy5sLCTR8m6tvUk1/ijri3Yqzgpdsmxgj6n6yl7GXXCXqVbmW2RCXe9atE4cEI6Iv7L89v5f35fZRRr5dChP9w==", + "dependencies": { + "@vue/compiler-dom": "3.3.9", + "@vue/compiler-sfc": "3.3.9", + "@vue/runtime-dom": "3.3.9", + "@vue/server-renderer": "3.3.9", + "@vue/shared": "3.3.9" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-i18n": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-10.0.4.tgz", + "integrity": "sha512-1xkzVxqBLk2ZFOmeI+B5r1J7aD/WtNJ4j9k2mcFcQo5BnOmHBmD7z4/oZohh96AAaRZ4Q7mNQvxc9h+aT+Md3w==", + "license": "MIT", + "dependencies": { + "@intlify/core-base": "10.0.4", + "@intlify/shared": "10.0.4", + "@vue/devtools-api": "^6.5.0" + }, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://github.com/sponsors/kazupon" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vue-router": { + "version": "4.2.5", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.2.5.tgz", + "integrity": "sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==", + "dependencies": { + "@vue/devtools-api": "^6.5.0" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/vue-types/-/vue-types-3.0.2.tgz", + "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", + "dependencies": { + "is-plain-object": "3.0.1" + }, + "engines": { + "node": ">=10.15.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/vuedraggable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/vuedraggable/-/vuedraggable-4.1.0.tgz", + "integrity": "sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==", + "license": "MIT", + "dependencies": { + "sortablejs": "1.14.0" + }, + "peerDependencies": { + "vue": "^3.0.1" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "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.6.1", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.1.tgz", + "integrity": "sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==", + "dev": true + }, + "node_modules/wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha512-1tMA907+V4QmxV7dbRvb4/8MaRALK6q9Abid3ndMYnbyo8piisCmeONVqVSXqQA3KaP4SLt5b7ud6E2sqP8TFw==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/worker-timers": { + "version": "7.1.8", + "resolved": "https://registry.npmjs.org/worker-timers/-/worker-timers-7.1.8.tgz", + "integrity": "sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2", + "worker-timers-broker": "^6.1.8", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-broker": { + "version": "6.1.8", + "resolved": "https://registry.npmjs.org/worker-timers-broker/-/worker-timers-broker-6.1.8.tgz", + "integrity": "sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "fast-unique-numbers": "^8.0.13", + "tslib": "^2.6.2", + "worker-timers-worker": "^7.0.71" + } + }, + "node_modules/worker-timers-broker/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/worker-timers-worker": { + "version": "7.0.71", + "resolved": "https://registry.npmjs.org/worker-timers-worker/-/worker-timers-worker-7.0.71.tgz", + "integrity": "sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.24.5", + "tslib": "^2.6.2" + } + }, + "node_modules/worker-timers-worker/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/worker-timers/node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "license": "MIT", + "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/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "dev": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yup": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/yup/-/yup-1.4.0.tgz", + "integrity": "sha512-wPbgkJRCqIf+OHyiTBQoJiP5PFuAXaWiJK6AmYkzQAh5/c2K9hzSApBZG5wV9KoKSePF7sAxmNSvh/13YHkFDg==", + "dependencies": { + "property-expr": "^2.0.5", + "tiny-case": "^1.0.3", + "toposort": "^2.0.2", + "type-fest": "^2.19.0" + } + }, + "node_modules/yup-phone-lite": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/yup-phone-lite/-/yup-phone-lite-2.0.1.tgz", + "integrity": "sha512-IV8q5VSq3MqVDm58ZyPSrtKfVtl+Z5N8UxWdEP573Nk09MLrF6drReOjUX6OggL0ByTMLO+z8r/L8taftUCGyw==", + "dependencies": { + "libphonenumber-js": "^1.10.18" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "yup": ">0.32.0" + } + }, + "node_modules/zrender": { + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/zrender/-/zrender-5.4.4.tgz", + "integrity": "sha512-0VxCNJ7AGOMCWeHVyTrGzUgrK4asT4ml9PEkeGirAkKNYXYzoPJCLvmyfdoOXcjTHPs10OZVMfD1Rwg16AZyYw==", + "dependencies": { + "tslib": "2.3.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..79b4052 --- /dev/null +++ b/package.json @@ -0,0 +1,51 @@ +{ + "name": "ibms_netzero", + "version": "0.0.0", + "private": true, + "homepage": "/netzero", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "@ant-design/icons-vue": "^7.0.1", + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-brands-svg-icons": "^5.15.4", + "@fortawesome/free-regular-svg-icons": "^5.15.4", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/vue-fontawesome": "^3.0.5", + "@vuepic/vue-datepicker": "^8.0.0", + "ant-design-vue": "^4.0.7", + "axios": "^1.6.2", + "date-fns": "^3.3.1", + "dayjs": "^1.11.10", + "echarts": "^5.4.3", + "flag-icons": "^7.2.3", + "jquery-ui": "^1.14.1", + "json-schema-generator": "^2.0.6", + "mqtt": "^5.10.3", + "pinia": "^2.1.7", + "requirejs": "^2.3.6", + "tailwind-merge": "^2.2.1", + "vue": "^3.3.4", + "vue-i18n": "^10.0.4", + "vue-router": "^4.2.5", + "vuedraggable": "^4.1.0", + "yup": "^1.4.0", + "yup-phone-lite": "^2.0.1" + }, + "devDependencies": { + "@faker-js/faker": "^9.7.0", + "@vitejs/plugin-vue": "^4.4.0", + "autoprefixer": "^10.4.16", + "daisyui": "^4.4.17", + "postcss": "^8.4.31", + "sass": "^1.69.5", + "sass-loader": "^13.3.2", + "tailwindcss": "^3.3.5", + "unplugin-vue-components": "^0.26.0", + "vite": "^4.4.11", + "vite-plugin-svg-icons": "^2.0.1" + } +} diff --git a/postcss.config.js b/postcss.config.js new file mode 100644 index 0000000..a5a6ff8 --- /dev/null +++ b/postcss.config.js @@ -0,0 +1,7 @@ +module.exports = { + plugins: { + "postcss-import": {}, + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/public/build_img.jpg b/public/build_img.jpg new file mode 100644 index 0000000..c97ff9b Binary files /dev/null and b/public/build_img.jpg differ diff --git a/public/config.json b/public/config.json new file mode 100644 index 0000000..65d0c7c --- /dev/null +++ b/public/config.json @@ -0,0 +1,44 @@ +{ + "heatmap": { + "temp": { + "range": [0, 50], + "color": ["#0023F5", "#FF1C05"], + "unit": "°C" + }, + "humi": { + "range": [15, 95], + "color": ["#ADD8E6", "#00008B"], + "unit": "%" + }, + "CO2": { + "range": [0, 5000], + "color": ["#FFDAB9", "#FF8C00"], + "unit": "ppm" + }, + "CO": { + "range": [0, 1000], + "color": ["#FFFFE0", "#FFD700"], + "unit": "ppm" + }, + "CH2O": { + "range": [0, 100], + "color": ["#90EE90", "#006400"], + "unit": "ppb" + }, + "PM1": { + "range": [0, 20], + "color": ["#E6E6FA", "#800080"], + "unit": "µg/m³" + }, + "PM2.5": { + "range": [0, 55], + "color": ["#FFB6C1", "#FF0000"], + "unit": "µg/m³" + }, + "PM10": { + "range": [0, 150], + "color": ["#FFDDC1", "#FF1493"], + "unit": "µg/m³" + } + } +} diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 0000000..795b5ce Binary files /dev/null and b/public/favicon.ico differ diff --git a/public/hotspot.svg b/public/hotspot.svg new file mode 100644 index 0000000..2b2249a --- /dev/null +++ b/public/hotspot.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/public/logo.svg b/public/logo.svg new file mode 100644 index 0000000..b4d6ad4 --- /dev/null +++ b/public/logo.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/public/setting.html b/public/setting.html new file mode 100644 index 0000000..e3e2eaf --- /dev/null +++ b/public/setting.html @@ -0,0 +1,15 @@ + + + + + + Document + + + + + diff --git a/src/App.vue b/src/App.vue new file mode 100644 index 0000000..cc64f26 --- /dev/null +++ b/src/App.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/apis/account/api.js b/src/apis/account/api.js new file mode 100644 index 0000000..8ae9418 --- /dev/null +++ b/src/apis/account/api.js @@ -0,0 +1,14 @@ +export const GET_ACCOUNT_USERLIST_API = `/User/UserManagerList`; + +export const GET_ACCOUNT_ROLELIST_API = `/User/RoleManagerList`; +export const GET_ACCOUNT_ROLEAUTHLIST_API = `/User/RoleAuthList`; +export const GET_ACCOUNT_ROLEAUTHPAGELIST_API = `/User/AuthPageListByVariable`; + +// export const POST_ROLEAUTHLIST_API = `/User/SaveRoleAuth`; + +export const POST_ACCOUNT_ROLE_API = `/User/SaveRoleAndAuth`; +export const DELETE_ACCOUNT_ROLE_API = `/User/DeleteOneRole`; + +export const GET_ACCOUNT_USER_API = `/User/GetOneUser`; +export const POST_ACCOUNT_USER_API = `/User/SaveUser`; +export const DELETE_ACCOUNT_USER_API = `/User/DeleteOneUser`; diff --git a/src/apis/account/index.js b/src/apis/account/index.js new file mode 100644 index 0000000..210b375 --- /dev/null +++ b/src/apis/account/index.js @@ -0,0 +1,158 @@ +import { + GET_ACCOUNT_USERLIST_API, + GET_ACCOUNT_ROLELIST_API, + GET_ACCOUNT_ROLEAUTHLIST_API, + GET_ACCOUNT_ROLEAUTHPAGELIST_API, + DELETE_ACCOUNT_ROLE_API, + POST_ACCOUNT_ROLE_API, + POST_ACCOUNT_USER_API, + GET_ACCOUNT_USER_API, + DELETE_ACCOUNT_USER_API, +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; + +export const getAccountUserList = async (search_condition = {}) => { + const res = await instance.post(GET_ACCOUNT_USERLIST_API, search_condition); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAccountRoleList = async (search_condition = {}) => { + const res = await instance.post(GET_ACCOUNT_ROLELIST_API, { + Layer: 1, + ...search_condition, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAccountRoleAuthList = async (SelectedRoleId) => { + const res = await instance.post(GET_ACCOUNT_ROLEAUTHLIST_API, { + SelectedRoleId, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAccountRoleAuthPageList = async () => { + const res = await instance.post(GET_ACCOUNT_ROLEAUTHPAGELIST_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAccountRole = async ({ Id, Name, SaveCheckAuth }) => { + const res = await instance.post(POST_ACCOUNT_ROLE_API, { + Id, + Name, + SaveCheckAuth, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const delRole = async (Id) => { + const res = await instance.post(DELETE_ACCOUNT_ROLE_API, { + Id, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAccountOneUser = async (Id) => { + const res = await instance.post(GET_ACCOUNT_USER_API, { + Id, + }); + + res.data = { + Account: res.data?.account, + Name: res.data?.full_name, + Email: res.data?.email, + Phone: res.data?.phone, + RoleId: res.data?.role_guid, + Id, + }; + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAccountUser = async ({ + Id, + Account, + Name, + Email, + Phone, + RoleId, + Password, +}) => { + const res = await instance.post( + POST_ACCOUNT_USER_API, + Id + ? { + Id: Id, + Account, + Name, + Email, + Phone, + RoleId, + } + : { + Id: "0", + Account, + Name, + Email, + Phone, + RoleId, + Password, + } + ); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const changePassword = async ({ Id, Password }) => { + const res = await instance.post(POST_ACCOUNT_USER_API, { + Id, + Password, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const delAccount = async (Id) => { + const res = await instance.post(DELETE_ACCOUNT_USER_API, { + Id, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/alert/api.js b/src/apis/alert/api.js new file mode 100644 index 0000000..b82e6f8 --- /dev/null +++ b/src/apis/alert/api.js @@ -0,0 +1,26 @@ +export const POST_ACK_API = `/obix/alarm`; +export const GET_ALERT_FORMID_API = `/Alert/AlertList`; +export const GET_ALERT_LOG_API = `api/Alarm/GetAlarmLog`; +export const POST_OPERATION_RECORD_API = `/operation/SavOpeRecord`; + +export const GET_ALERT_SUB_LIST_API = `api/Device/GetMainSub`; + +export const GET_ALERT_MEMBER_LIST_API = `api/Alarm/GetAlarmMemberList`; +export const GET_ALERT_MEMBER = `api/Alarm/GetAlarmMember`; +export const POST_ALERT_MEMBER = `api/Alarm/SaveAlarmMember`; +export const DELETE_ALERT_MEMBER = `api/Alarm/DeleteAlarmMember`; +export const GET_NOTICE_LIST_API = `api/Alarm/GetNotice`; +export const GET_SHOW_ALERT_API = `api/Alarm/GetShowAlarm`; // 取得告警顯示清單 + +export const GET_OUTLIERS_LIST_API = `api/Alarm/GetAlarmSetting`; +export const GET_OUTLIERS_DEVLIST_API = `api/Alarm/GetDevList`; // 取得設備 +export const GET_OUTLIERS_POINTS_API = `api/Alarm/GetAlarmPoints`; // 取得點位 +export const POST_OUTLIERS_SETTING_API = `api/Alarm/SaveAlarmSetting`; // 新增與修改 +export const DELETE_OUTLIERS_SETTING_API = `api/Alarm/DeleteAlarmSetting`; // 刪除 +export const GET_FACTOR_API = `api/Alarm/GetFactor`; // 刪除 + +export const GET_ALERT_SCHEDULE_LIST_API = `api/Alarm/GetAlarmSchedule`; +export const POST_ALERT_SCHEDULE = `api/Alarm/SaveAlarmSchedule`; +export const DELETE_ALERT_SCHEDULE = `api/Alarm/DeleteAlarmSchedule`; + +export const POST_ALERT_MQTT_REFRESH = `api/Alarm/MQTTRefresh`; \ No newline at end of file diff --git a/src/apis/alert/index.js b/src/apis/alert/index.js new file mode 100644 index 0000000..0d54384 --- /dev/null +++ b/src/apis/alert/index.js @@ -0,0 +1,227 @@ +import { + POST_ACK_API, + GET_ALERT_FORMID_API, + GET_ALERT_LOG_API, + POST_OPERATION_RECORD_API, + GET_ALERT_SUB_LIST_API, + GET_OUTLIERS_LIST_API, + GET_OUTLIERS_DEVLIST_API, + GET_OUTLIERS_POINTS_API, + POST_OUTLIERS_SETTING_API, + DELETE_OUTLIERS_SETTING_API, + GET_FACTOR_API, + GET_ALERT_MEMBER_LIST_API, + GET_ALERT_MEMBER, + POST_ALERT_MEMBER, + DELETE_ALERT_MEMBER, + GET_NOTICE_LIST_API, + GET_SHOW_ALERT_API, + GET_ALERT_SCHEDULE_LIST_API, + POST_ALERT_SCHEDULE, + DELETE_ALERT_SCHEDULE, + POST_ALERT_MQTT_REFRESH +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; + +export const getAlertFormId = async (uuid) => { + const res = await instance.post(GET_ALERT_FORMID_API, uuid); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAlertLog = async ({ + Start_date, + End_date, + isRecovery, + device_name_tag, +}) => { + const res = await instance.post(GET_ALERT_LOG_API, { + Start_date, + End_date, + isRecovery, + device_name_tag, + }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postOperationRecord = async (formData) => { + const res = await instance.post(POST_OPERATION_RECORD_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAlertSubList = async (building_guid) => { + const res = await instance.post(GET_ALERT_SUB_LIST_API, { + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAlarmMemberList = async () => { + const res = await instance.post(GET_ALERT_MEMBER_LIST_API, {}); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getNoticeList = async (lang) => { + const res = await instance.post(GET_NOTICE_LIST_API, { lang }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAlertMember = async (data) => { + const res = await instance.post(POST_ALERT_MEMBER, data); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteAlarmMember = async (id) => { + try { + const res = await instance.post(DELETE_ALERT_MEMBER, { id }); + console.log("Delete Alarm Member Response:", res); + return { + isSuccess: res.code === "0000", + msg: res.msg || "刪除成功", + }; + } catch (error) { + console.error("API request failed", error); + return { isSuccess: false, msg: "API request failed" }; + } +}; + +export const getAlarmMember = async (data) => { + try { + const res = await instance.post(GET_ALERT_MEMBER, data); + return res.data; + } catch (error) { + console.error("API request failed", error); + return { isSuccess: false, msg: "API request failed" }; + } +}; + +export const getOutliersList = async (id) => { + const res = await instance.post(GET_OUTLIERS_LIST_API, id); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOutliersDevList = async (id) => { + const res = await instance.post(GET_OUTLIERS_DEVLIST_API, id); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOutliersPoints = async (id) => { + const res = await instance.post(GET_OUTLIERS_POINTS_API, id); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getFactors = async () => { + const res = await instance.post(GET_FACTOR_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postOutliersSetting = async (data) => { + const res = await instance.post(POST_OUTLIERS_SETTING_API, data); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const delOutliersSetting = async (Id) => { + const res = await instance.post(DELETE_OUTLIERS_SETTING_API, { + Id, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getShowAlarm = async () => { + const res = await instance.post(GET_SHOW_ALERT_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAlarmScheduleList = async () => { + const res = await instance.post(GET_ALERT_SCHEDULE_LIST_API, {}); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAlertSchedule = async (data) => { + const res = await instance.post(POST_ALERT_SCHEDULE, data); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteAlarmSchedule = async (id) => { + try { + const res = await instance.post(DELETE_ALERT_SCHEDULE, { id }); + return { + isSuccess: res.code === "0000", + msg: res.msg || "刪除成功", + }; + } catch (error) { + console.error("API request failed", error); + return { isSuccess: false, msg: "API request failed" }; + } +}; + +export const postMQTTRefresh = async () => { + const res = await instance.post(POST_ALERT_MQTT_REFRESH); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/asset/api.js b/src/apis/asset/api.js new file mode 100644 index 0000000..94f08e1 --- /dev/null +++ b/src/apis/asset/api.js @@ -0,0 +1,37 @@ +export const GET_ASSET_MAIN_LIST_API = `/AssetManage/GetAssetMainList`; +export const DELETE_ASSET_MAIN_LIST_API = `/AssetManage/DeleteAssetMain`; +export const POST_ASSET_MAIN_LIST_API = `/AssetManage/SaveAssetMain`; + +export const GET_ASSET_SUB_LIST_API = `/AssetManage/GetAssetSubList`; +export const POST_ASSET_SUB_LIST_API = `/AssetManage/SaveAssetSub`; +export const DELETE_ASSET_SUB_LIST_API = `/AssetManage/DeleteAssetSub`; + +export const GET_ASSET_LIST_API = `/AssetManage/GetAssetList`; +export const GET_ASSET_SINGLE_API = `/AssetManage/GetAsset`; +export const POST_ASSET_SINGLE_API = `/AssetManage/SaveAsset`; +export const DELETE_ASSET_ITEM_API = `/AssetManage/DeleteAsset`; + +export const GET_ASSET_FLOOR_LIST_API = `/AssetManage/GetFloorList`; + +export const POST_ASSET_FLOOR_API = `/AssetManage/SaveFloor`; +export const DELETE_ASSET_FLOOR_API = `/AssetManage/DeleteFloor`; + +export const GET_ASSET_IOT_LIST_API = `/AssetManage/GetIOTList`; +export const GET_ASSET_SUB_POINT_API = `/AssetManage/GetSubPoint`; + +export const GET_ASSET_IOT_SCHEMA_API = `/AssetManage/GetResponseSchema`; +export const POST_ASSET_IOT_SCHEMA_API = `/AssetManage/SaveResponseSchema`; + +export const GET_ASSET_DEVICE_ITEM_API = `/AssetManage/GetDeviceItem`; +export const POST_ASSET_DEVICE_ITEM_API = `/AssetManage/SaveDeviceItem`; +export const DELETE_ASSET_DEVICE_ITEM_API = `/AssetManage/DeleteDeviceItem`; + +export const GET_ASSET_DEPARTMENT_API = `/AssetManage/GetDepartment`; +export const POST_ASSET_DEPARTMENT_API = `/AssetManage/SaveDepartment`; +export const DELETE_ASSET_DEPARTMENT_API = `/AssetManage/DeleteDepartment`; + +export const GET_ASSET_ELECTYPE_API = `/AssetManage/GetElecType`; +export const POST_ASSET_ELECTYPE_API = `/AssetManage/SaveElecType`; +export const DELETE_ASSET_ELECTYPE_API = `/AssetManage/DeleteElecType`; + +export const POST_ASSET_ELEC_SETTING_API = `/AssetManage/SaveAssetSetting`; \ No newline at end of file diff --git a/src/apis/asset/index.js b/src/apis/asset/index.js new file mode 100644 index 0000000..e124482 --- /dev/null +++ b/src/apis/asset/index.js @@ -0,0 +1,337 @@ +import { + GET_ASSET_MAIN_LIST_API, + DELETE_ASSET_MAIN_LIST_API, + POST_ASSET_MAIN_LIST_API, + GET_ASSET_SUB_LIST_API, + DELETE_ASSET_SUB_LIST_API, + POST_ASSET_SUB_LIST_API, + GET_ASSET_LIST_API, + GET_ASSET_SINGLE_API, + GET_ASSET_FLOOR_LIST_API, + POST_ASSET_FLOOR_API, + DELETE_ASSET_FLOOR_API, + GET_ASSET_IOT_LIST_API, + DELETE_ASSET_ITEM_API, + POST_ASSET_SINGLE_API, + GET_ASSET_SUB_POINT_API, + GET_ASSET_IOT_SCHEMA_API, + POST_ASSET_IOT_SCHEMA_API, + GET_ASSET_DEVICE_ITEM_API, + POST_ASSET_DEVICE_ITEM_API, + DELETE_ASSET_DEVICE_ITEM_API, + GET_ASSET_DEPARTMENT_API, + POST_ASSET_DEPARTMENT_API, + DELETE_ASSET_DEPARTMENT_API, + GET_ASSET_ELECTYPE_API, + POST_ASSET_ELECTYPE_API, + DELETE_ASSET_ELECTYPE_API, + POST_ASSET_ELEC_SETTING_API, +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; +import { object } from "yup"; + +export const getAssetMainList = async (building_guid) => { + const res = await instance.post(GET_ASSET_MAIN_LIST_API,{building_guid}); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteAssetMainItem = async (id) => { + const res = await instance.post(DELETE_ASSET_MAIN_LIST_API, { id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAssetMainList = async ({ id, system_key, system_value, building_guid }) => { + const res = await instance.post(POST_ASSET_MAIN_LIST_API, { + id, + system_key, + system_value, + building_guid + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAssetSubList = async (id) => { + const res = await instance.post(GET_ASSET_SUB_LIST_API, { id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAssetSubList = async (formData) => { + const res = await instance.post(POST_ASSET_SUB_LIST_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteAssetSubItem = async (id) => { + const res = await instance.post(DELETE_ASSET_SUB_LIST_API, { id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAssetList = async (variable_id) => { + const res = await instance.post(GET_ASSET_LIST_API, { + variable_id: parseInt(variable_id), + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAssetSingle = async (main_id) => { + const res = await instance.post(GET_ASSET_SINGLE_API, { main_id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAssetSingle = async (data) => { + let formData = new FormData(); + + for (let [key, value] of Object.entries(data)) { + console.log(key, value); + if (Array.isArray(value)) { + if (key === "oriFile") { + value.forEach((element, index) => { + formData.append(`${key}[${index}].file`, element.id ? null : element); + formData.append(`${key}[${index}].orgName`, element.name); + formData.append( + `${key}[${index}].saveName`, + element.id ? element.saveName : "" + ); + }); + } else { + value.forEach((element, index) => { + formData.append( + `sub_device[${index}].device_number`, + element.device_number + ); + formData.append(`sub_device[${index}].points`, element.points); + }); + } + } else { + formData.append(key, value); + } + } + + const res = await instance.post(POST_ASSET_SINGLE_API, formData); + return apihandler(res.code, res.data, { msg: res.msg, code: res.code }); +}; + +export const deleteAssetItem = async (main_id) => { + const res = await instance.post(DELETE_ASSET_ITEM_API, { main_id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAssetFloorList = async (building_guid) => { + const res = await instance.post(GET_ASSET_FLOOR_LIST_API, { building_guid }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAssetFloor = async (formData) => { + const res = await instance.post(POST_ASSET_FLOOR_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteAssetFloor = async (formData) => { + const res = await instance.post(DELETE_ASSET_FLOOR_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAssetIOTList = async (sub_system_tag, points) => { + const res = await instance.post(GET_ASSET_IOT_LIST_API, { + sub_system_tag, + points, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAssetSubPoint = async (sub_system_tag) => { + const res = await instance.post(GET_ASSET_SUB_POINT_API, { + sub_system_tag, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getIOTSchema = async (variable_id) => { + const res = await instance.post(GET_ASSET_IOT_SCHEMA_API, { variable_id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postIOTSchema = async ({ name, variable_id, points }) => { + const res = await instance.post(POST_ASSET_IOT_SCHEMA_API, { + name, + variable_id, + points, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDeviceItem = async (variable_id) => { + const res = await instance.post(GET_ASSET_DEVICE_ITEM_API, { variable_id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postDeviceItem = async ({ + id, + variable_id, + full_name, + points, + decimals, + is_bool, + is_link, +}) => { + const res = await instance.post(POST_ASSET_DEVICE_ITEM_API, { + id, + variable_id, + full_name, + points, + decimals, + is_bool, + is_link, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteDeviceItem = async (id) => { + const res = await instance.post(DELETE_ASSET_DEVICE_ITEM_API, { id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDepartmentList = async () => { + const res = await instance.post(GET_ASSET_DEPARTMENT_API, {}); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postDepartmentList = async ({ name, id }) => { + const res = await instance.post(POST_ASSET_DEPARTMENT_API, { + name, + id, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteDepartmentItem = async (id) => { + const res = await instance.post(DELETE_ASSET_DEPARTMENT_API, { id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getElecTypeList = async () => { + const res = await instance.post(GET_ASSET_ELECTYPE_API, {}); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postElecTypeList = async ({ name, id }) => { + const res = await instance.post(POST_ASSET_ELECTYPE_API, { + name, + id, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteElecTypeItem = async (id) => { + const res = await instance.post(DELETE_ASSET_ELECTYPE_API, { id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postAssetElecSetting = async (formData) => { + const res = await instance.post(POST_ASSET_ELEC_SETTING_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/building/api.js b/src/apis/building/api.js new file mode 100644 index 0000000..b71612b --- /dev/null +++ b/src/apis/building/api.js @@ -0,0 +1,6 @@ +export const GET_BUILDING_API = `/AssetManage/GetBuildingList`; +export const POST_BUILDING_API = `/AssetManage/SaveBuilding`; +export const DELETE_BUILDING_API = `/AssetManage/DeleteBuilding`; +export const GET_AUTHPAGE_API = `/api/GetUsrFroList`; +export const GET_SUBAUTHPAGE_API = `/api/Device/GetMainSub`; +export const GET_ALL_DEVICE_API = `/api/Device/GetAllDevice`; diff --git a/src/apis/building/index.js b/src/apis/building/index.js new file mode 100644 index 0000000..0c3579e --- /dev/null +++ b/src/apis/building/index.js @@ -0,0 +1,90 @@ +import { + GET_BUILDING_API, + POST_BUILDING_API, + DELETE_BUILDING_API, + GET_AUTHPAGE_API, + GET_SUBAUTHPAGE_API, + GET_ALL_DEVICE_API, +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; + +export const getBuildings = async () => { + const res = await instance.post(GET_BUILDING_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postBuildings = async ({ full_name, building_guid }) => { + const res = await instance.post(POST_BUILDING_API, { + full_name, + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteBuildings = async (building_guid) => { + const res = await instance.post(DELETE_BUILDING_API, { building_guid }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAuth = async (lang) => { + const res = await instance.post(GET_AUTHPAGE_API, { + lang, + }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAllSysSidebar = async (building_guid) => { + const res = await instance.post(GET_SUBAUTHPAGE_API, {building_guid}); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getSysSidebar = async (building_tag) => { + const res = await instance.post(GET_SUBAUTHPAGE_API, { + building_tag, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAllDevice = async () => { + const res = await instance.post(GET_ALL_DEVICE_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const ackSingleAlarm = async (uuid) => { + const res = await instance.post( + `/obix/alarm/${uuid}/ack`, + '' + ); + console.log("acked", res); + return apihandler(res.code, res, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/dashboard/api.js b/src/apis/dashboard/api.js new file mode 100644 index 0000000..1d914f6 --- /dev/null +++ b/src/apis/dashboard/api.js @@ -0,0 +1,13 @@ +export const GET_DASHBOARD_INIT_API = `/SituationRoom/Initialize`; +export const GET_DASHBOARD_DEVICE_API = `/SituationRoom/GetDeviceList`; +export const GET_DASHBOARD_PRODUCT_COMPLETE_API = `/SituationRoom/GetProductionStatus`; +export const GET_DASHBOARD_TEMP_API = `/SituationRoom/GetTempratureData`; +export const GET_DASHBOARD_ROOM_TEMP_API = `/SituationRoom/GetFormulaRoomStatusData`; +export const GET_DASHBOARD_ENERGY_API = `/SituationRoom/GetEnergeData`; +export const POST_DASHBOARD_PRODUCT_TARGET_SETTING_API = `/SituationRoom/SetTargetSetting`; +export const GET_DASHBOARD_PRODUCT_TARGET_SETTING_API = `/SituationRoom/GetTargetSetting` +export const GET_DASHBOARD_PRODUCT_HISTORY_API = `/SituationRoom/GetProductionHistory` + +export const GET_DASHBOARD_ENERGY_INFO_API = `api/dashboard/GetEnergyInfo` +export const GET_DASHBOARD_ENERGY_COST_API = `api/dashboard/GetEnergyCost` +export const GET_DASHBOARD_ALARMOPERATION_INFO_API = `api/dashboard/GetAlarmOperationInfo` \ No newline at end of file diff --git a/src/apis/dashboard/index.js b/src/apis/dashboard/index.js new file mode 100644 index 0000000..e238c40 --- /dev/null +++ b/src/apis/dashboard/index.js @@ -0,0 +1,178 @@ +import { + GET_DASHBOARD_INIT_API, + GET_DASHBOARD_DEVICE_API, + GET_DASHBOARD_PRODUCT_COMPLETE_API, + GET_DASHBOARD_TEMP_API, + GET_DASHBOARD_ROOM_TEMP_API, + GET_DASHBOARD_ENERGY_API, + POST_DASHBOARD_PRODUCT_TARGET_SETTING_API, + GET_DASHBOARD_PRODUCT_TARGET_SETTING_API, + GET_DASHBOARD_PRODUCT_HISTORY_API, + GET_DASHBOARD_ENERGY_INFO_API, + GET_DASHBOARD_ENERGY_COST_API, + GET_DASHBOARD_ALARMOPERATION_INFO_API, +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; + +export const getDashboardInit = async (page_type = "SR") => { + const res = await instance.post(GET_DASHBOARD_INIT_API, { + page_type, // SR:戰情室;PS:生產設定 + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardDevice = async ({ option }) => { + const res = await instance.post(GET_DASHBOARD_DEVICE_API, { + option: parseInt(option), + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardProductCompletion = async () => { + const res = await instance.post(GET_DASHBOARD_PRODUCT_COMPLETE_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardEnergy = async () => { + const res = await instance.post(GET_DASHBOARD_ENERGY_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardFormulaRoom = async ({ timeInterval, typeOption }) => { + const res = await instance.post(GET_DASHBOARD_ROOM_TEMP_API, { + timeInterval, + typeOption, + }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardTemp = async ({ + timeInterval, + tempOption, + typeOption = "", +}) => { + const res = typeOption + ? await instance.post(GET_DASHBOARD_TEMP_API, { + timeInterval, + tempOption, + typeOption, + }) + : await instance.post(GET_DASHBOARD_TEMP_API, { + timeInterval, + tempOption, + }); + console.log(res); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postDashboardProductTarget = async ({ date, type, data }) => { + let formatData = []; + + for (let [key, value] of Object.entries(data)) { + formatData.push({ + name: key, + value, + }); + } + + const res = await instance.post(POST_DASHBOARD_PRODUCT_TARGET_SETTING_API, { + target: { + date, + type, + data: formatData, + }, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardProductTarget = async ({ date, type }) => { + const res = await instance.post(GET_DASHBOARD_PRODUCT_TARGET_SETTING_API, { + target: { + date, + type, + }, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getDashboardProductRecord = async ({ start_time, end_time }) => { + const res = await instance.post(GET_DASHBOARD_PRODUCT_HISTORY_API, { + start_time, + end_time, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getEnergyInfo = async (building_guid) => { + const res = await instance.post(GET_DASHBOARD_ENERGY_INFO_API, { + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getEnergyCost = async ({ + department_id, + floor_guid, + building_guid, +}) => { + const res = await instance.post(GET_DASHBOARD_ENERGY_COST_API, { + department_id, + floor_guid, + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAlarmOperationInfo = async (building_guid) => { + const res = await instance.post(GET_DASHBOARD_ALARMOPERATION_INFO_API, { + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/energy/api.js b/src/apis/energy/api.js new file mode 100644 index 0000000..9f427a0 --- /dev/null +++ b/src/apis/energy/api.js @@ -0,0 +1,23 @@ +export const GET_REALTIME_DIST_API = `/api/Energe/GetRealTimeDistribution`; +export const GET_ELECUSE_DAY_API = `/api/Energe/GetElecUseDay`; +export const GET_TAI_POWER_API = `/api/Energe/GetTaipower`; + +export const GET_SIDEBAR_API = `/api/GetSideBar`; +export const GET_SEARCH_API = `/api/Energe/GetFilter`; + +export const GET_REPORT_API = `/api/Energe/GetReport`; +export const GET_Excel_API = `/api/Energe/GetReportExcel`; + +// 即時需量 +export const GET_DEMAND_API = `/api/Energe/SearchDemandValue`; +export const POST_ADD_DEMAND_API = `/api/Energe/AddDemandValue`; +export const POST_EDIT_DEMAND_API = `/api/Energe/UpdateDemandValue`; +export const GET_REALTIME_DEMAND_API = `/api/Energe/GetRealTimeDemand`; + +// 碳排係數 +export const GET_CARBON_API = `/api/Energe/SearchCarbonValue`; +export const POST_EDIT_CARBON_API = `/api/Energe/UpdateCarbonValue`; + +// 時間電價 +export const GET_TIME_ELEC_API = `/api/Energe/SearchTimeElec`; +export const POST_TIME_ELEC_API = `/api/Energe/UpdateTimeElecValue`; \ No newline at end of file diff --git a/src/apis/energy/index.js b/src/apis/energy/index.js new file mode 100644 index 0000000..1e7057c --- /dev/null +++ b/src/apis/energy/index.js @@ -0,0 +1,232 @@ +import { + GET_REALTIME_DIST_API, + GET_ELECUSE_DAY_API, + GET_TAI_POWER_API, + GET_SIDEBAR_API, + GET_SEARCH_API, + GET_REPORT_API, + GET_Excel_API, + GET_DEMAND_API, + POST_EDIT_DEMAND_API, + GET_REALTIME_DEMAND_API, + GET_CARBON_API, + POST_EDIT_CARBON_API, + GET_TIME_ELEC_API, + POST_TIME_ELEC_API, +} from "./api"; +import instance, { fileInstance } from "@/util/request"; +import apihandler from "@/util/apihandler"; +import downloadExcel from "@/util/downloadExcel"; + +export const getRealTimeDist = async ({ + building_guid, + department_id_list, + floor_guid_list, +}) => { + const res = await instance.post(GET_REALTIME_DIST_API, { + building_guid, + department_id_list, + floor_guid_list, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getElecUseDay = async ({ + building_guid, + department_id_list, + floor_guid_list, +}) => { + const res = await instance.post(GET_ELECUSE_DAY_API,{ + building_guid, + department_id_list, + floor_guid_list, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getTaipower = async ({ + coefficient, + building_guid, + department_id_list, + floor_guid_list, +}) => { + const res = await instance.post(GET_TAI_POWER_API, { + coefficient, + building_guid, + department_id_list, + floor_guid_list, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getSideBar = async (system_type) => { + const res = await instance.post(GET_SIDEBAR_API, { system_type }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getEnergySearch = async (type) => { + const res = await instance.post(GET_SEARCH_API, { type }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getReport = async ({ + department, + elecType, + floor, + start_time, + end_time, + type, +}) => { + const res = await instance.post(GET_REPORT_API, { + department, + elecType, + floor, + start_time, + end_time, + type, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getExcel = async ({ + department, + elecType, + floor, + start_time, + end_time, + type, +}) => { + const res = await fileInstance.post( + GET_Excel_API, + { + department, + elecType, + floor, + start_time, + end_time, + type, + }, + { responseType: "blob" } + ); + + return apihandler( + res.code, + res, + { + msg: res.msg, + code: res.code, + }, + downloadExcel + ); +}; + +export const getDemand = async (building_guid) => { + const res = await instance.post(GET_DEMAND_API, { building_guid }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postEditDemand = async ({ + id, + contract, + alert, + reset, + building_guid, +}) => { + const res = await instance.put(POST_EDIT_DEMAND_API, { + id, + contract, + alert, + reset, + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getCarbonValue = async (building_guid) => { + const res = await instance.post(GET_CARBON_API, { building_guid }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postEditCarbonValue = async ({ + id, + coefficient, + building_guid, +}) => { + const res = await instance.put(POST_EDIT_CARBON_API, { + id, + coefficient, + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getRealTimeDemand = async (building_guid) => { + const res = await instance.post(GET_REALTIME_DEMAND_API, { building_guid }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getTimeElec = async (building_guid) => { + const res = await instance.post(GET_TIME_ELEC_API, { building_guid }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postTimeElec = async ({ sheet, cost, building_guid }) => { + const res = await instance.put(POST_TIME_ELEC_API, { + sheet, + cost, + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/forge/api.js b/src/apis/forge/api.js new file mode 100644 index 0000000..fa01175 --- /dev/null +++ b/src/apis/forge/api.js @@ -0,0 +1,3 @@ +export const GET_FORGETOKEN_API = `/api/forge/oauth/token`; + +export const GET_FORGEURN_API = `/api/Device/GetBuild`; diff --git a/src/apis/forge/index.js b/src/apis/forge/index.js new file mode 100644 index 0000000..d13d4bb --- /dev/null +++ b/src/apis/forge/index.js @@ -0,0 +1,24 @@ +import instance from "@/util/request"; +import { GET_FORGETOKEN_API, GET_FORGEURN_API } from "./api"; +import apihandler from "@/util/apihandler"; + +export const getUrn = async () => { + const res = await instance.post(GET_FORGEURN_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getAccessToken = async (callback) => { + try { + const resp = await instance.get(GET_FORGETOKEN_API); + console.log(resp) + const { dictionary } = resp; + callback(dictionary.access_token, dictionary.expires_in); + } catch (err) { + alert("Could not obtain access token. See the console for more details."); + console.error(err); + } +}; diff --git a/src/apis/graph/api.js b/src/apis/graph/api.js new file mode 100644 index 0000000..427ae7c --- /dev/null +++ b/src/apis/graph/api.js @@ -0,0 +1,16 @@ +// graph +const BASEURL = import.meta.env.VITE_API_BASEURL; +export const GET_GRAPH_SIDEBAR_API = `/GraphManage/GraphManageTreeList`; + +export const UPDATE_GRAPH_SIDEBAR_API = `/GraphManage/EditGraphManageTree`; +export const REMOVE_GRAPH_SIDEBAR_API = `/GraphManage/DelGraphManageTree`; +export const POST_GRAPH_SIDEBAR_API = `/GraphManage/SaveGraphManageTree`; + +export const GET_GRAPH_PARAM_OPTION_API = `/GraphManage/GraManSpecList`; + +export const GET_GRAPH_TABLE_API = `/GraphManage/GraManList`; +export const POST_GRAPH_TABLE_API = `/GraphManage/SaveGraMan`; +export const POST_GRAPH_TABLE_API_2 = `/GraphManage/SaveGraMan`; // 原先沒有小類及規格的 +export const UPDATE_GRAPH_TABLE_API = `/GraphManage/EdtOneGraMan`; + +export const DELETE_GRAPH_TABLE_API = `/GraphManage/DelOneGraMan`; diff --git a/src/apis/graph/index.js b/src/apis/graph/index.js new file mode 100644 index 0000000..de9be1f --- /dev/null +++ b/src/apis/graph/index.js @@ -0,0 +1,122 @@ +import { + GET_GRAPH_SIDEBAR_API, + UPDATE_GRAPH_SIDEBAR_API, + REMOVE_GRAPH_SIDEBAR_API, + POST_GRAPH_SIDEBAR_API, + GET_GRAPH_TABLE_API, + GET_GRAPH_PARAM_OPTION_API, + POST_GRAPH_TABLE_API, + DELETE_GRAPH_TABLE_API, + POST_GRAPH_TABLE_API_2, + UPDATE_GRAPH_TABLE_API +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apiHandler"; + +export const getSideBar = async () => { + const res = await instance.post(GET_GRAPH_SIDEBAR_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const addSideBarTreeName = async ({ parent_id, name }) => { + const res = await instance.post(POST_GRAPH_SIDEBAR_API, { parent_id, name }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const updateSideBarTreeName = async ({ id, name }) => { + const res = await instance.post(UPDATE_GRAPH_SIDEBAR_API, { id, name }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const removeSideBarTreeName = async (id) => { + const res = await instance.post(REMOVE_GRAPH_SIDEBAR_API, { id }); + + return apihandler( + res.code, + { isSuccess: true }, + { + msg: res.msg, + code: res.code, + isSuccess: false, + } + ); +}; + +// 中間 table +export const getGraphData = async (id) => { + const res = await instance.post(GET_GRAPH_TABLE_API, { layer_id: id }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + +export const getGraphAddParamOption = async () => { + const res = await instance.post(GET_GRAPH_PARAM_OPTION_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + +export const addGraphTableData = async (formData) => { + const res = await instance.post(POST_GRAPH_TABLE_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + +export const delGraphData = async (id, hard_delete = false, recover_delete = false) => { + const res = await instance.post(DELETE_GRAPH_TABLE_API, { id, hard_delete, recover_delete }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + + +export const addGraphTableDataWithoutSubSys = async (formData) => { + const res = await instance.post(POST_GRAPH_TABLE_API_2, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + +export const editGraphTableDataWithoutSubSys = async (formData) => { + const res = await instance.post(UPDATE_GRAPH_TABLE_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + + + + + diff --git a/src/apis/history/api.js b/src/apis/history/api.js new file mode 100644 index 0000000..64de717 --- /dev/null +++ b/src/apis/history/api.js @@ -0,0 +1,11 @@ +// history +const BASEURL = import.meta.env.VITE_API_BASEURL; +export const GET_HISTORY_SIDEBAR_API = `/api/History/GetDeviceInfo`; +export const GET_HISTORY_POINT_API = `/api/History/GetAllDevPoi`; +export const GET_HISTORY_DATA_API = `/api/History/GetHistoryData`; +export const GET_HISTORY_EXPORT_API = `/api/ExportHistoryExcel`; + +export const GET_HISTORY_FAVORITE_API = `/api/History/GetHistoryFavorite`; +export const POST_HISTORY_FAVORITE_API = `/api/History/SaveHistoryFavorite`; +export const DELETE_HISTORY_FAVORITE_API = `/api/History/DeleteHistoryFavorite`; +export const UPDATE_HISTORY_FAVORITE_API = `/api/History/EditHistoryFavorite`; diff --git a/src/apis/history/index.js b/src/apis/history/index.js new file mode 100644 index 0000000..c393159 --- /dev/null +++ b/src/apis/history/index.js @@ -0,0 +1,177 @@ +import { + GET_HISTORY_SIDEBAR_API, + GET_HISTORY_POINT_API, + GET_HISTORY_DATA_API, + GET_HISTORY_FAVORITE_API, + POST_HISTORY_FAVORITE_API, + DELETE_HISTORY_FAVORITE_API, + UPDATE_HISTORY_FAVORITE_API, + GET_HISTORY_EXPORT_API, +} from "./api"; +import instance, { fileInstance } from "@/util/request"; +import apihandler from "@/util/apiHandler"; +import downloadExcel from "@/util/downloadExcel"; + +export const getHistorySideBar = async ({ + sub_system_tag, + department_id, + elec_type_id, + building_guid, +}) => { + const res = await instance.post(GET_HISTORY_SIDEBAR_API, { + sub_system_tag, + department_id, + elec_type_id, + building_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getHistoryPoints = async (Device_list) => { + const res = await instance.post(GET_HISTORY_POINT_API, { + Device_list, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getHistoryData = async ({ + Type, + Start_date, + End_date, + Start_time, + End_time, + Device_list, + Points, + table_type, +}) => { + /* + { + Type, + Start_date, + End_date, + Start_time, + End_time, + Device_list, + Points, + } + */ + const res = await instance.post(GET_HISTORY_DATA_API, { + Start_date, + End_date, + Start_time, + End_time, + Device_list: Array.isArray(Device_list) ? Device_list : [Device_list], + Points: Array.isArray(Points) ? Points : [Points], + Type: parseInt(Type), + table_type: parseInt(table_type), + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getHistoryExportData = async ({ + Type, + Start_date, + End_date, + Start_time, + End_time, + Device_list, + Points, +}) => { + /* + { + Type, + Start_date, + End_date, + Start_time, + End_time, + Device_list, + Points, + } + */ + const res = await fileInstance.post( + GET_HISTORY_EXPORT_API, + { + // ...exportContent, + Start_date: Start_date, + End_date: End_date, + Start_time: Start_time, + End_time: End_time, + Points: Array.isArray(Points) ? Points : [Points], + Device_list: Array.isArray(Device_list) ? Device_list : [Device_list], + Type: parseInt(Type), + Building_tag_list: [...new Set(Device_list.map((d) => d.split("_")[1]))], + }, + { responseType: "blob" } + ); + + return apihandler( + res.code, + res, + { + msg: res.msg, + code: res.code, + }, + downloadExcel + ); +}; + +export const getHistoryFavorite = async () => { + const res = await instance.post(GET_HISTORY_FAVORITE_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const addHistoryFavorite = async (value) => { + const res = await instance.post(POST_HISTORY_FAVORITE_API, { + device_name_tag: value.sub_system_tag, + Device_list: Array.isArray(value.Device_list) + ? value.Device_list + : [value.Device_list], + Points: Array.isArray(value.Points) ? value.Points : [value.Points], + favorite_name: value.favorite_name, + Type: parseInt(value.Type), + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteHistoryFavorite = async (favorite_guid) => { + const res = await instance.post(DELETE_HISTORY_FAVORITE_API, { + favorite_guid, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const editHistoryFavorite = async ({ favorite_guid, favorite_name }) => { + const res = await instance.post(UPDATE_HISTORY_FAVORITE_API, { + favorite_guid, + favorite_name, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/login/api.js b/src/apis/login/api.js new file mode 100644 index 0000000..f145d28 --- /dev/null +++ b/src/apis/login/api.js @@ -0,0 +1 @@ +export const POST_LOGIN = `/api/LoginV2/`; diff --git a/src/apis/login/index.js b/src/apis/login/index.js new file mode 100644 index 0000000..2bb6498 --- /dev/null +++ b/src/apis/login/index.js @@ -0,0 +1,27 @@ +import { POST_LOGIN } from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; + +export async function Login({ account, password }) { + const res = await instance.post(POST_LOGIN, { + account, + password, + }); + + if (res.code === "0000") { + console.log(res.data); + document.cookie = `JWT-Authorization=${res.data.token}; Max-Age=${ + 24 * 60 * 60 * 1000 + }`; + // 設定 user_name Cookie + document.cookie = `user_name=${res.data.user_name}; Max-Age=${ + 24 * 60 * 60 * 1000 + }`; + } + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +} diff --git a/src/apis/operation/api.js b/src/apis/operation/api.js new file mode 100644 index 0000000..ae51f10 --- /dev/null +++ b/src/apis/operation/api.js @@ -0,0 +1,16 @@ +export const GET_OPERATION_RECORD_API = `/operation/OpeRecList`; +export const GET_OPERATION_EXPORT_API = `/operation/OpeExportExcel`; +export const GET_OPERATION_DEVICELIST_API = `/operation/DevList`; +export const GET_OPERATION_COMPANYLIST_API = `/operation/OpeFirSel`; + +export const GET_SINGLE_OPERATION_RECORD_API = `/operation/OpeRecRead`; +export const GET_OPERATION_FORMID_API = `/operation/GetFormId`; // 新增單號前置 +export const POST_OPERATION_RECORD_API = `/operation/SavOpeRecord`; +export const DELETE_OPERATION_RECORD_API = `/operation/DelOpeRecord`; + +// 廠商 +export const GET_OPERATION_COMPANY_API = `/operation/OpeFirList`; // 廠商列表 +export const GET_OPERATION_SINGLE_CONPANY_API = `/operation/OpeFirRead`; // 單一廠商 +export const POST_OPERATION_COMPANY_API = `/operation/SaveOpeFirm`; +export const UPDATE_OPERATION_COMPANY_API = `/operation/EdtOneOpeFirm`; +export const DELETE_OPERATION_COMPANY_API = `/operation/DelOpeFirm`; diff --git a/src/apis/operation/index.js b/src/apis/operation/index.js new file mode 100644 index 0000000..c7c9d1b --- /dev/null +++ b/src/apis/operation/index.js @@ -0,0 +1,190 @@ +import { + GET_OPERATION_RECORD_API, + GET_OPERATION_COMPANY_API, + GET_SINGLE_OPERATION_RECORD_API, + GET_OPERATION_DEVICELIST_API, + POST_OPERATION_RECORD_API, + GET_OPERATION_EXPORT_API, + GET_OPERATION_FORMID_API, + DELETE_OPERATION_RECORD_API, + POST_OPERATION_COMPANY_API, + UPDATE_OPERATION_COMPANY_API, + DELETE_OPERATION_COMPANY_API, +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; +import dayjs from "dayjs"; + +export const getOperationRecord = async ({ + work_type, + start_created_at, + end_created_at, + serial_number, + sub_system_tag, +}) => { + const res = await instance.post(GET_OPERATION_RECORD_API, { + work_type: parseInt(work_type), + // start_created_at: dayjs(start_created_at).format("YYYY-MM-DDTHH:mm:ss"), + // end_created_at: dayjs(end_created_at) + // .date(dayjs(end_created_at).get("date") + 1) + // .format("YYYY-MM-DDTHH:mm:ss"), + serial_number: serial_number || null, + main_system_tag: null, + sub_system_tag: + typeof sub_system_tag === "string" ? [sub_system_tag] : sub_system_tag, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOperationExportRecord = async ({ + work_type, + start_created_at, + end_created_at, +}) => { + const res = await instance.post(GET_OPERATION_EXPORT_API, { + work_type: parseInt(work_type), + startdate: dayjs(start_created_at).format("YYYY-MM-DDTHH:mm:ss"), + enddate: dayjs(end_created_at) + .date(dayjs(end_created_at).get("date") + 1) + .format("YYYY-MM-DDTHH:mm:ss"), + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOperationCompanyList = async () => { + const res = await instance.post(GET_OPERATION_COMPANY_API, { + sub_system_tag: [], + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOperationDeviceList = async ({ + list_sub_system_tag, + device_building_tag, + device_area_tag, +}) => { + const res = await instance.post(GET_OPERATION_DEVICELIST_API, { + list_sub_system_tag: + typeof list_sub_system_tag === "string" + ? [list_sub_system_tag] + : list_sub_system_tag, + device_building_tag, + device_area_tag, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOperationEditRecord = async (formId) => { + const res = await instance.post(GET_SINGLE_OPERATION_RECORD_API, { + formId, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const postOperationRecord = async (formData) => { + const res = await instance.post(POST_OPERATION_RECORD_API, formData); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getOperationFormId = async () => { + const res = await instance.post(GET_OPERATION_FORMID_API, {}); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteOperationRecord = async (id) => { + const res = await instance.post(DELETE_OPERATION_RECORD_API, { id }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +// 公司 +export const postOperationCompany = async ({ + name, + contact_person, + phone, + email, + city, + address, + tax_id_number, + remark, +}) => { + const res = await instance.post(POST_OPERATION_COMPANY_API, { + name, + contact_person, + phone, + email, + city, + address, + tax_id_number, + remark, + }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const updateOperationCompany = async ({ + name, + contact_person, + phone, + email, + city, + address, + tax_id_number, + remark, + id, +}) => { + const res = await instance.post(UPDATE_OPERATION_COMPANY_API, { + id, + name, + contact_person, + phone, + email, + city, + address, + tax_id_number, + remark, + }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const deleteOperationCompany = async (id) => { + const res = await instance.post(DELETE_OPERATION_COMPANY_API, { id }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/apis/productSetting/api.js b/src/apis/productSetting/api.js new file mode 100644 index 0000000..d19a40d --- /dev/null +++ b/src/apis/productSetting/api.js @@ -0,0 +1,4 @@ +export const POST_SETTING_POINT_API = `/SituationRoom/SetPointSetting`; + +export const GET_SETTING_TYPE_API = `/SituationRoom/GetProducts`; +export const POST_SETTING_TYPE_API = `/SituationRoom/SetProduct`; diff --git a/src/apis/productSetting/index.js b/src/apis/productSetting/index.js new file mode 100644 index 0000000..1ed4d46 --- /dev/null +++ b/src/apis/productSetting/index.js @@ -0,0 +1,45 @@ +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; +import { + POST_SETTING_POINT_API, + GET_SETTING_TYPE_API, + POST_SETTING_TYPE_API, +} from "./api"; + +export const postProductSettingPoint = async (type, devices) => { + const res = await instance.post(POST_SETTING_POINT_API, { + devices: devices.map(({ device_number }) => device_number), + values: [ + { + point: "Type", + value: type.value, + }, + ], + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + +export const getProductSettingType = async () => { + const res = await instance.post(GET_SETTING_TYPE_API); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; + +export const postProductSettingType = async (data) => { + const res = await instance.post(POST_SETTING_TYPE_API, data); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + isSuccess: false, + }); +}; diff --git a/src/apis/system/api.js b/src/apis/system/api.js new file mode 100644 index 0000000..a57d55f --- /dev/null +++ b/src/apis/system/api.js @@ -0,0 +1,3 @@ +export const GET_SYSTEM_FLOOR_LIST_API = `/api/Device/GetFloor`; +export const GET_SYSTEM_DEVICE_LIST_API = `/api/Device/GetDeviceList`; +export const GET_SYSTEM_REALTIME_API = `/api/Device/GetRealTimeData`; \ No newline at end of file diff --git a/src/apis/system/index.js b/src/apis/system/index.js new file mode 100644 index 0000000..900ac6d --- /dev/null +++ b/src/apis/system/index.js @@ -0,0 +1,44 @@ +import { + GET_SYSTEM_FLOOR_LIST_API, + GET_SYSTEM_DEVICE_LIST_API, + GET_SYSTEM_REALTIME_API, +} from "./api"; +import instance from "@/util/request"; +import apihandler from "@/util/apihandler"; + +export const getSystemFloors = async (building_tag, sub_system_tag) => { + const res = await instance.post(GET_SYSTEM_FLOOR_LIST_API, { + building_tag, + sub_system_tag, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getSystemDevices = async ({ + sub_system_tag, + building_guid, + department_id_list, +}) => { + const res = await instance.post(GET_SYSTEM_DEVICE_LIST_API, { + sub_system_tag, + building_guid, + department_id_list, + }); + + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; + +export const getSystemRealTime = async (device_list) => { + const res = await instance.post(GET_SYSTEM_REALTIME_API, { device_list }); + return apihandler(res.code, res.data, { + msg: res.msg, + code: res.code, + }); +}; diff --git a/src/assets/base.css b/src/assets/base.css new file mode 100644 index 0000000..09140d1 --- /dev/null +++ b/src/assets/base.css @@ -0,0 +1,89 @@ +/* color palette from */ +:root { + --primary: #6fdda8; + --vt-c-white: #ffffff; + --vt-c-white-soft: #f8f8f8; + --vt-c-white-mute: #f2f2f2; + + --vt-c-black: #181818; + --vt-c-black-soft: #222222; + --vt-c-black-mute: #282828; + + --vt-c-indigo: #2c3e50; + + --vt-c-divider-light-1: rgba(60, 60, 60, 0.29); + --vt-c-divider-light-2: rgba(60, 60, 60, 0.12); + --vt-c-divider-dark-1: rgba(84, 84, 84, 0.65); + --vt-c-divider-dark-2: rgba(84, 84, 84, 0.48); + + --vt-c-text-light-1: var(--vt-c-indigo); + --vt-c-text-light-2: rgba(60, 60, 60, 0.66); + --vt-c-text-dark-1: var(--vt-c-white); + --vt-c-text-dark-2: rgba(235, 235, 235, 0.64); +} + +/* semantic color variables for this project */ +:root { + --color-background: var(--vt-c-white); + --color-background-soft: var(--vt-c-white-soft); + --color-background-mute: var(--vt-c-white-mute); + + --color-border: var(--vt-c-divider-light-2); + --color-border-hover: var(--vt-c-divider-light-1); + + --color-heading: var(--vt-c-text-light-1); + --color-text: var(--vt-c-text-dark-1); + + --section-gap: 160px; + +} + +@media (prefers-color-scheme: dark) { + :root { + --color-background: var(--vt-c-black); + --color-background-soft: var(--vt-c-black-soft); + --color-background-mute: var(--vt-c-black-mute); + + --color-border: var(--vt-c-divider-dark-2); + --color-border-hover: var(--vt-c-divider-dark-1); + + --color-heading: var(--vt-c-text-dark-1); + --color-text: var(--vt-c-text-dark-2); + } +} + +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + font-weight: normal; +} + +body { + min-height: 100vh; + color: var(--color-text); + background: var(--color-background); + transition: + color 0.5s, + background-color 0.5s; + line-height: 1.6; + font-family: + Inter, + -apple-system, + BlinkMacSystemFont, + 'Segoe UI', + Roboto, + Oxygen, + Ubuntu, + Cantarell, + 'Fira Sans', + 'Droid Sans', + 'Helvetica Neue', + sans-serif; + font-size: 15px; + text-rendering: optimizeLegibility; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + +} diff --git a/src/assets/btn.css b/src/assets/btn.css new file mode 100644 index 0000000..9071e94 --- /dev/null +++ b/src/assets/btn.css @@ -0,0 +1,56 @@ +/**區域框**/ +.area-box { + /* width: 100%; */ + border-radius: 10px; + display: flex; + align-items: center; + flex-wrap: wrap; + color: #fff; +} + +.area-box .item { + display: flex; + align-items: center; + flex-wrap: wrap; + color: #fff; + margin: 0; +} + +.area-box .item button:last-child::after { + display: none; +} + +.area-box .item button::after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + right: -15px; + margin: auto; + display: block; + width: 15px; + height: 1px; + background-color: #a1ffd6; + z-index: -1; +} + +.area-box .item button { + position: relative; + z-index: 1; + border-radius: 5px; + margin: 0 7px; + background-color: #021422; + padding: 0.5rem 0; + min-width: 65px; + color: #fff; + border: 1px solid #a1ffd6 !important; + text-align: center; + margin-bottom: 15px; + padding: 0 5px; +} + +.area-box .item button.active { + background-color: #6fdda8; + text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9); + box-shadow: 0px 0px 5px rgba(255, 255, 255, 0.8); +} diff --git a/src/assets/img/area-img-box-line-bottom.png b/src/assets/img/area-img-box-line-bottom.png new file mode 100644 index 0000000..021264a Binary files /dev/null and b/src/assets/img/area-img-box-line-bottom.png differ diff --git a/src/assets/img/area-img-box-line-top.png b/src/assets/img/area-img-box-line-top.png new file mode 100644 index 0000000..d27e7ec Binary files /dev/null and b/src/assets/img/area-img-box-line-top.png differ diff --git a/src/assets/img/background.jpg b/src/assets/img/background.jpg new file mode 100644 index 0000000..873a2f9 Binary files /dev/null and b/src/assets/img/background.jpg differ diff --git a/src/assets/img/chart-data-background01.svg b/src/assets/img/chart-data-background01.svg new file mode 100644 index 0000000..5668311 --- /dev/null +++ b/src/assets/img/chart-data-background01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/chart-data-background02.svg b/src/assets/img/chart-data-background02.svg new file mode 100644 index 0000000..4ccfade --- /dev/null +++ b/src/assets/img/chart-data-background02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/chart-data-background03.svg b/src/assets/img/chart-data-background03.svg new file mode 100644 index 0000000..32d1f69 --- /dev/null +++ b/src/assets/img/chart-data-background03.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/chart-title01.svg b/src/assets/img/chart-title01.svg new file mode 100644 index 0000000..8421061 --- /dev/null +++ b/src/assets/img/chart-title01.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/src/assets/img/chart-title02.svg b/src/assets/img/chart-title02.svg new file mode 100644 index 0000000..b49dea2 --- /dev/null +++ b/src/assets/img/chart-title02.svg @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/src/assets/img/chart-title03.svg b/src/assets/img/chart-title03.svg new file mode 100644 index 0000000..b935ccf --- /dev/null +++ b/src/assets/img/chart-title03.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/src/assets/img/chart-title04.svg b/src/assets/img/chart-title04.svg new file mode 100644 index 0000000..afa5774 --- /dev/null +++ b/src/assets/img/chart-title04.svg @@ -0,0 +1,21 @@ + + + + + + + + + + diff --git a/src/assets/img/equipment-item-background.svg b/src/assets/img/equipment-item-background.svg new file mode 100644 index 0000000..69359bd --- /dev/null +++ b/src/assets/img/equipment-item-background.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/equipment-item-background04.svg b/src/assets/img/equipment-item-background04.svg new file mode 100644 index 0000000..64b7d0d --- /dev/null +++ b/src/assets/img/equipment-item-background04.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/equipment-item-background05.svg b/src/assets/img/equipment-item-background05.svg new file mode 100644 index 0000000..67e6cbc --- /dev/null +++ b/src/assets/img/equipment-item-background05.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/equipment/replay01.svg b/src/assets/img/equipment/replay01.svg new file mode 100644 index 0000000..639e6eb --- /dev/null +++ b/src/assets/img/equipment/replay01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/equipment/replay02.svg b/src/assets/img/equipment/replay02.svg new file mode 100644 index 0000000..62e067b --- /dev/null +++ b/src/assets/img/equipment/replay02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/equipment/state-background.svg b/src/assets/img/equipment/state-background.svg new file mode 100644 index 0000000..8334698 --- /dev/null +++ b/src/assets/img/equipment/state-background.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/equipment/state-title.svg b/src/assets/img/equipment/state-title.svg new file mode 100644 index 0000000..6202385 --- /dev/null +++ b/src/assets/img/equipment/state-title.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/equipment/table-item-w.svg b/src/assets/img/equipment/table-item-w.svg new file mode 100644 index 0000000..74bbc0c --- /dev/null +++ b/src/assets/img/equipment/table-item-w.svg @@ -0,0 +1,7 @@ + + + + + + diff --git a/src/assets/img/item-data-left-2.svg b/src/assets/img/item-data-left-2.svg new file mode 100644 index 0000000..33018f6 --- /dev/null +++ b/src/assets/img/item-data-left-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/item-data-left.svg b/src/assets/img/item-data-left.svg new file mode 100644 index 0000000..24d1b55 --- /dev/null +++ b/src/assets/img/item-data-left.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/item-data-right-2.svg b/src/assets/img/item-data-right-2.svg new file mode 100644 index 0000000..9025333 --- /dev/null +++ b/src/assets/img/item-data-right-2.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/item-data-right.svg b/src/assets/img/item-data-right.svg new file mode 100644 index 0000000..927beac --- /dev/null +++ b/src/assets/img/item-data-right.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/logo.png b/src/assets/img/logo.png new file mode 100644 index 0000000..08837f4 Binary files /dev/null and b/src/assets/img/logo.png differ diff --git a/src/assets/img/logo.svg b/src/assets/img/logo.svg new file mode 100644 index 0000000..2ce49b1 --- /dev/null +++ b/src/assets/img/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/pagination/small-btn.svg b/src/assets/img/pagination/small-btn.svg new file mode 100644 index 0000000..4aab060 --- /dev/null +++ b/src/assets/img/pagination/small-btn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/src/assets/img/pagination/small-btn02.svg b/src/assets/img/pagination/small-btn02.svg new file mode 100644 index 0000000..131fed5 --- /dev/null +++ b/src/assets/img/pagination/small-btn02.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/assets/img/state-box-bottom.png b/src/assets/img/state-box-bottom.png new file mode 100644 index 0000000..cf28ba9 Binary files /dev/null and b/src/assets/img/state-box-bottom.png differ diff --git a/src/assets/img/state-box-top.png b/src/assets/img/state-box-top.png new file mode 100644 index 0000000..0d78c94 Binary files /dev/null and b/src/assets/img/state-box-top.png differ diff --git a/src/assets/img/state-title01.svg b/src/assets/img/state-title01.svg new file mode 100644 index 0000000..d91ac0d --- /dev/null +++ b/src/assets/img/state-title01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/state-title02.svg b/src/assets/img/state-title02.svg new file mode 100644 index 0000000..93ae18b --- /dev/null +++ b/src/assets/img/state-title02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/state-ul-background01.svg b/src/assets/img/state-ul-background01.svg new file mode 100644 index 0000000..717aee9 --- /dev/null +++ b/src/assets/img/state-ul-background01.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/state-ul-background02.svg b/src/assets/img/state-ul-background02.svg new file mode 100644 index 0000000..b2fbadb --- /dev/null +++ b/src/assets/img/state-ul-background02.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/state-ul-text.svg b/src/assets/img/state-ul-text.svg new file mode 100644 index 0000000..74a702b --- /dev/null +++ b/src/assets/img/state-ul-text.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/img/state-ul.svg b/src/assets/img/state-ul.svg new file mode 100644 index 0000000..302c130 --- /dev/null +++ b/src/assets/img/state-ul.svg @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/table/content-box-background01.svg b/src/assets/img/table/content-box-background01.svg new file mode 100644 index 0000000..ac04bca --- /dev/null +++ b/src/assets/img/table/content-box-background01.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/table/content-box-background02.svg b/src/assets/img/table/content-box-background02.svg new file mode 100644 index 0000000..634a8e7 --- /dev/null +++ b/src/assets/img/table/content-box-background02.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/table/content-box-background03.svg b/src/assets/img/table/content-box-background03.svg new file mode 100644 index 0000000..325068e --- /dev/null +++ b/src/assets/img/table/content-box-background03.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/table/content-box-background04.svg b/src/assets/img/table/content-box-background04.svg new file mode 100644 index 0000000..3034171 --- /dev/null +++ b/src/assets/img/table/content-box-background04.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/table/content-box-background05.svg b/src/assets/img/table/content-box-background05.svg new file mode 100644 index 0000000..a99f849 --- /dev/null +++ b/src/assets/img/table/content-box-background05.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/assets/img/table/large-btn.svg b/src/assets/img/table/large-btn.svg new file mode 100644 index 0000000..60f7df9 --- /dev/null +++ b/src/assets/img/table/large-btn.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + diff --git a/src/assets/img/table/large-btn02.svg b/src/assets/img/table/large-btn02.svg new file mode 100644 index 0000000..4ac0476 --- /dev/null +++ b/src/assets/img/table/large-btn02.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/src/assets/img/table/small-btn.svg b/src/assets/img/table/small-btn.svg new file mode 100644 index 0000000..4aab060 --- /dev/null +++ b/src/assets/img/table/small-btn.svg @@ -0,0 +1,14 @@ + + + + + + + + + + diff --git a/src/assets/img/table/small-btn02.svg b/src/assets/img/table/small-btn02.svg new file mode 100644 index 0000000..131fed5 --- /dev/null +++ b/src/assets/img/table/small-btn02.svg @@ -0,0 +1,9 @@ + + + + + + diff --git a/src/assets/img/text-position-line.svg b/src/assets/img/text-position-line.svg new file mode 100644 index 0000000..cec0432 --- /dev/null +++ b/src/assets/img/text-position-line.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/index.css b/src/assets/index.css new file mode 100644 index 0000000..eda00dd --- /dev/null +++ b/src/assets/index.css @@ -0,0 +1,81 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer components { + .arrow { + @apply relative triangle flex justify-center items-center text-lg; + box-shadow: inset 0px 6px 10px -10px rgba(255, 255, 255, 0.8), + inset 0px -6px 10px -10px rgba(255, 255, 255, 0.8); + } + + .triangle { + @apply after:block after:absolute after:bottom-0 after:left-[100%] + after:border-t-[1rem] after:border-b-[1rem] after:border-l-[2rem] + after:border-t-transparent after:border-b-transparent after:z-50; + } + .triangle-dark { + @apply after:border-l-info; + } + + .triangle-light { + @apply after:border-l-success; + } + .item button { + @apply hover:bg-active !important; + } + /* table */ + .content-box-background { + background: linear-gradient( + 180deg, + rgba(127, 237, 193, 0.1), + rgba(0, 0, 0, 0), + rgba(127, 237, 193, 0.1) + ); + } +} + +@layer utilities { + .btn{ + @apply whitespace-nowrap px-4 py-1; + text-shadow: 0px 0px 5px rgba(0, 0, 0, 0.9); + box-shadow: 0px 0px 5px rgba(255, 255, 255, 0.8); + } + + .btn-success { + @apply text-white border border-active bg-active hover:bg-[theme("colors.green.500")] + } + + .btn-info { + @apply text-white border border-info bg-info hover:bg-[theme("colors.sky.400")] + } + + .btn-outline-success { + @apply text-white border border-active hover:bg-active bg-transparent + } + + .btn-outline-info { + @apply text-white border border-info hover:bg-info bg-transparent + } + + .custom-border { + @apply border border-info rounded-md; + } + + .btn-text-without-border { + @apply active:border-0 focus:border-0 focus-visible:border-0 active:outline-none focus:outline-none focus-visible:outline-none; + } + + .btn-add { + @apply text-white border border-cyan-400 bg-cyan-400 hover:bg-[theme("colors.cyan.500")] + } + + .btn-search { + @apply text-white border border-sky-400 bg-sky-400 hover:bg-[theme("colors.sky.500")] + } + + .btn-export { + @apply text-white border border-emerald-400 bg-emerald-400 hover:bg-[theme("colors.emerald.500")] + } + +} \ No newline at end of file diff --git a/src/assets/logo.svg b/src/assets/logo.svg new file mode 100644 index 0000000..b6cd190 --- /dev/null +++ b/src/assets/logo.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/assets/main.css b/src/assets/main.css new file mode 100644 index 0000000..563f00d --- /dev/null +++ b/src/assets/main.css @@ -0,0 +1,29 @@ +@import "./base.css"; + +#app { + overflow: hidden; + font-weight: normal; + background-color: theme("colors.body"); + background-image: url("./img/background.jpg"); + background-size: cover; + color: #fff; + min-height: 100dvh; +} + +::-webkit-scrollbar { + width: 5px !important; + height: 8px !important; +} + +/* Track */ +::-webkit-scrollbar-track { + box-shadow: inset 0 0 5px grey; + border-radius: 10px; +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: theme("colors.info"); + border-radius: 10px; + box-shadow: theme("boxShadow.custom"); +} diff --git a/src/assets/pagination.css b/src/assets/pagination.css new file mode 100644 index 0000000..e5369ab --- /dev/null +++ b/src/assets/pagination.css @@ -0,0 +1,40 @@ +.page-box ul { + display: flex; + justify-content: flex-end; + flex-wrap: wrap; + font-size: 1rem; + color: #fff; + margin-bottom: 10px; +} + +.page-box ul li { + padding: 10px; + white-space: nowrap; + cursor: pointer; +} + + +.page-box ul .ant-pagination-item { + background-image: url(./img/pagination/small-btn.svg); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + padding: 10px 15px 10px 25px; + background-color: transparent; + display: flex; + justify-content: center; + align-items: center; + border: none; +} + +.page-box ul .ant-pagination-item.ant-pagination-item-active { + background-image: url(./img/pagination/small-btn02.svg); + background-repeat: no-repeat; + background-position: center; + background-size: contain; + padding: 10px 15px 10px 25px; +} + +.page-box .ant-pagination-item a { + color: #fff; +} diff --git a/src/assets/table.css b/src/assets/table.css new file mode 100644 index 0000000..30adf55 --- /dev/null +++ b/src/assets/table.css @@ -0,0 +1,122 @@ +/**資料框**/ +.ant-table { + width: 100%; + margin-bottom: 1rem; + background-color: transparent !important; + color: white; +} +.ant-table::-webkit-scrollbar-thumb { + background-color: theme("colors.info") !important; +} + +.ant-table th.ant-table-cell::before{ + height: 100% !important; +} + +.content-box { + border: 1px solid #35eded; + padding: 5px; + position: relative; + margin-bottom: 15px; + background-color: theme("colors.body"); +} + +.content-box table, +.content-box table th { + border-radius: 0 !important; +} + +.content-box .ant-table th.ant-table-cell, +.content-box .ant-table td.ant-table-cell { + border-color: #fff !important; + color: #fff !important; + font-size: 1rem !important; + font-weight: 300 !important; + border-right: 1px solid #fff !important; + text-align: center !important; + padding: 0.5rem 0.75rem !important; + background-color: transparent !important; +} + +.content-box .ant-table th.ant-table-cell.ant-table-cell-fix-left, +.content-box .ant-table th.ant-table-cell.ant-table-cell-fix-right { + background-color: theme("colors.body") !important; + color: white; +} + +.content-box .ant-table th.ant-table-cell { + border-bottom: 1px solid #e9e9e9 !important; +} + +.content-box .ant-table tr td:last-child, +.content-box .ant-table tr:first-child th:last-child { + border-right: 0 !important; +} +.content-box .ant-table tr:last-child td { + border-bottom: 0 !important; +} + +/**資料框裝飾**/ +.content-box::before { + content: "" !important; + background: url(./img/table/content-box-background01.svg) center center !important; + position: absolute !important; + left: 4px !important; + top: 4px !important; + height: 20px !important; + width: 20px !important; + background-repeat: no-repeat !important; + z-index: 1 !important; +} + +.content-box::after { + content: "" !important; + background: url(./img/table/content-box-background05.svg) center center !important; + position: absolute !important; + right: 4px !important; + bottom: 4px !important; + height: 20px !important; + width: 20px !important; + background-repeat: no-repeat !important; + z-index: 3 !important; +} + +.content-box .page-box::before { + content: "" !important; + background: url(./img/table/content-box-background03.svg) center center !important; + position: absolute !important; + left: -1.2% !important; + bottom: -2px !important; + height: 56px !important; + width: 30px !important; + background-repeat: no-repeat !important; + z-index: 2 !important; +} + +.content-box .page-box::after { + content: "" !important; + background: url(./img/table/content-box-background04.svg) center center !important; + position: absolute !important; + right: -27px !important; + bottom: -7px !important; + height: 65px !important; + width: 50px !important; + background-repeat: no-repeat !important; + z-index: 2 !important; +} + +.content-box .content-decoration { + @apply px-2; +} + +.content-box .content-decoration::before { + content: "" !important; + background: url(./img/table/content-box-background02.svg) center center !important; + position: absolute !important; + right: -10px !important; + top: -10px !important; + height: 30px !important; + width: 29px !important; + background-repeat: no-repeat !important; + z-index: 1 !important; +} diff --git a/src/components/Loading.vue b/src/components/Loading.vue new file mode 100644 index 0000000..6ad4f0d --- /dev/null +++ b/src/components/Loading.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/src/components/SvgIcon.vue b/src/components/SvgIcon.vue new file mode 100644 index 0000000..ecf5446 --- /dev/null +++ b/src/components/SvgIcon.vue @@ -0,0 +1,44 @@ + + + + diff --git a/src/components/alarm/AlarmCards.vue b/src/components/alarm/AlarmCards.vue new file mode 100644 index 0000000..f675f44 --- /dev/null +++ b/src/components/alarm/AlarmCards.vue @@ -0,0 +1,87 @@ + + + + + \ No newline at end of file diff --git a/src/components/alarm/AlarmDrawer.vue b/src/components/alarm/AlarmDrawer.vue new file mode 100644 index 0000000..54438a9 --- /dev/null +++ b/src/components/alarm/AlarmDrawer.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/components/chart/BarChart.vue b/src/components/chart/BarChart.vue new file mode 100644 index 0000000..983732a --- /dev/null +++ b/src/components/chart/BarChart.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/src/components/chart/EffectScatter.vue b/src/components/chart/EffectScatter.vue new file mode 100644 index 0000000..75b34b9 --- /dev/null +++ b/src/components/chart/EffectScatter.vue @@ -0,0 +1,83 @@ + + + + diff --git a/src/components/chart/GaugeChart.vue b/src/components/chart/GaugeChart.vue new file mode 100644 index 0000000..da53127 --- /dev/null +++ b/src/components/chart/GaugeChart.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/components/chart/LineChart.vue b/src/components/chart/LineChart.vue new file mode 100644 index 0000000..da53127 --- /dev/null +++ b/src/components/chart/LineChart.vue @@ -0,0 +1,34 @@ + + + + diff --git a/src/components/chart/SankeyChart.vue b/src/components/chart/SankeyChart.vue new file mode 100644 index 0000000..557d51e --- /dev/null +++ b/src/components/chart/SankeyChart.vue @@ -0,0 +1,31 @@ + + + + diff --git a/src/components/customUI/ButtonConnectedGroup.vue b/src/components/customUI/ButtonConnectedGroup.vue new file mode 100644 index 0000000..67880cc --- /dev/null +++ b/src/components/customUI/ButtonConnectedGroup.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/src/components/customUI/ButtonGroup.vue b/src/components/customUI/ButtonGroup.vue new file mode 100644 index 0000000..5235a03 --- /dev/null +++ b/src/components/customUI/ButtonGroup.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/src/components/customUI/Checkbox.vue b/src/components/customUI/Checkbox.vue new file mode 100644 index 0000000..2f28bfc --- /dev/null +++ b/src/components/customUI/Checkbox.vue @@ -0,0 +1,65 @@ + + + + + diff --git a/src/components/customUI/Collapse.vue b/src/components/customUI/Collapse.vue new file mode 100644 index 0000000..2b9a911 --- /dev/null +++ b/src/components/customUI/Collapse.vue @@ -0,0 +1,72 @@ + + + + + diff --git a/src/components/customUI/DateGroup.vue b/src/components/customUI/DateGroup.vue new file mode 100644 index 0000000..91e2263 --- /dev/null +++ b/src/components/customUI/DateGroup.vue @@ -0,0 +1,123 @@ + + + + + + diff --git a/src/components/customUI/DraggableTable.vue b/src/components/customUI/DraggableTable.vue new file mode 100644 index 0000000..965bca2 --- /dev/null +++ b/src/components/customUI/DraggableTable.vue @@ -0,0 +1,436 @@ + + + + + diff --git a/src/components/customUI/Dropdown.vue b/src/components/customUI/Dropdown.vue new file mode 100644 index 0000000..78f5453 --- /dev/null +++ b/src/components/customUI/Dropdown.vue @@ -0,0 +1,29 @@ + + + + + diff --git a/src/components/customUI/FileSystemCollapse.vue b/src/components/customUI/FileSystemCollapse.vue new file mode 100644 index 0000000..7b058b0 --- /dev/null +++ b/src/components/customUI/FileSystemCollapse.vue @@ -0,0 +1,189 @@ + + + + + diff --git a/src/components/customUI/Input.vue b/src/components/customUI/Input.vue new file mode 100644 index 0000000..5930c2a --- /dev/null +++ b/src/components/customUI/Input.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/src/components/customUI/InputNumber.vue b/src/components/customUI/InputNumber.vue new file mode 100644 index 0000000..4bc9ea4 --- /dev/null +++ b/src/components/customUI/InputNumber.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/customUI/Menu.vue b/src/components/customUI/Menu.vue new file mode 100644 index 0000000..054a6a3 --- /dev/null +++ b/src/components/customUI/Menu.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/src/components/customUI/Modal.vue b/src/components/customUI/Modal.vue new file mode 100644 index 0000000..aa2d5a7 --- /dev/null +++ b/src/components/customUI/Modal.vue @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/customUI/Pagination.vue b/src/components/customUI/Pagination.vue new file mode 100644 index 0000000..d95ed64 --- /dev/null +++ b/src/components/customUI/Pagination.vue @@ -0,0 +1,200 @@ + + + diff --git a/src/components/customUI/RadioGroup.vue b/src/components/customUI/RadioGroup.vue new file mode 100644 index 0000000..f0ed74a --- /dev/null +++ b/src/components/customUI/RadioGroup.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/src/components/customUI/SearchSelect.vue b/src/components/customUI/SearchSelect.vue new file mode 100644 index 0000000..ae493eb --- /dev/null +++ b/src/components/customUI/SearchSelect.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/components/customUI/Select.vue b/src/components/customUI/Select.vue new file mode 100644 index 0000000..41166bc --- /dev/null +++ b/src/components/customUI/Select.vue @@ -0,0 +1,85 @@ + + + + + diff --git a/src/components/customUI/Table.vue b/src/components/customUI/Table.vue new file mode 100644 index 0000000..6914810 --- /dev/null +++ b/src/components/customUI/Table.vue @@ -0,0 +1,410 @@ + + + + + diff --git a/src/components/customUI/Textarea.vue b/src/components/customUI/Textarea.vue new file mode 100644 index 0000000..e14f010 --- /dev/null +++ b/src/components/customUI/Textarea.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/src/components/customUI/Toast.vue b/src/components/customUI/Toast.vue new file mode 100644 index 0000000..cf312e9 --- /dev/null +++ b/src/components/customUI/Toast.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/src/components/customUI/Upload.vue b/src/components/customUI/Upload.vue new file mode 100644 index 0000000..37ff0a8 --- /dev/null +++ b/src/components/customUI/Upload.vue @@ -0,0 +1,307 @@ + + + + + diff --git a/src/components/forge/Forge.vue b/src/components/forge/Forge.vue new file mode 100644 index 0000000..e55b62d --- /dev/null +++ b/src/components/forge/Forge.vue @@ -0,0 +1,117 @@ + + + + + diff --git a/src/components/forge/ForgeForSystem.vue b/src/components/forge/ForgeForSystem.vue new file mode 100644 index 0000000..4c9bb8a --- /dev/null +++ b/src/components/forge/ForgeForSystem.vue @@ -0,0 +1,282 @@ + + + + + diff --git a/src/components/forge/ForgeModal.vue b/src/components/forge/ForgeModal.vue new file mode 100644 index 0000000..df4a248 --- /dev/null +++ b/src/components/forge/ForgeModal.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/src/components/forge/ForgeModalContent.vue b/src/components/forge/ForgeModalContent.vue new file mode 100644 index 0000000..b83816f --- /dev/null +++ b/src/components/forge/ForgeModalContent.vue @@ -0,0 +1,223 @@ + + + + + diff --git a/src/components/forge/index.vue b/src/components/forge/index.vue new file mode 100644 index 0000000..a9f0e80 --- /dev/null +++ b/src/components/forge/index.vue @@ -0,0 +1,270 @@ + + + + + diff --git a/src/components/navbar/Navbar.vue b/src/components/navbar/Navbar.vue new file mode 100644 index 0000000..d271b3a --- /dev/null +++ b/src/components/navbar/Navbar.vue @@ -0,0 +1,165 @@ + + + + + diff --git a/src/components/navbar/NavbarBuilding.vue b/src/components/navbar/NavbarBuilding.vue new file mode 100644 index 0000000..ce4bbe7 --- /dev/null +++ b/src/components/navbar/NavbarBuilding.vue @@ -0,0 +1,43 @@ + + + + + \ No newline at end of file diff --git a/src/components/navbar/NavbarItem.vue b/src/components/navbar/NavbarItem.vue new file mode 100644 index 0000000..59e5320 --- /dev/null +++ b/src/components/navbar/NavbarItem.vue @@ -0,0 +1,228 @@ + + + + diff --git a/src/components/navbar/NavbarLang.vue b/src/components/navbar/NavbarLang.vue new file mode 100644 index 0000000..bfbe884 --- /dev/null +++ b/src/components/navbar/NavbarLang.vue @@ -0,0 +1,43 @@ + + + + + diff --git a/src/components/navbar/NavbarUser.vue b/src/components/navbar/NavbarUser.vue new file mode 100644 index 0000000..9bc4f44 --- /dev/null +++ b/src/components/navbar/NavbarUser.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/src/config/cn.json b/src/config/cn.json new file mode 100644 index 0000000..7630185 --- /dev/null +++ b/src/config/cn.json @@ -0,0 +1,408 @@ +{ + "language": "简体中文", + "home": "首页", + "sign_out": "登出", + "log_in": "登入", + "account": "帐号", + "password": "密码", + "table": { + "no_data": "表中数据为空", + "in_otal": "笔资料", + "skip_to": "跳至" + }, + "upload": { + "title": "选择一个文件或拖放到这里", + "description": "档案不超过 10MB", + "formats": "档案格式" + }, + "dashboard": { + "yesterday_today": "昨天/今天", + "elec_consumption_comparison": "用电量比较", + "elec_consumption_comparison_trend": "用电量比较趋势", + "electricity_consumption": "用电量", + "today_electricity_consumption": "今日用电量", + "yesterday_electricity_consumption": "昨天用电量", + "this_last_week": "本周/上周", + "thisweek_electricity_consumption": "本周用电量", + "lastweek_electricity_consumption": "上周用电量", + "one_hour": "1小时", + "four_hour": "4小时", + "eight_hour": "8小时", + "energy_ranking": "能耗排行", + "last_30_days_energy_trend": "近30天能耗趋势", + "today_energy_consumption": "本日能耗", + "this_month_energy_consumption": "本月能耗", + "relative_energy_consumption": "环比能耗", + "daily_relative_change": "日环比", + "weekly_relative_change": "周环比", + "monthly_relative_change": "月环比", + "yearly_relative_change": "年环比", + "today": "今日", + "yesterday": "昨日", + "this_week": "本周", + "last_week": "上周", + "this_month": "本月", + "last_month": "上月", + "this_year": "今年", + "last_year": "去年" + }, + "history": { + "title": "历史资料", + "building_name": "厂区", + "device_name": "设备名称", + "system_category": "系统类别", + "device_category": "设备类别", + "category": "类别", + "value": "数值", + "date": "记录时间", + "point": "点位", + "combinations": "常用组合", + "date_range": "日期区间", + "time_range": "时间区间", + "start_date": "起始日期", + "start_time": "起始时间", + "end_date": "结束日期", + "end_time": "结束时间" + }, + "system": { + "status": "状态", + "details": "详细资料", + "attribute": "属性", + "value": "值" + }, + "energy": { + "elec_consumption": "用电即时分布", + "total_elec": "总用电", + "green_elec": "绿电", + "immediate_demand": "即时需量", + "average_demand": "平均需量", + "real_time_Trend": "即时趋势", + "contract_capacity": "契约容量", + "alert_capacity": "警戒容量", + "reset_value": "复归值", + "edit_automatic_demand": "编辑自动需量", + "elec_bills": "今年电费累计(元)", + "interval_elec_charges": "区间电费(元)", + "year_carbon_emission": "今年碳排当量累计(公斤)", + "interval_carbon_emission": "区间碳排当量", + "year_elec_consumption": "今年用电度数(kWh)", + "interval_elec_consumption": "区间用电度数(kWh)", + "monthly_elec_consumption": "每月用电分析", + "monthly_carbon_emission_and_reduction": "每月碳排当量 (kgCO2e)", + "monthly_bill_power": "每月计费度数 (kWh)", + "interval_bill_degree": "区间计费度数", + "peak": "尖峰", + "semi_peak": "半尖峰", + "off_peak": "离峰", + "var_elec_cost": "流动电费", + "fixed_elec_cost": "基本电费", + "total_elec_cost": "总电费", + "carbon_equivalent": "碳排当量", + "edit_carbon_emission": "编辑碳排放系数", + "carbon_emission_coefficient": "碳排放系数", + "electricity_classification": "用电分类", + "electricity_price": "电费每度单价", + "floor": "楼层", + "maximum": "最大值", + "maximum_time": "最大值时间", + "minimum": "最小值", + "minimum_time": "最小值时间", + "average_value": "平均值", + "start_value": "起始值(kWh)", + "end_value": "截止值(kWh)", + "difference": "差值(kWh)", + "power_consumption": "用电量(kWh)", + "ranking": "排名", + "subtotal": "小计", + "unit_price": "单价", + "total_amount": "金额总计", + "elec_price_list": "电价表", + "residential": "住宅型", + "standard": "标准型", + "simple_elec_price_two_stage": "简易型时间电价二段式", + "simple_elec_price_three_stage": "简易型时间电价三段式", + "classification": "分类", + "summer_months": "夏月", + "non_summer_months": "非夏月", + "time_outside_summer_months": "夏月以外的时间", + "basic_elec_charge": "基本电费", + "charged_per_household": "按户计收", + "per_household_month": "每户每月", + "mon_to_friday": "周一~周五", + "peak_hours": "尖峰时间", + "semi_peak_hours": "半尖峰时间", + "off_peak_hours": "离峰时间", + "price_per_kwh": "每度", + "all_day": "全日", + "sat_sun_off_peak_days": "周六、周日及离峰日", + "usage_over_2000kwh": "每月总度数超过2000度之部分", + "add": "加", + "standard_time_of_use_tariff_2_stage": "标准型时间电价二段式", + "standard_time_of_use_tariff_3_stage": "标准型时间电价三段式", + "single_phase": "单相", + "three_phase": "三相", + "frequent_contract": "经常契约", + "per_kw_per_month": "每瓩每月", + "non_summer_contract": "非夏日契约", + "saturday_semi_peak_contract": "周六半尖峰契约", + "off_peak_contract": "离峰契约", + "variable_electricity_charge": "流动电费", + "saturday": "周六", + "sunday_and_off_peak_days": "周日及离峰日" + }, + "alarm": { + "title": "显示警告", + "notify": "异常通知", + "number": "异常ID", + "category": "异常类别", + "device_name": "设备名称", + "message": "异常讯息", + "confirm": "确认" + }, + "alert": { + "query_title": "告警纪录查询", + "setting_title": "告警设定", + "offnormal": "未复归", + "normal": "已复归", + "unacked": "未确认", + "acked": "已确认", + "30days": "近30天", + "start_date": "起始日期", + "end_date": "结束日期", + "building_and_floor": "栋别-楼层", + "uuid": "异常ID", + "alarmClass": "告警条件", + "device_name": "设备名称", + "device_number": "设备编号", + "device_point_name":"点位名称", + "date": "发生日期", + "time": "发生时间", + "error_msg": "异常原因", + "ack_state": "Ack 确认", + "repair_order_number": "派工 / 维运单号", + "repair_order": "维修单", + "form_number": "表单编号", + "start_time": "预计开始时间", + "item": "项目", + "maintainance": "保养", + "repair": "维修", + "repair_item": "维修项目", + "repair_item_code": "维修项目代码(设备编号)", + "responsible_vendor": "负责厂商", + "status": "状态", + "not_completed": "未完成", + "completed": "已完成", + "worker_id": "工作人员编号", + "notice": "注意事项", + "result_description": "结果描述", + "upload_file": "上传文件", + "enable": "启用", + "not_enabled": "不启用", + "qualifications": "限定条件", + "upper_limit": "上限", + "lower_limit": "下限", + "delay": "持续秒数", + "highDelay": "上限持续秒数", + "lowDelay": "下限持续秒数", + "warning_method": "警示方式", + "warning_time": "警示时间", + "warning_value": "警示值", + "operation": "功能", + "alarm_settings": "异常设定", + "time_setting": "时间设定", + "yes": "是", + "no": "否", + "no_notify": "无通知", + "notify_name": "姓名", + "notify_phone": "手机号码", + "notify_email": "email", + "notify_items": "通知项目", + "notify_list": "通知名单", + "choose": "选择", + "day_time": "星期/时间", + "click_time_period": "请用滑鼠点击时间段", + "clear": "清空", + "sunday": "星期日", + "monday": "星期一", + "tuesday": "星期二", + "wednesday": "星期三", + "thursday": "星期四", + "friday": "星期五", + "saturday": "星期六", + "schedule_name": "时段名称", + "schedule_content": "时段内容", + "reorganization": "MQTT 告警重整" + }, + "operation": { + "title": "运维管理", + "project": "项目", + "location": "位置", + "uuid": "异常ID", + "form_number": "表单编号", + "device_name": "设备名称", + "status": "狀態", + "staff": "处理人员", + "start_time": "预计开始时间", + "upload": "档案上传", + "finish_time": "完成时间", + "updated_time": "更新时间", + "operation": "功能", + "vendor": "厂商", + "contact_person": "联络人", + "phone": "电话", + "email": "email", + "created_at": "建立日期", + "maintenance": "保养", + "repair": "维修", + "company_info": "厂商资料", + "repair_item": "维修项目", + "repair_item_code": "维修项目代码(设备编号)", + "responsible_vendor": "负责厂商", + "not_completed": "未完成", + "completed": "已完成", + "worker_id": "工作人员编号", + "notice": "注意事项", + "result_description": "结果描述", + "upload_file": "上传文件", + "name": "姓名", + "city": "城市", + "address": "地址", + "tax_id_number": "统一编号", + "remark": "备注", + "date": "日期", + "serial": "单号", + "today": "今天", + "yesterday": "昨天", + "start_created_at": "起始日期", + "end_created_at": "结束日期", + "enter_text": "请输入文字", + "enter_serial": "请输入单号" + }, + "graphManagement": { + "title": "图资管理", + "category": "图资类别", + "new_category": "新类别", + "index": "编号", + "oriOrgName": "档案", + "operation": "功能", + "folder_path": "资料夹路径", + "upload": "图资上传", + "staging_area": "删除暂存区", + "no_path": "无资料夹路径" + }, + "assetManagement": { + "title": "资产管理", + "add_system_category": "新增系统类别", + "edit_system_category": "修改系统类别", + "add_device_category": "新增设备类别", + "edit_device_category": "修改设备类别", + "system_name": "名称", + "system_value": "代号", + "system_parent": "所属系統", + "device_number": "设备编号", + "device_name": "设备名称", + "asset_number": "资产编号", + "floor": "设备位置", + "add_floor": "新增楼层", + "add_floor_text": "须先上传楼层地图", + "device_coordinate": "图面标识", + "brand_and_modal": "品牌 / 型号", + "brand": "品牌", + "modal": "型号", + "company_and_contact": "厂商 / 联络人", + "company": "负责厂商", + "buying_date": "建置时间", + "oriFile": "档案上传", + "created_at": "建立时间", + "operation": "功能", + "device_list": "设备列表", + "edit_device": "编辑设备", + "add_device": "新增设备", + "operate_text": "显示名称", + "fill_text": "请由系统人员填写", + "equipment_point": "设备点位", + "point": "点位", + "add_sensor": "新增感测器", + "associated_device": "关联设备", + "choose": "选择", + "index": "编号", + "floor_plan": "平面图", + "department": "部门", + "department_name": "部门名称", + "building": "栋别" + }, + "accountManagement": { + "account_title": "帐号管理", + "role_title": "角色管理", + "index": "编号", + "name": "姓名", + "account": "帐号", + "password": "密码", + "role": "角色", + "role_name": "角色名称", + "role_permissions": "角色权限", + "role_permissions_setting": "角色权限设定", + "permission_name": "权限名称", + "basic_permissions": "基础权限", + "production_permissions": "生产设定权限", + "email": "email", + "phone": "手机", + "created_at": "建立时间", + "operation": "功能", + "name_placeholder": "请输入使用者、帐号名称", + "role_placeholder": "请输入角色名称", + "change_password": "变更密码", + "choose": "选择" + }, + "button": { + "add": "新增", + "cancel": "取消", + "query": "查询", + "search": "搜索", + "view": "查看", + "reset": "重置", + "export": "导出", + "enter_text": "输入文字后按下 Enter", + "required": "必填", + "submit": "确定", + "edit": "修改", + "delete": "删除", + "deselect_all": "取消全选", + "select_all": "全选", + "phone_format": "请输入正确电话号码格式", + "email_format": "请输入正确 Email 地址", + "password_format": "密码长度至少8码,必须包含英文及数字", + "start_time_placeholder": "请输入预计开始日期", + "finish_time_placeholder": "请输入完成日期", + "rename": "重新命名", + "download": "下载", + "confirm": "确认", + "restore": "复原", + "stop_edit": "停止修改", + "start_edit": "开始修改", + "convert": "轉換" + }, + "msg": { + "sure_to_delete": "是否确认删除该项目?", + "sure_to_delete_permanent": "是否确认永久删除该项目?", + "delete_success": "删除成功", + "delete_failed": "删除失败", + "mqtt_refresh":"重新设定成功" + }, + "setting": { + "MQTT_parse": "MQTT 解析", + "schema": "架构", + "point": "点位", + "description": "描述", + "IoT_point_name": "IoT 点位名称", + "IoT_point_code": "IoT 点位代号", + "number_of_decimal_places": "小数位数", + "boolean_value": "布林值", + "hide_point": "点位显示", + "schema_name": "架构名称", + "IoT_point_structure": "IoT点位结构", + "system_point_name": "系统点位名称", + "json_format_text": "请贴上 JSON 格式数据", + "json_click_text": "请在左侧输入JSON并点选转换按钮" + } +} diff --git a/src/config/tw.json b/src/config/tw.json new file mode 100644 index 0000000..e25cd65 --- /dev/null +++ b/src/config/tw.json @@ -0,0 +1,408 @@ +{ + "language": "繁體中文", + "home": "首頁", + "sign_out": "登出", + "log_in": "登入", + "account": "帳號", + "password": "密碼", + "table": { + "no_data": "表中數據為空", + "in_otal": "筆資料", + "skip_to": "跳至" + }, + "upload": { + "title": "選擇一個文件或拖放到這裡", + "description": "檔案不超過 10MB", + "formats": "檔案格式" + }, + "dashboard": { + "yesterday_today": "昨天/今天", + "elec_consumption_comparison": "用電量比較", + "elec_consumption_comparison_trend": "用電量比較趨勢", + "electricity_consumption": "用電量", + "today_electricity_consumption": "今日用電量", + "yesterday_electricity_consumption": "昨天用電量", + "this_last_week": "本週/上週", + "thisweek_electricity_consumption": "本周用電量", + "lastweek_electricity_consumption": "上週用電量", + "one_hour": "1小時", + "four_hour": "4小時", + "eight_hour": "8小時", + "energy_ranking": "能耗排行", + "last_30_days_energy_trend": "近30天能耗趨勢", + "today_energy_consumption": "本日能耗", + "this_month_energy_consumption": "本月能耗", + "relative_energy_consumption": "環比能耗", + "daily_relative_change": "日環比", + "weekly_relative_change": "周環比", + "monthly_relative_change": "月環比", + "yearly_relative_change": "年環比", + "today": "今日", + "yesterday": "昨日", + "this_week": "本周", + "last_week": "上周", + "this_month": "本月", + "last_month": "上月", + "this_year": "今年", + "last_year": "去年" + }, + "history": { + "title": "歷史資料", + "building_name": "廠區", + "device_name": "設備名稱", + "system_category": "系統類別", + "device_category": "設備類別", + "category": "類別", + "value": "數值", + "date": "記錄時間", + "point": "點位", + "combinations": "常用組合", + "date_range": "日期區間", + "time_range": "時間區間", + "start_date": "起始日期", + "start_time": "起始時間", + "end_date": "結束日期", + "end_time": "結束時間" + }, + "system": { + "status": "狀態", + "details": "詳細資料", + "attribute": "屬性", + "value": "數值" + }, + "energy": { + "elec_consumption": "用電即時分佈", + "total_elec": "總用電", + "green_elec": "綠電", + "immediate_demand": "即時需量", + "average_demand": "平均需量", + "real_time_Trend": "即時趨勢", + "contract_capacity": "契約容量", + "alert_capacity": "警戒容量", + "reset_value": "復歸值", + "edit_automatic_demand": "編輯自動需量", + "elec_bills": "今年電費累計(元)", + "interval_elec_charges": "區間電費(元)", + "year_carbon_emission": "今年碳排當量累計(公斤)", + "interval_carbon_emission": "區間碳排當量", + "year_elec_consumption": "今年用電度數(kWh)", + "interval_elec_consumption": "區間用電度數(kWh)", + "monthly_elec_consumption": "每月用電分析", + "monthly_carbon_emission_and_reduction": "每月碳排當量 (kgCO2e)", + "monthly_bill_power": "每月計費度數 (kWh)", + "interval_bill_degree": "區間計費度數", + "peak": "尖峰", + "semi_peak": "半尖峰", + "off_peak": "離峰", + "var_elec_cost": "流動電費", + "fixed_elec_cost": "基本電費", + "total_elec_cost": "總電費", + "carbon_equivalent": "碳排當量", + "edit_carbon_emission": "編輯碳排放係數", + "carbon_emission_coefficient": "碳排放係數", + "electricity_classification": "用電分類", + "electricity_price": "電費每度單價", + "floor": "樓層", + "maximum": "最大值", + "maximum_time": "最大值時間", + "minimum": "最小值", + "minimum_time": "最小值時間", + "average_value": "平均值", + "start_value": "起始值(kWh)", + "end_value": "截止值(kWh)", + "difference": "差值(kWh)", + "power_consumption": "用電量(kWh)", + "ranking": "排名", + "subtotal": "小計", + "unit_price": "單價", + "total_amount": "金額總計", + "elec_price_list": "電價表", + "residential": "住宅型", + "standard": "標準型", + "simple_elec_price_two_stage": "簡易型時間電價二段式", + "simple_elec_price_three_stage": "簡易型時間電價三段式", + "classification": "分類", + "summer_months": "夏月", + "non_summer_months": "非夏月", + "time_outside_summer_months": "夏月以外的時間", + "basic_elec_charge": "基本電費", + "charged_per_household": "按戶計收", + "per_household_month": "每戶每月", + "mon_to_friday": "週一~週五", + "peak_hours": "尖峰時間", + "semi_peak_hours": "半尖峰時間", + "off_peak_hours": "離峰時間", + "price_per_kwh": "每度", + "all_day": "全日", + "sat_sun_off_peak_days": "週六、週日及離峰日", + "usage_over_2000kwh": "每月總度數超過2000度之部分", + "add": "加", + "standard_time_of_use_tariff_2_stage": "標準型時間電價二段式", + "standard_time_of_use_tariff_3_stage": "標準型時間電價三段式", + "single_phase": "單相", + "three_phase": "三相", + "frequent_contract": "經常契約", + "per_kw_per_month": "每瓩每月", + "non_summer_contract": "非夏日契約", + "saturday_semi_peak_contract": "週六半尖峰契約", + "off_peak_contract": "離峰契約", + "variable_electricity_charge": "流動電費", + "saturday": "週六", + "sunday_and_off_peak_days": "週日及離峰日" + }, + "alarm": { + "title": "顯示警告", + "notify": "異常通知", + "number": "異常ID", + "category": "異常類別", + "device_name": "設備名稱", + "message": "異常訊息", + "confirm": "確認" + }, + "alert": { + "query_title": "告警紀錄查詢", + "setting_title": "告警設定", + "offnormal": "未復歸", + "normal": "已復歸", + "unacked": "未確認", + "acked": "已確認", + "30days": "近30天", + "start_date": "起始日期", + "end_date": "結束日期", + "building_and_floor": "棟別-樓層", + "uuid": "異常ID", + "alarmClass": "告警條件", + "device_name": "設備名稱", + "device_number": "設備編號", + "device_point_name":"點位名稱", + "date": "發生日期", + "time": "發生時間", + "error_msg": "異常原因", + "ack_state": "Ack 確認", + "repair_order_number": "派工 / 維運單號", + "repair_order": "維修單", + "form_number": "表單編號", + "start_time": "預計開始時間", + "item": "項目", + "maintainance": "保養", + "repair": "維修", + "repair_item": "維修項目", + "repair_item_code": "維修項目代碼(設備編號)", + "responsible_vendor": "負責廠商", + "status": "狀態", + "not_completed": "未完成", + "completed": "已完成", + "worker_id": "工作人員編號", + "notice": "注意事項", + "result_description": "結果描述", + "upload_file": "上傳檔案", + "enable": "啟用", + "not_enabled": "不啟用", + "qualifications": "限定條件", + "upper_limit": "上限", + "lower_limit": "下限", + "delay": "持續秒數", + "highDelay": "上限持續秒數", + "lowDelay": "下限持續秒數", + "warning_method": "警示方式", + "warning_time": "警示時間", + "warning_value": "警示值", + "operation": "功能", + "alarm_settings": "異常設定", + "time_setting": "時間設定", + "yes": "是", + "no": "否", + "no_notify": "無通知", + "notify_name": "姓名", + "notify_phone": "手機號碼", + "notify_email": "email", + "notify_items": "通知項目", + "notify_list": "通知名單", + "choose": "選擇", + "day_time": "星期/時間", + "click_time_period": "請用滑鼠點擊時間段", + "clear": "清空", + "sunday": "星期日", + "monday": "星期一", + "tuesday": "星期二", + "wednesday": "星期三", + "thursday": "星期四", + "friday": "星期五", + "saturday": "星期六", + "schedule_name": "時段名稱", + "schedule_content": "時段內容", + "reorganization": "MQTT 告警重整" + }, + "operation": { + "title": "運維管理", + "project": "項目", + "location": "位置", + "uuid": "異常ID", + "form_number": "表單編號", + "device_name": "設備名稱", + "status": "狀態", + "staff": "處理人員", + "start_time": "預計開始時間", + "upload": "檔案上傳", + "finish_time": "完成時間", + "updated_time": "更新時間", + "operation": "功能", + "vendor": "廠商", + "contact_person": "聯絡人", + "phone": "電話", + "email": "email", + "created_at": "建立日期", + "maintenance": "保養", + "repair": "維修", + "company_info": "廠商資料", + "repair_item": "維修項目", + "repair_item_code": "維修項目代碼(設備編號)", + "responsible_vendor": "負責廠商", + "not_completed": "未完成", + "completed": "已完成", + "worker_id": "工作人員編號", + "notice": "注意事項", + "result_description": "結果描述", + "upload_file": "上傳檔案", + "name": "姓名", + "city": "城市", + "address": "地址", + "tax_id_number": "統一編號", + "remark": "備注", + "date": "日期", + "serial": "單號", + "today": "今天", + "yesterday": "昨天", + "start_created_at": "起始日期", + "end_created_at": "結束日期", + "enter_text": "請輸入文字", + "enter_serial": "請輸入單號" + }, + "graphManagement": { + "title": "圖資管理", + "category": "圖資類別", + "new_category": "新類別", + "index": "編號", + "oriOrgName": "檔案", + "operation": "功能", + "folder_path": "資料夾路徑", + "upload": "圖資上傳", + "staging_area": "刪除暫存區", + "no_path": "無資料夾路徑" + }, + "assetManagement": { + "title": "資產管理", + "add_system_category": "新增系統類別", + "edit_system_category": "修改系統類別", + "add_device_category": "新增設備類別", + "edit_device_category": "修改設備類別", + "system_name": "名稱", + "system_value": "代號", + "system_parent": "所屬系統", + "device_number": "設備編號", + "device_name": "設備名稱", + "asset_number": "資產編號", + "floor": "設備位置", + "add_floor": "新增樓層", + "add_floor_text": "須先上傳樓層地圖", + "device_coordinate": "圖面標識", + "brand_and_modal": "品牌 / 型號", + "brand": "品牌", + "modal": "型號", + "company_and_contact": "廠商 / 聯絡人", + "company": "負責廠商", + "buying_date": "購買日期", + "oriFile": "檔案上傳", + "created_at": "建立時間", + "operation": "功能", + "device_list": "設備列表", + "edit_device": "編輯設備", + "add_device": "新增設備", + "operate_text": "顯示名稱", + "fill_text": "請由系統人員填寫", + "equipment_point": "設備點位", + "point": "點位", + "add_sensor": "新增感測器", + "associated_device": "關聯設備", + "choose": "選擇", + "index": "編號", + "floor_plan": "平面圖", + "department": "部門", + "department_name": "部門名稱", + "building": "棟別" + }, + "accountManagement": { + "account_title": "帳號管理", + "role_title": "角色管理", + "index": "編號", + "name": "姓名", + "account": "帳號", + "password": "密碼", + "role": "角色", + "role_name": "角色名稱", + "role_permissions": "角色權限", + "role_permissions_setting": "角色權限設定", + "permission_name": "權限名稱", + "basic_permissions": "基礎權限", + "production_permissions": "生產設定權限", + "email": "email", + "phone": "手機", + "created_at": "建立時間", + "operation": "功能", + "name_placeholder": "請輸入使用者、帳號名稱", + "role_placeholder": "請輸入角色名稱", + "change_password": "變更密碼", + "choose": "選擇" + }, + "button": { + "add": "新增", + "cancel": "取消", + "query": "查詢", + "search": "搜尋", + "view": "查看", + "reset": "重置", + "export": "匯出", + "enter_text": "輸入文字後按下 Enter", + "required": "必填", + "submit": "確定", + "edit": "修改", + "delete": "刪除", + "deselect_all": "取消全選", + "select_all": "全選", + "phone_format": "請輸入正確電話號碼格式", + "email_format": "請輸入正確的 Email 地址", + "password_format": "密碼長度至少8碼,必須包含英文及數字", + "start_time_placeholder": "請輸入預計開始日期", + "finish_time_placeholder": "請輸入完成日期", + "rename": "重新命名", + "download": "下載", + "confirm": "確認", + "restore": "復原", + "stop_edit": "停止修改", + "start_edit": "開始修改", + "convert":"轉換" + }, + "msg": { + "sure_to_delete": "是否確認刪除該項目?", + "sure_to_delete_permanent": "是否確認永久刪除該項目?", + "delete_success": "刪除成功", + "delete_failed": "刪除失敗", + "mqtt_refresh":"重新設定成功" + }, + "setting": { + "MQTT_parse": "MQTT 解析", + "schema":"架構", + "point":"點位", + "description":"描述", + "IoT_point_name":"IoT 點位名稱", + "IoT_point_code":"IoT 點位代號", + "number_of_decimal_places":"小數位數", + "boolean_value":"布林值", + "hide_point":"點位顯示", + "schema_name":"架構名稱", + "IoT_point_structure" :"IoT點位結構", + "system_point_name":"系統點位名稱", + "json_format_text": "請貼上 JSON 格式數據", + "json_click_text": "請在左側輸入JSON並點選轉換按鈕" + } +} diff --git a/src/config/us.json b/src/config/us.json new file mode 100644 index 0000000..8627648 --- /dev/null +++ b/src/config/us.json @@ -0,0 +1,408 @@ +{ + "language": "English", + "home": "Home", + "sign_out": "Sign out", + "log_in": "Log in", + "account": "Account", + "password": "Password", + "table": { + "no_data": "No data", + "in_otal": "items in total", + "skip_to": "Skip to" + }, + "upload": { + "title": "Select a file or drag and drop here", + "description": "File size cannot exceed 10MB", + "formats": "File formats" + }, + "dashboard": { + "yesterday_today": "Yesterday / Today's", + "elec_consumption_comparison": "Electricity Consumption Comparison", + "elec_consumption_comparison_trend": "Electricity Consumption Comparison Trend", + "electricity_consumption": "electricity consumption", + "today_electricity_consumption": "Today’s electricity consumption", + "yesterday_electricity_consumption": "Yesterday’s electricity consumption", + "this_last_week": "This Week's / Last Week's", + "thisweek_electricity_consumption": "This week’s electricity consumption", + "lastweek_electricity_consumption": "Last week’s electricity consumption", + "one_hour": "1 hour", + "four_hour": "4 hour", + "eight_hour": "8 hour", + "energy_ranking": "Energy consumption ranking", + "last_30_days_energy_trend": "Energy consumption trend for the past 30 days", + "today_energy_consumption": "Today", + "this_month_energy_consumption": "This month", + "relative_energy_consumption": "Energy consumption trend", + "daily_relative_change": "Daily", + "weekly_relative_change": "Weekly", + "monthly_relative_change": "Monthly", + "yearly_relative_change": "Yearly", + "today": "Today", + "yesterday": "Yesterday", + "this_week": "This week", + "last_week": "Last week", + "this_month": "This month", + "last_month": "Last month", + "this_year": "This year", + "last_year": "Last year" + }, + "history": { + "title": "Historical Data", + "building_name": "Building", + "device_name": "Device Name", + "system_category": "System Category", + "device_category": "Device Category", + "category": "Category", + "value": "Value", + "date": "Record Time", + "point": "Character", + "combinations": "Common combinations", + "date_range": "Date Range", + "time_range": "Time interval", + "start_date": "Start date", + "start_time": "Start time", + "end_date": "End date", + "end_time": "End time" + }, + "system": { + "status": "Status", + "details": "Details", + "attribute": "Attribute", + "value": "value" + }, + "energy": { + "elec_consumption": "Real-time distribution of electricity consumption", + "total_elec": "Total electricity consumption", + "green_elec": "Green electricity", + "immediate_demand": "Immediate demand", + "average_demand": "Average demand", + "real_time_Trend": "Real-time Trend", + "contract_capacity": "Contract Capacity", + "alert_capacity": "Alert Capacity", + "reset_value": "Reset Value", + "edit_automatic_demand": "Edit automatic demand", + "elec_bills": "Total electricity bills this year (yuan)", + "interval_elec_charges": "Interval electricity charges (yuan)", + "year_carbon_emission": "Cumulative carbon emission equivalent this year (kg)", + "interval_carbon_emission": "Interval carbon emission equivalent", + "year_elec_consumption": "This year's electricity consumption (kWh)", + "interval_elec_consumption": "Interval electricity consumption (kWh)", + "monthly_elec_consumption": "Monthly electricity consumption analysis", + "monthly_carbon_emission_and_reduction": "Monthly carbon emission equivalent (kgCO2e)", + "monthly_bill_power": "Monthly billing power (kWh)", + "interval_bill_degree": "Interval billing degree", + "peak": "Peak", + "semi_peak": "Semi-Peak", + "off_peak": "Off-Peak", + "var_elec_cost": "Var. Elec. Cost", + "fixed_elec_cost": "Fixed Elec. Cost", + "total_elec_cost": "Total Elec. Cost", + "carbon_equivalent": "Carbon Equivalent", + "edit_carbon_emission": "Edit carbon emission coefficient", + "carbon_emission_coefficient": "Carbon emission coefficient", + "electricity_classification": "Electricity Classification", + "electricity_price": "Electricity charge per unit price", + "floor": "Floor", + "maximum": "Maximum", + "maximum_time": "Maximum time", + "minimum": "Minimum value", + "minimum_time": "Minimum time", + "average_value": "Average value", + "start_value": "Start value (kWh)", + "end_value": "End value (kWh)", + "difference": "Difference (kWh)", + "power_consumption": "Power consumption (kWh)", + "ranking": "Ranking", + "subtotal": "Subtotal", + "unit_price": "Unit price", + "total_amount": "Total amount", + "elec_price_list": "Electricity Price List", + "residential": "Residential", + "standard": "Standard", + "simple_elec_price_two_stage": "Simple Time-of-Use Electricity Price (Two-Tier)", + "simple_elec_price_three_stage": "Simple Time-of-Use Electricity Price (Three-Tier)", + "classification": "Classification", + "summer_months": "Summer Months", + "non_summer_months": "Non-Summer Months", + "time_outside_summer_months": "Time Outside Summer Months", + "basic_elec_charge": "Basic Electricity Charge", + "charged_per_household": "Charged Per Household", + "per_household_month": "Per Household Per Month", + "mon_to_friday": "Monday to Friday", + "peak_hours": "Peak Hours", + "semi_peak_hours": "Semi-Peak Hours", + "off_peak_hours": "Off-Peak Hours", + "price_per_kwh": "Price Per kWh", + "all_day": "All Day", + "sat_sun_off_peak_days": "Saturday, Sunday, and Off-Peak Days", + "usage_over_2000kwh": "Usage Over 2000 kWh Per Month", + "add": "Add", + "standard_time_of_use_tariff_2_stage": "Standard Time-of-Use Tariff (Two-Tier)", + "standard_time_of_use_tariff_3_stage": "Standard Time-of-Use Tariff (Three-Tier)", + "single_phase": "Single Phase", + "three_phase": "Three Phase", + "frequent_contract": "Demand Charge", + "per_kw_per_month": "Per kW Per Month", + "non_summer_contract": "Non-Summer Demand Charge", + "saturday_semi_peak_contract": "Saturday Semi-Peak Demand Charge", + "off_peak_contract": "Off-Peak Demand Charge", + "variable_electricity_charge": "Variable Electricity Charge", + "saturday": "Saturday", + "sunday_and_off_peak_days": "Sunday and Off-Peak Days" + }, + "alarm": { + "title": "Warning", + "notify": "Notification", + "number": "ID", + "category": "Category", + "device_name": "Device name", + "message": "Message", + "confirm": "Confirm" + }, + "alert": { + "query_title": "Alarm Record Query", + "setting_title": "Alarm Settings", + "offnormal": "Off Normal", + "normal": "Normal", + "unacked": "Unacked", + "acked": "Acked", + "30days": "Last 30 Days", + "start_date": "Start Date", + "end_date": "End Date", + "building_and_floor": "Building - Floor", + "uuid": "Exception ID", + "alarmClass": "Alarm Conditions", + "device_name": "Device Name", + "device_number": "Device Number", + "device_point_name":"Point Name", + "date": "Occurrence Date", + "time": "Occurrence Time", + "error_msg": "Abnormal Cause", + "ack_state": "Ack Confirm", + "repair_order_number": "Repair Order Number", + "repair_order": "Repair Order", + "form_number": "Form Number", + "start_time": "Estimated Start Time", + "item": "Item", + "maintainance": "Maintainance", + "repair": "Repair", + "repair_item": "Repair Item", + "repair_item_code": "Repair Item Code (Device Number)", + "responsible_vendor": "Responsible Vendor", + "status": "Status", + "not_completed": "Not Completed", + "completed": "Completed", + "worker_id": "Worker ID", + "notice": "Notice", + "result_description": "Result Description", + "upload_file": "Upload File", + "enable": "Enable", + "not_enabled": "Not Enabled", + "qualifications": "Qualifications", + "upper_limit": "Upper Limit", + "lower_limit": "Lower Limit", + "delay": "Duration (s)", + "highDelay": "Max Duration (s)", + "lowDelay": "Min Duration (s)", + "warning_method": "Warning Method", + "warning_time": "Warning Time", + "warning_value": "Warning Value", + "operation": "Function", + "alarm_settings": "Abnormal Alarm Settings", + "time_setting": "Time Setting", + "yes": "Yes", + "no": "No", + "no_notify": "No Notification", + "notify_name": "Name", + "notify_phone": "Phone Number", + "notify_email": "Email", + "notify_items": "Notification Items", + "notify_list": "Notification List", + "choose": "Choose", + "day_time": "Week/Time", + "click_time_period": "Please click the time period with your mouse", + "clear": "Clear", + "sunday": "Sunday", + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "schedule_name": "Time period name", + "schedule_content": "Time period content", + "reorganization": "MQTT Alarm Reorganization" + }, + "operation": { + "title": "Operation And Maintenance Management", + "project": "Project", + "location": "Location", + "uuid": "Exception ID", + "form_number": "Form Number", + "device_name": "Device Name", + "status": "Status", + "staff": "Staff", + "start_time": "Estimated Start Time", + "upload": "File Upload", + "finish_time": "Completion Time", + "updated_time": "Update Time", + "operation": "Function", + "vendor": "Company", + "contact_person": "Contact Person", + "phone": "Phone", + "email": "Email", + "created_at": "Creation Date", + "maintenance": "Upkeep", + "repair": "Repair", + "company_info": "Company Info", + "repair_item": "Repair Item", + "repair_item_code": "Repair Item Code (Device Number)", + "responsible_vendor": "Responsible Vendor", + "not_completed": "Not Completed", + "completed": "Completed", + "worker_id": "Worker ID", + "notice": "Notice", + "result_description": "Result Description", + "upload_file": "Upload File", + "name": "Name", + "city": "City", + "address": "Address", + "tax_id_number": "Tax ID Number", + "remark": "Remark", + "date": "Date", + "serial": "Order Number", + "today": "Today", + "yesterday": "Yesterday", + "start_created_at": "Start Date", + "end_created_at": "End Date", + "enter_text": "Please enter text", + "enter_serial": "Please enter the order number" + }, + "graphManagement": { + "title": "Data And Publication Management", + "category": "Category", + "new_category": "New Category", + "index": "Serial Number", + "oriOrgName": "File", + "operation": "Function", + "folder_path": "Folder Path", + "upload": "Upload", + "staging_area": "Staging Area", + "no_path": "No path" + }, + "assetManagement": { + "title": "Asset Management", + "add_system_category": "Add system category", + "edit_system_category": "Edit system category", + "add_device_category": "Add device category", + "edit_device_category": "Edit device category", + "system_name": "Name", + "system_value": "Code", + "system_parent": "System category", + "device_number": "Device Number", + "device_name": "Device Name", + "asset_number": "Asset Number", + "floor": "Location", + "add_floor": "Add Floor", + "add_floor_text": "Floor map must be uploaded first", + "device_coordinate": "Coordinate", + "brand_and_modal": "Brand/Model", + "brand": "Brand", + "modal": "Model", + "company_and_contact": "Company/Contact Person", + "company": "Company", + "buying_date": "Purchase Time", + "oriFile": "File Upload", + "created_at": "Creation Time", + "operation": "Function", + "device_list": "Device List", + "edit_device": "Edit Device", + "add_device": "Add Device", + "operate_text": "Display name", + "fill_text": "Please fill it in by system personnel", + "equipment_point": "Equipment Point", + "point": "Point", + "add_sensor": "Add New Sensor", + "associated_device": "Associated Devices", + "choose": "Choose", + "index": "Serial Number", + "floor_plan": "Floor Plan", + "department": "Department", + "department_name": "Department Name", + "building": "Building" + }, + "accountManagement": { + "account_title": "Account Management", + "role_title": "Role Management", + "index": "Serial Number", + "name": "Name", + "account": "Account", + "password": "Password", + "role": "Role", + "role_name": "Role Name", + "role_permissions": "Role Permissions", + "role_permissions_setting": "Role Permissions Settings", + "permission_name": "Permission Name", + "basic_permissions": "Basic Ppermissions", + "production_permissions": "Production Setting Permissions", + "email": "Email", + "phone": "Phone", + "created_at": "Created Time", + "operation": "Function", + "name_placeholder": "Please enter the user's name / account", + "role_placeholder": "Please enter the role's name", + "change_password": "Change Password", + "choose": "Choose" + }, + "button": { + "add": "Add", + "cancel": "Cancel", + "query": "Query", + "search": "Search", + "view": "View", + "reset": "Reset", + "export": "Export", + "enter_text": "After entering text, press Enter", + "required": "Required", + "submit": "Submit", + "edit": "Edit", + "delete": "Delete", + "deselect_all": "Deselect All", + "select_all": "Select All", + "phone_format": "Please enter the correct phone number format", + "email_format": "Please enter correct email address", + "password_format": "The password must be at least 8 characters long and must contain English and numbers.", + "start_time_placeholder": "Please enter expected start date", + "finish_time_placeholder": "Please enter completion date", + "rename": "Rename", + "download": "Download", + "confirm": "Confirm", + "restore": "Restore", + "stop_edit": "Stop editing", + "start_edit": "Start editing", + "convert": "Convert" + }, + "msg": { + "sure_to_delete": "Are you sure to delete this item?", + "sure_to_delete_permanent": "Are you sure you want to permanently delete this item?", + "delete_success": "Delete successfully", + "delete_failed": "Delete failed", + "mqtt_refresh":"MQTT reset successful" + }, + "setting": { + "MQTT_parse": "MQTT Parse", + "schema": "Schema", + "point": "Point", + "description": "Description", + "IoT_point_name": "IoT Point Name", + "IoT_point_code": "IoT Point Code", + "number_of_decimal_places": "Number of Decimal Places", + "boolean_value": "Boolean Value", + "hide_point": "Point Display", + "schema_name": "Schema name", + "IoT_point_structure": "IoT Point Structure", + "system_point_name": "System Point Name", + "json_format_text": "Please paste JSON format data", + "json_click_text": "Please enter JSON on the left and click the conversion button" + } +} diff --git a/src/constant/CalculateTableColumn.js b/src/constant/CalculateTableColumn.js new file mode 100644 index 0000000..5a81ee0 --- /dev/null +++ b/src/constant/CalculateTableColumn.js @@ -0,0 +1,127 @@ +const transformColumns = (columns) => + columns.map((col) => ({ + ...col, + dataIndex: col.key, + width: col.width ?? 120, + align: "center", + })); + +const MONTHCOLUMNS = transformColumns([ + { title: "項目", key: "item", width: 190, fixed: true }, + { title: "1月", key: "January" }, + { title: "2月", key: "February" }, + { title: "3月", key: "March" }, + { title: "4月", key: "April" }, + { title: "5月", key: "May" }, + { title: "6月", key: "June" }, + { title: "7月", key: "July" }, + { title: "8月", key: "August" }, + { title: "9月", key: "September" }, + { title: "10月", key: "October" }, + { title: "11月", key: "November" }, + { title: "12月", key: "December" }, +]); + +const WORKHOURSROW = [ + { + key: "Index", + item: "月份", + }, + { + key: "WorkerNumber", + item: "員工數", + }, + { + key: "WorkDay", + item: "每日每人平均工作時數", + }, + { + key: "Scalar", + item: "總工時", + }, + { + key: "OverTimeWorkerNumber", + item: "加班員工數", + }, + { + key: "OverTimeAverageHourPerDay", + item: "每日每人平均加班時數", + }, + { + key: "OverTimeWorkDay", + item: "月加班工作天數", + }, + { + key: "OverTimeScalar", + item: "月合計加班時數", + }, + { key: "TotalHours", item: "總工時", readonly: true }, + { key: "KgCO2e", item: "KgCO2e", readonly: true }, + { key: "Description", item: "描述/說明" }, + { + item: "使用量佐證文件", + key: "ReferenceFileLink", + }, +]; + +const ELECTRICROW = transformColumns([ + { + key: "Index", + title: "月份", + }, + { + key: "Peak", + title: "尖峰 / 峰", + }, + { + key: "HalfPeak", + title: "半尖峰 / 平", + }, + { + key: "SaturdayHalfPeak", + title: "週六半尖峰", + }, + { + key: "OffPeak", + title: "離峰 / 谷", + }, + { + key: "KgCO2e", + title: "碳排放 KgCO2e", + }, + // { + // key: "Elecdeduct1", + // item: "電力扣除額1", + // }, + // { + // key: "Elecdeduct2", + // item: "電力扣除額2", + // }, + // { + // key: "Scalar", + // item: "總用電量", + // }, + // { key: "Description", item: "描述/說明" }, + // { key: "KgCO2e", item: "KgCO2e", readonly: true }, + // { + // item: "使用量佐證文件", + // key: "ReferenceFileLink", + // }, +]); + +const REFRIGERANTCOLUMNS = transformColumns([ + { title: "廠區 / 製程別", key: "ProcessName" }, + { title: "負責單位", key: "ResponsibleUnit" }, + { title: "設備名稱", key: "Name" }, + { title: "型號", key: "ModelNumber" }, + { title: "使用冷媒 / 製冷劑種類 ", key: "ParameterIDTitle" }, + { title: "全廠台數", key: "TotalNumber" }, + { title: "冷媒 / 製冷劑原始填充量(Kg) ", key: "Scalar" }, + { title: "使用月數", key: "UsedMonth" }, + { title: "設備類型(排放因子) ", key: "ParameterID2Title" }, + { title: "GWP", key: "GWP" }, + { title: "設備逸散率", key: "factor" }, + { title: "KgCO2e", key: "KgCO2e" }, +]); + +export { MONTHCOLUMNS, WORKHOURSROW, ELECTRICROW, REFRIGERANTCOLUMNS }; diff --git a/src/constant/api_app.js b/src/constant/api_app.js new file mode 100644 index 0000000..2744f29 --- /dev/null +++ b/src/constant/api_app.js @@ -0,0 +1,8 @@ +const BASEURL = import.meta.env.VITE_API_BASEURL; +export const POST_LOGIN = `${BASEURL}/api/Login/`; +export const GET_AUTHPAGE_API = `${BASEURL}/api/GetUsrFroList`; +export const GET_SUBAUTHPAGE_API = `${BASEURL}/api/Device/GetMainSub`; +export const GET_DEVICELIST_API = `${BASEURL}/api/Device/GetDeviceList`; +export const GET_DEVICEIMME_API = `${BASEURL}/api/Energe/GetElecBySubSysTag`; + + diff --git a/src/constant/api_forge.js b/src/constant/api_forge.js new file mode 100644 index 0000000..9234002 --- /dev/null +++ b/src/constant/api_forge.js @@ -0,0 +1,4 @@ +const BASEURL = import.meta.env.VITE_API_BASEURL; +export const GET_FORGETOKEN_API = `${BASEURL}/api/forge/oauth/token`; + +export const GET_FORGEURN_API = `${BASEURL}/api/Device/GetBuild`; diff --git a/src/constant/authPage.js b/src/constant/authPage.js new file mode 100644 index 0000000..956d94f --- /dev/null +++ b/src/constant/authPage.js @@ -0,0 +1,70 @@ +export const AUTHPAGES = [ + { + authCode: "PF0", + icon: "home", + navigate: "/dashboard", + }, + { + authCode: "PF1", + icon: "tv", + navigate: "/system", + }, + { + authCode: "PF2", + icon: "chart-pie", + pageName: "energyManagement", + navigate: "/energyManagement", + }, + { + authCode: "PF3", + icon: "chart-area", + navigate: "/historyData", + }, + { + authCode: "PF4", + icon: "chart-line", + navigate: "/historyData", + }, + { + authCode: "PF5", + icon: "bell", + pageName: "alert", + navigate: "/alert", + }, + { + authCode: "PF6", + icon: "server", + pageName: "operation", + navigate: "/operation", + }, + { + authCode: "PF7", + icon: "image", + pageName: "graphManagement", + navigate: "/graphManagement", + }, + { + authCode: "PF8", + icon: "user", + pageName: "accountManagement", + navigate: "/accountManagement", + }, + { + authCode: "PF9", + icon: "database", + pageName: "AssetManagement", + navigate: "/assetManagement", + }, + { + authCode: "PF10", + icon: "leaf", + pageName: "ProductSetting", + navigate: "/productSetting", + }, + { + authCode: "PF11", + icon: "cog", + pageName: "Setting", + navigate: "/Setting", + }, +]; diff --git a/src/constant/calculateIcon.js b/src/constant/calculateIcon.js new file mode 100644 index 0000000..b73e845 --- /dev/null +++ b/src/constant/calculateIcon.js @@ -0,0 +1,465 @@ +// import CapitalGood from "@ASSET/icon/CapitalGood.svg"; // 上游購買資本物品 +// import CapitalGoodHover from "@ASSET/icon/CapitalGood-h.svg"; +// import upstreamEnergyEmission from "@ASSET/icon/UpstreamEnergyEmission.svg"; // 與能源相關活動 +// import upstreamEnergyEmissionHover from "@ASSET/icon/UpstreamEnergyEmission-h.svg"; +// import Energy from "@ASSET/icon/Energy.svg"; // 外購能源排放 +// import EnergyHover from "@ASSET/icon/Energy-h.svg"; +// import Disposal from "@ASSET/icon/Disposal.svg"; // 上游廢棄 +// import DisposalHover from "@ASSET/icon/Disposal-h.svg"; +// import LeasedAsset from "@ASSET/icon/LeasedAsset.svg"; // 上游租賃資產 +// import LeasedAssetHover from "@ASSET/icon/LeasedAsset-h.svg"; +// import PurchasedGood from "@ASSET/icon/PurchasedGood.svg"; // 購買商品 +// import PurchasedGoodHover from "@ASSET/icon/PurchasedGood-h.svg"; +// import Consultant from "@ASSET/icon/Consultant.svg"; // 購買服務 +// import ConsultantHover from "@ASSET/icon/Consultant-h.svg"; +// import UpstreamTransport from "@ASSET/icon/UpstreamTransport.svg"; // 上游運輸及配送 +// import UpstreamTransportHover from "@ASSET/icon/UpstreamTransport-h.svg"; +// import BusinessTravel from "@ASSET/icon/BusinessTravel.svg"; // 商務旅行 +// import BusinessTravelHover from "@ASSET/icon/BusinessTravel-h.svg"; +// import Visitor from "@ASSET/icon/Visitor.svg"; // 訪客 +// import VisitorHover from "@ASSET/icon/Visitor-h.svg"; +// import Commuting from "@ASSET/icon/Commuting.svg"; // 員工通勤 +// import CommutingHover from "@ASSET/icon/Commuting-h.svg"; + +// import StationaryCombustion from "@ASSET/icon/StationaryCombustion.svg"; // 固定源 +// import StationaryCombustionHover from "@ASSET/icon/StationaryCombustion-h.svg"; +// import MobileCombustion from "@ASSET/icon/MobileCombustion.svg"; // 移動源 +// import MobileCombustionHover from "@ASSET/icon/MobileCombustion-h.svg"; +// import DirectFugitiveEmission from "@ASSET/icon/DirectFugitiveEmission.svg"; // 逸散源 +// import DirectFugitiveEmissionHover from "@ASSET/icon/DirectFugitiveEmission-h.svg"; +// import DirectProcessEmission from "@ASSET/icon/DirectProcessEmission.svg"; // 製程 +// import DirectProcessEmissionHover from "@ASSET/icon/DirectProcessEmission-h.svg"; +// import Electricity from "@ASSET/icon/Electricity.svg"; // 用電量 +// import ElectricityHover from "@ASSET/icon/Electricity-h.svg"; +// import Steam from "@ASSET/icon/Steam.svg"; // 蒸氣 +// import SteamHover from "@ASSET/icon/Steam-h.svg"; +// import Refrigerant from "@ASSET/icon/Refrigerant.svg"; // 冷媒 +// import RefrigerantHover from "@ASSET/icon/Refrigerant-h.svg"; +// import OtherCompound from "@ASSET/icon/OtherCompound.svg"; // 其他關注類 +// import OtherCompoundHover from "@ASSET/icon/OtherCompound-h.svg"; + +// import UseEmission from "@ASSET/icon/UseEmission.svg"; // 下游使用銷售產品 +// import UseEmissionHover from "@ASSET/icon/UseEmission-h.svg"; +// import DownstreamDisposal from "@ASSET/icon/DownstreamDisposal.svg"; // 下銷售產品廢棄處理 +// import DownstreamDisposalHover from "@ASSET/icon/DownstreamDisposal-h.svg"; +// import Investment from "@ASSET/icon/Investment.svg"; // 投資 +// import InvestmentHover from "@ASSET/icon/Investment-h.svg"; + +// import Other from "@ASSET/icon/Other.svg"; // 投資 +// import OtherHover from "@ASSET/icon/Other-h.svg"; + +// import WaterUsages from "@ASSET/icon/WaterUsages.png"; // 水 +// import WaterUsagesHover from "@ASSET/icon/WaterUsagesHover.png"; + +import { + MONTHCOLUMNS, + WORKHOURSROW, + ELECTRICROW, + REFRIGERANTCOLUMNS, +} from "./CalculateTableColumn"; + +const alterSourceIcon = (sourceList) => + sourceList.map(({ link, icon, hoverIcon, title, children = null }) => ({ + icon, + hoverIcon, + title, + key: link, + link, + children, + })); + +const sourceIconListForUpstreamS3 = alterSourceIcon([ + { + icon: "CapitalGood", + hoverIcon: "CapitalGood-h", + link: "capitalGood", + title: "購買資本物品 C4", + children: [ + { + title: "購買資本物品 C4", + editType: "lifecycle", + link: "capitalGood", + }, + ], + }, + { + icon: "UpstreamEnergyEmission", + hoverIcon: "UpstreamEnergyEmission-h", + link: "upstreamEmissions", + title: "輸入能源上游排放 C4", + children: [ + { + title: "輸入能源上游排放 C4", + editType: "lifecycle", + link: "upstreamEmissions", + }, + ], + }, + { + icon: "WaterUsages", + hoverIcon: "WaterUsages-h", + link: "waterUsage", + title: "用水(水資源管理) C4", + children: [ + { + title: "用水(水資源管理) C4", + editType: "lifecycle", + link: "waterUsage", + }, + ], + }, + { + icon: "PurchasedGood", + hoverIcon: "PurchasedGood-h", + link: "purchasedGood", + title: "購買商品 C4", + children: [ + { + title: "購買商品 C4", + editType: "lifecycle", + link: "purchasedGood", + }, + ], + }, + { + icon: "LeasedAsset", + hoverIcon: "LeasedAsset-h", + link: "leasedAsset", + title: "上游租賃資產 C4", + children: [ + { + title: "上游租賃資產 C4", + editType: "lifecycle", + link: "leasedAsset", + }, + ], + }, + { + icon: "Consultant", + hoverIcon: "Consultant-h", + link: "consultant", + title: "顧問諮詢、清潔、維護等 C4", + children: [ + { + title: "顧問諮詢、清潔、維護等 C4", + editType: "lifecycle", + link: "consultant", + }, + ], + }, +]); + +const sourceIconListForBusinessS2UP = alterSourceIcon([ + { + icon: "UpstreamTransport", + hoverIcon: "UpstreamTransport-h", + link: "upstreamTransport", + title: "上游運輸及配送 C3", + children: [ + { + title: "上游運輸及配送 C3", + editType: "lifecycle", + link: "upstreamTransport", + }, + ], + }, +]); + +const sourceIconListForBusinessS1 = alterSourceIcon([ + { + icon: "MobileCombustion", + hoverIcon: "MobileCombustion-h", + link: "mobileCombustion", + title: "移動源 C1", + children: [ + { + title: "移動源 C1", + editType: "yearlyDevice", + link: "mobileCombustion", + }, + ], + }, + { + icon: "StationaryCombustion", + hoverIcon: "StationaryCombustion-h", + link: "stationaryCombustion", + title: "固定燃燒源 C1", + children: [ + { + title: "固定燃燒源 C1", + editType: "yearlyDevice", + link: "stationaryCombustion", + }, + ], + }, + { + icon: "DirectProcessEmission", + hoverIcon: "DirectProcessEmission-h", + link: "directProcessEmission", + title: "工業製程 C1", + children: [ + { + title: "工業製程 C1", + editType: "yearlyDevice", + link: "directProcessEmission", + }, + ], + }, + { + icon: "DirectFugitiveEmission", + hoverIcon: "DirectFugitiveEmission-h", + link: "directFugitiveEmission", + title: "人為逸散 C1", + children: [ + { + title: "冷媒設備 B.2.2.d", + editType: "nonYearlyDevice", + link: "refrigerant", + cols: REFRIGERANTCOLUMNS, + main_system_tag: "ME", + sub_system_tag: "M10", + }, + { + title: "工時計算 B.2.2.d", + editType: "lifecycle", + link: "workHour", + rows: WORKHOURSROW, + cols: MONTHCOLUMNS, + data_api: "./mock/workhour.json", + }, + { + title: "消防設備 B.2.2.d", + editType: "nonYearlyDevice", + link: "fireEquipment", + }, + ], + }, + { + icon: "OtherCompound", + hoverIcon: "OtherCompound-h", + link: "otherCompound", + title: "其他關注類物質 C1", + children: [ + { + title: "其他關注類物質 C1", + editType: "nonYearlyDevice", + link: "otherCompound", + }, + ], + }, + + { + icon: "Electricity", + hoverIcon: "Electricity-h", + link: "electricity", + title: "輸入電力 C2", + children: [ + { + title: "一般用電 B.3.2.a", + editType: "month", + link: "plus", + rows: ELECTRICROW, + cols: MONTHCOLUMNS, + main_system_tag: "EE", + sub_system_tag: "E4", + data_api: "./mock/electricity.json", + }, + // { + // title: "綠電 B.3.2.a", + // editType: "month", + // link: "minus", + // rows: ELECTRICROW, + // cols: MONTHCOLUMNS, + // }, + ], + }, + { + icon: "Steam", + hoverIcon: "Steam-h", + link: "steam", + title: "輸入蒸汽 C2", + children: [ + { + title: "蒸氣加項 B.3.2.b", + editType: "month", + link: "plus", + }, + { + title: "蒸氣減項 B.3.2.b", + editType: "month", + link: "minus", + }, + ], + }, + { + icon: "Visitor", + hoverIcon: "Visitor-h", + link: "visitor", + title: "客戶和訪客運輸 C3", + children: [ + { + title: "客戶和訪客運輸 C3", + editType: "lifecycle", + link: "visitor", + }, + ], + }, + { + icon: "BusinessTravel", + hoverIcon: "BusinessTravel-h", + link: "businessTravel", + title: "員工差旅 C3", + children: [ + { + title: "員工差旅 C3", + editType: "lifecycle", + link: "businessTravel", + }, + ], + }, + { + icon: "Commuting", + hoverIcon: "Commuting-h", + link: "commuting", + title: "員工通勤 C3", + children: [ + { + title: "員工通勤 C3", + editType: "lifecycle", + link: "commuting", + }, + ], + }, + { + icon: "Disposal", + hoverIcon: "Disposal-h", + link: "disposal", + title: "營運產生之廢棄物 C4", + children: [ + { + title: "營運產生之廢棄物 C4", + editType: "lifecycle", + link: "disposal", + }, + ], + }, +]); + +const sourceIconListForBusinessS2Down = alterSourceIcon([ + { + icon: "UpstreamTransport", + hoverIcon: "UpstreamTransport-h", + link: "downstreamTransport", + title: "下游運輸及配送 C3", + children: [ + { + title: "下游運輸及配送 C3", + editType: "lifecycle", + link: "downstreamTransport", + }, + ], + }, + { + icon: "UpstreamTransport", + hoverIcon: "UpstreamTransport-h", + link: "disposalDownTransport", + title: "廢棄物運輸 C3", + children: [ + { + title: "廢棄物運輸 C3", + editType: "lifecycle", + link: "disposalDownTransport", + }, + ], + }, +]); + +const sourceIconListForDownstreamS3 = alterSourceIcon([ + { + icon: "LeasedAsset", + hoverIcon: "LeasedAsset-h", + link: "downLeasedAsset", + title: "下游租賃資產 C5", + children: [ + { + title: "下游租賃資產 C5", + editType: "lifecycle", + link: "downLeasedAsset", + }, + ], + }, + { + icon: "UseEmission", + hoverIcon: "UseEmission-h", + link: "useEmission", + title: "產品使用階段 C5", + children: [ + { + title: "產品使用階段 C5", + editType: "lifecycle", + link: "useEmission", + }, + ], + }, + { + icon: "Investment", + hoverIcon: "Investment-h", + link: "investment", + title: "投資 C5", + children: [ + { + title: "投資 C5", + editType: "lifecycle", + link: "investment", + }, + ], + }, + { + icon: "DownstreamDisposal", + hoverIcon: "DownstreamDisposal-h", + link: "downstreamDisposal", + title: "產品壽命終止階段 C5", + children: [ + { + title: "產品壽命終止階段 C5", + editType: "lifecycle", + link: "downstreamDisposal", + }, + ], + }, +]); + +const sourceIconListForOtherS3 = alterSourceIcon([ + { + icon: "Other", + hoverIcon: "Other-h", + link: "other", + title: "其它間接排放 C6", + children: [ + { + title: "其它間接排放 C6", + editType: "lifecycle", + link: "other", + }, + ], + }, +]); + +const allSourceIconList = [ + ...sourceIconListForUpstreamS3, + ...sourceIconListForBusinessS1, + ...sourceIconListForBusinessS2UP, + ...sourceIconListForBusinessS2Down, + ...sourceIconListForDownstreamS3, + ...sourceIconListForOtherS3, +]; + +export { + sourceIconListForUpstreamS3, + sourceIconListForBusinessS1, + sourceIconListForBusinessS2UP, + sourceIconListForBusinessS2Down, + sourceIconListForDownstreamS3, + sourceIconListForOtherS3, + allSourceIconList, +}; diff --git a/src/constant/colors.js b/src/constant/colors.js new file mode 100644 index 0000000..9665e09 --- /dev/null +++ b/src/constant/colors.js @@ -0,0 +1,32 @@ +export const COLOR = [ + "#4cf3e9", // 亮藍 + "#f5d54e", // 黃 + "#63ed84", // 亮綠 + "#9afed8", // 淺綠 + "#e266fe", // 紫 + "#e0e2e2", // 灰 + "#500080", // 紫 + "#115852", // 深綠 + "#4B4E6C", // 灰 + "#eb4c42", // 紅 + "#007ba7", // 藍 + "#da3287", // 粉紅 + "#ccff00", // 綠 + "#fff44f", // 黃 +]; + +// 淺色 +export const CHART_COLOR = [ + "#cb4154", // 紅 + "#fad6a5", // 黃 + "#ace1af", // 綠 + "#9bddff", // 亮藍 +]; + +// 深色 +export const SECOND_CHART_COLOR = [ + "#cc0000", // 紅 + "#ffb300", // 黃 + "#00cc99", // 綠 + "#4997d0", // 藍 +]; diff --git a/src/constant/index.js b/src/constant/index.js new file mode 100644 index 0000000..5a01247 --- /dev/null +++ b/src/constant/index.js @@ -0,0 +1,45 @@ +import { + POST_LOGIN, + GET_AUTHPAGE_API, + GET_SUBAUTHPAGE_API, + GET_DEVICELIST_API, + GET_DEVICEIMME_API, +} from "./api_app"; +import { GET_FORGETOKEN_API, GET_FORGEURN_API } from "./api_forge"; +import { AUTHPAGES } from "./authPage"; +import { + sourceIconListForUpstreamS3, + sourceIconListForBusinessS1, + sourceIconListForBusinessS2UP, + sourceIconListForBusinessS2Down, + sourceIconListForDownstreamS3, + sourceIconListForOtherS3, + allSourceIconList, +} from "./calculateIcon"; +import { MONTHCOLUMNS } from "./CalculateTableColumn"; +import { COLOR, CHART_COLOR, SECOND_CHART_COLOR } from "./colors"; + +export { + // api_app + POST_LOGIN, + GET_AUTHPAGE_API, + GET_SUBAUTHPAGE_API, + GET_DEVICELIST_API, + GET_DEVICEIMME_API, + + //api_forge + GET_FORGETOKEN_API, + GET_FORGEURN_API, + AUTHPAGES, + sourceIconListForUpstreamS3, + sourceIconListForBusinessS1, + sourceIconListForBusinessS2UP, + sourceIconListForBusinessS2Down, + sourceIconListForDownstreamS3, + sourceIconListForOtherS3, + allSourceIconList, + MONTHCOLUMNS, + COLOR, + CHART_COLOR, + SECOND_CHART_COLOR, +}; diff --git a/src/directives/draggable.js b/src/directives/draggable.js new file mode 100644 index 0000000..726d156 --- /dev/null +++ b/src/directives/draggable.js @@ -0,0 +1,66 @@ +const moveModal = (elmnt) => { + console.log(elmnt); + var pos1 = 0, + pos2 = 0, + pos3 = 0, + pos4 = 0; + document.body.addEventListener("mousedown", dragMouseDown, { + passive: false, + }); + + function dragMouseDown(e) { + console.log("dragMouseDown", e); + e = e || window.event; + e.preventDefault(); + // get the mouse cursor position at startup: + pos3 = e.clientX; + pos4 = e.clientY; + document.body.addEventListener("mouseup", closeDragElement, { + passive: false, + }); + // call a function whenever the cursor moves: + document.body.addEventListener("mousemove", elementDrag, { + passive: false, + }); + } + + function elementDrag(e) { + e = e || window.event; + e.preventDefault(); + // calculate the new cursor position: + pos1 = pos3 - e.clientX; + pos2 = pos4 - e.clientY; + pos3 = e.clientX; + pos4 = e.clientY; + // set the element's new position: + elmnt.style.top = elmnt.offsetTop - pos2 + "px"; + elmnt.style.left = elmnt.offsetLeft - pos1 + "px"; + } + + function closeDragElement() { + // stop moving when mouse button is released: + document.body.removeEventListener("mouseup", closeDragElement); + document.body.removeEventListener("mousemove", elementDrag); + } +}; + +export const draggable = { + install(app) { + app.directive("draggable", { + mounted: (el, binding, vnode, prevVnode) => { + console.log("draggable", $(`#${el.id}`).draggable); + if (binding.value) { + if ($(`#${el.id}`).draggable) { + $(`#${el.id}`).draggable({ + cursor: "move", + scroll: true, + container: ".app-container", + }); + } else { + moveModal(el); + } + } + }, + }); + }, +}; diff --git a/src/directives/focusPlugin.js b/src/directives/focusPlugin.js new file mode 100644 index 0000000..d917077 --- /dev/null +++ b/src/directives/focusPlugin.js @@ -0,0 +1,9 @@ +export const focusPlugin = { + install(app) { + app.directive("focus", { + mounted: (el, binding, vnode, prevVnode) => { + el.focus(); + }, + }); + }, +}; diff --git a/src/fontawsomeIconRegister.js b/src/fontawsomeIconRegister.js new file mode 100644 index 0000000..3758302 --- /dev/null +++ b/src/fontawsomeIconRegister.js @@ -0,0 +1,136 @@ +/* import the fontawesome core */ +import { library } from "@fortawesome/fontawesome-svg-core"; + +/* import specific icons */ +import { + faHome, + faTv, + faChartArea, + faChartPie, + faChartLine, + faBell, + faServer, + faImage, + faUser, + faLeaf, + faDesktop, + faCog, + faExclamationTriangle, + faBars, + faTimes, + faAngleDown, + faUserCircle, + faCommentDots, + faCommentSlash, + faPlus, + faSearch, + faCaretRight, + faFolder, + faCloudUploadAlt, + faTrashAlt, + faChevronRight, + faChevronLeft, + faPencilAlt, + faSortUp, + faSortDown, + faFilter, + faFilePdf, + faFileExcel, + faFileWord, + faFilePowerpoint, + faFileArchive, + faFileAlt, + faDatabase, + faBuilding, + faVideo, + faFan, + faTemperatureHigh, + faLightbulb, + faBolt, + faChargingStation, + faTint, + faWater, + faCarBattery, + faFireExtinguisher, + faDoorOpen, + faCar, + faWind, + faEye, + faEyeSlash, + faGlobe, + faDownload, + faStream, + faSave, + faCrown, + faClock, + faCheckCircle +} from "@fortawesome/free-solid-svg-icons"; +import { faCircle } from "@fortawesome/free-regular-svg-icons"; + +/* add icons to the library */ +library.add( + faHome, + faTv, + faChartArea, + faChartPie, + faChartLine, + faBell, + faServer, + faImage, + faUser, + faLeaf, + faDesktop, + faCog, + faExclamationTriangle, + faBars, + faTimes, + faAngleDown, + faUserCircle, + faCommentDots, + faPlus, + faCommentSlash, + faSearch, + faCaretRight, + faFolder, + faCloudUploadAlt, + faTrashAlt, + faChevronRight, + faChevronLeft, + faPencilAlt, + faSortUp, + faSortDown, + faFilter, + faFilePdf, + faFileExcel, + faFileWord, + faFilePowerpoint, + faFileArchive, + faFileAlt, + faDatabase, + faBuilding, + faVideo, + faFan, + faTemperatureHigh, + faLightbulb, + faBolt, + faChargingStation, + faTint, + faWater, + faCarBattery, + faFireExtinguisher, + faDoorOpen, + faCar, + faWind, + faEye, + faEyeSlash, + faGlobe, + faDownload, + faStream, + faSave, + faCrown, + faClock, + faCheckCircle, + faCircle +); + +export default library; diff --git a/src/hooks/baja/useAlarmData.js b/src/hooks/baja/useAlarmData.js new file mode 100644 index 0000000..8562df3 --- /dev/null +++ b/src/hooks/baja/useAlarmData.js @@ -0,0 +1,89 @@ +import { ref, onMounted, onUnmounted } from 'vue'; +import dayjs from 'dayjs'; +import { getAllDevice } from "@/apis/building"; + +export default function useAlarmData() { + let timer = null; + const alarmData = ref([]); + const allDeviceList = ref([]); + + const getFormateDate = (datetime, formatRule = 'YYYY-MM-DD HH:mm') => { + return dayjs(datetime).format(formatRule); + }; + + const getAlarmByBaja = ( + startDate, + endDate, + isRecover, + isAck, + alarmClass, + callback + ) => { + window.require && + window.requirejs(["baja!"], (baja) => { + let alarms = []; + // console.log("進入 bajaSubscriber 準備執行BQL訂閱"); + const alarmClassQuery = alarmClass.map(ac => `alarmClass = '${ac}'`).join(' or '); + const ord = `local:|foxs:|alarm:|bql:select * where (${alarmClassQuery}) and timestamp.millis > ${startDate} and timestamp.millis < ${endDate} and sourceState = '${isRecover}' and ackState = '${isAck}' order by timestamp desc`; + baja.Ord.make(ord).get({ + cursor: { + before: () => { + timer = null; + }, + each: (record) => { + let alarmDisplayName = record.get("alarmData").get("sourceName"); + alarmDisplayName = alarmDisplayName.replace(/\$2d/g, "_"); // 檢查並替換 $2d 為 _ + const sourceTmp = alarmDisplayName.split("_"); + const bfName = sourceTmp[1] + "-" + sourceTmp[4]; + const sourceName = sourceTmp.slice(0, 8).join("_"); + const sourceTmpFinal = sourceTmp[7] + "-" + sourceTmp[8]; + if (!sourceTmpFinal.includes("undefined")) { + alarms.push({ + building_tag: bfName, + uuid: record.get("uuid").$val, + timestamp_date: getFormateDate(record.get("timestamp").getJsDate(), "YYYY/MM/DD "), + timestamp_time: getFormateDate(record.get("timestamp").getJsDate(), "HH:mm:ss"), + alarmClass: record.get("alarmClass"), + device_number: sourceName, + full_name: allDeviceList.value.find((d) => sourceName === d.device_number)?.full_name, + msg: record.get("alarmData").get("msgText"), + sourceState: record.get("sourceState").getDisplayTag(), + normalTime: getFormateDate(record.get("normalTime").getJsDate()), + ackState: record.get("ackState").getDisplayTag(), + ackedTime: getFormateDate(record.get("ackTime").getJsDate()), + }); + } + }, + after: () => { + if (typeof callback === 'function') { + callback({ count: alarms.length, data: alarms }); + } + }, + limit: -1, + offset: 0, + }, + }); + }); + }; + + const getDevice = async () => { + const res = await getAllDevice(); + allDeviceList.value = res.data; + }; + + const stopFetching = () => { + if (timer) { + clearTimeout(timer); + } + }; + + onMounted(() => { + getDevice(); + }); + + onUnmounted(() => { + stopFetching(); + }); + + return { getAlarmByBaja, alarmData, stopFetching }; +} diff --git a/src/hooks/baja/useRefrigerantHeatMap.js b/src/hooks/baja/useRefrigerantHeatMap.js new file mode 100644 index 0000000..4a68ea9 --- /dev/null +++ b/src/hooks/baja/useRefrigerantHeatMap.js @@ -0,0 +1,150 @@ +import { ref, watch, markRaw } from "vue"; + +export default function useRefrigerantTemp() { + const deviceList = ref([]); + const dataVizExtension = ref(null); + + const getBasicData = (viewer, dataVizExtn, deviceArr) => { + dataVizExtension.value = markRaw(dataVizExtn); + const devices = deviceArr.map((d) => ({ + ...d, + id: d.device_number, // An ID to identify this device + roomDbId: Number(d.room_dbid), + position: JSON.parse(d.device_coordinate_3d), // World coordinates of this device + sensorTypes: ["temperature"], // The types/properties this device exposes + temp: 10, + dbId: d.forge_dbid, + })); + deviceList.value = devices; + initHeatMap(viewer, dataVizExtn, devices); + }; + + const initHeatMap = async (viewer, dataVizExtn, deviceList) => { + const { + SurfaceShadingData, + SurfaceShadingPoint, + SurfaceShadingNode, + SurfaceShadingGroup, + } = Autodesk.DataVisualization.Core; + const shadingGroup = new SurfaceShadingGroup("iot-heatmap"); + const rooms = new Map(); + + for (const { id, roomDbId, position, sensorTypes } of deviceList) { + if (!id || roomDbId == -1) { + continue; + } + + if (!rooms.has(roomDbId)) { + const room = new SurfaceShadingNode(id, roomDbId); + shadingGroup.addChild(room); + rooms.set(roomDbId, room); + } + const room = rooms.get(roomDbId); + room.addPoint(new SurfaceShadingPoint(id, position, sensorTypes)); + } + + const shadingData = new SurfaceShadingData(); + shadingData.addChild(shadingGroup); + shadingData.initialize(viewer.model); + + await dataVizExtn.setupSurfaceShading(viewer.model, shadingData); + dataVizExtn.registerSurfaceShadingColors( + "temperature", + [0x0000ff, 0x00ff00, 0xffff00, 0xff0000] + ); + dataVizExtn.renderSurfaceShading( + "iot-heatmap", + "temperature", + getSensorValue + ); + }; + + // Function that provides sensor value in the range of [0.0, 1.0] + function getSensorValue(device, sensorType, pointData) { + const dev = deviceList.value.find( + ({ device_number }) => device_number === device.id + ); + console.log(9, device, dev); + + return (dev?.temp || 0) / 40; + } + + function updateTemp() { + console.log(8, deviceList.value, dataVizExtension.value.updateSurfaceShading); + dataVizExtension.value.updateSurfaceShading(getSensorValue); + + + } + + const transformDeviceNumber = (device_number) => { + return device_number.replaceAll("_", "/"); + }; + + const subscribeDevice = (deviceList) => { + deviceList.forEach((d) => { + const ordPath = transformDeviceNumber(d.device_number); + getRealTempByBaja(ordPath); + }); + }; + + const getRealTempByBaja = (ordPath) => { + window.require && + window.requirejs(["baja!"], (baja) => { + console.log("進入 bajaSubscriber 準備執行BQL訂閱"); + const sub = new baja.Subscriber(); + function changeDeviceValue(temp) { + const device = deviceList.value.find( + ({ device_number }) => + transformDeviceNumber(device_number) === ordPath + ); + console.log(7, device, temp); + device.temp = Number(temp.replace(" °C", "")); + updateTemp(); + } + sub.attach("changed", (prop) => { + if (prop && prop.$displayName === "Out") { + console.log(5, ordPath, prop); + if (prop.$getValue().getValueDisplay().includes(" °C")) { + changeDeviceValue(prop.$getValue().getValueDisplay()); + } + } + }); + sub.attach("subscribed", (prop) => { + if (prop && prop.$displayName === "Out") { + console.log(6, ordPath, prop); + if (prop.$getValue().getValueDisplay().includes(" °C")) { + changeDeviceValue(prop.$getValue().getValueDisplay()); + } + } + }); + // ord 為要訂閱的點位 + // ord 為要訂閱的點位 + baja.Ord.make(`local:|foxs:|station:|slot:/${ordPath}`) + .get() + .then((folder) => { + folder + .getSlots() + .is("control:NumericWritable") + .eachValue((point) => { + if ( + point.getDisplayName() === "Temp" || + point.getDisplayName() === "TEMP" + ) { + baja.Ord.make( + `local:|foxs:|station:|slot:/${ordPath}/${point.getDisplayName()}` + ).get({ subscriber: sub }); + } + }); + }); + }); + }; + + watch(deviceList, (newValue) => { + subscribeDevice(newValue); + }); + + return { + getBasicData, + updateTemp, + }; +} diff --git a/src/hooks/baja/useSystemHeatmap.js b/src/hooks/baja/useSystemHeatmap.js new file mode 100644 index 0000000..4d56f33 --- /dev/null +++ b/src/hooks/baja/useSystemHeatmap.js @@ -0,0 +1,123 @@ +// to deal with the temperature heatmap +import { ref, watch, markRaw } from "vue"; +import useSearchParams from "@/hooks/useSearchParam"; +export default function useSystemHeatmap(updateHeatBarIsShow) { + const { searchParams } = useSearchParams(); + // init heatmap + const forgeViewer = ref(null); + const dataVizExtension = ref(null); + const deviceList = ref([]); + const heatMaps = ref({}); + + const initHeatMap = async (viewer) => { + forgeViewer.value = markRaw(viewer); + const dataVizExtn = await viewer.loadExtension( + "Autodesk.DataVisualization" + ); + dataVizExtension.value = markRaw(dataVizExtn); + }; + const updateHeatMapData = (deviceArr) => { + deviceList.value = Object.values(deviceArr).map((d) => ({ + ...d, + id: d.device_number, // An ID to identify this device + roomDbId: d.room_dbid, + position: d.device_coordinate_3d, // World coordinates of this device + sensorTypes: ["temperature"], // The types/properties this device exposes + temp: 10, + dbId: d.forge_dbid, + })); + }; + + //create the heatmap + function getSensorValue(device, sensorType, pointData) { + const dev = deviceList.value.find( + ({ device_number }) => device_number === device.id + ); + console.log(9, device, dev); + + return (dev?.temp || 0) / 40; + } + + const updateTemp = (device_number, temp) => { + const subDevIndex = deviceList.value.findIndex( + (d) => d.device_number === device_number + ); + deviceList.value[subDevIndex] = { ...deviceList.value[subDevIndex], temp }; + dataVizExtension.value.updateSurfaceShading(getSensorValue); + }; + + const createHeatMap = async (heatMapName) => { + // let dataVizExtn = await viewer.loadExtension("Autodesk.DataVisualization"); + // dataVizExtension.value = markRaw(dataVizExtn); + + const { + SurfaceShadingData, + SurfaceShadingPoint, + SurfaceShadingNode, + SurfaceShadingGroup, + } = Autodesk.DataVisualization.Core; + const shadingGroup = new SurfaceShadingGroup(`iot_heatmap_${heatMapName}`); + const rooms = new Map(); + + for (const { id, roomDbId, position, sensorTypes } of deviceList.value) { + if (!id || roomDbId == -1 || !roomDbId) { + continue; + } + + if (!rooms.has(roomDbId)) { + const room = new SurfaceShadingNode(id, roomDbId); + shadingGroup.addChild(room); + rooms.set(roomDbId, room); + } + const room = rooms.get(roomDbId); + room.addPoint(new SurfaceShadingPoint(id, position, sensorTypes)); + } + + const shadingData = new SurfaceShadingData(); + shadingData.addChild(shadingGroup); + shadingData.initialize(forgeViewer.value?.model); + + await dataVizExtension.value.setupSurfaceShading( + forgeViewer.value.model, + shadingData + ); + dataVizExtension.value.registerSurfaceShadingColors( + "temperature", + [0x0000ff, 0x00ff00, 0xffff00, 0xff0000] + ); + dataVizExtension.value.renderSurfaceShading( + `iot_heatmap_${heatMapName}`, + "temperature", + getSensorValue + ); + + console.log(dataVizExtension.value); + }; + + watch(deviceList, (newValue) => { + console.log("熱圖", newValue); + switch (parseInt(searchParams.value.option)) { + case 2: + createHeatMap("frozen"); + updateHeatBarIsShow(true); + break; + case 3: + createHeatMap("gland"); + updateHeatBarIsShow(true); + break; + case 4: + createHeatMap("packing"); + break; + case 5: + createHeatMap("formula"); + updateHeatBarIsShow(true); + break; + default: + dataVizExtension.value?.removeSurfaceShading(); + updateHeatBarIsShow(false); + break; + } + }); + + return { updateHeatMapData, updateTemp, initHeatMap }; +} diff --git a/src/hooks/baja/useSystemStatusByBaja.js b/src/hooks/baja/useSystemStatusByBaja.js new file mode 100644 index 0000000..e8ba4cf --- /dev/null +++ b/src/hooks/baja/useSystemStatusByBaja.js @@ -0,0 +1,388 @@ +import { onMounted, ref, computed, watch, markRaw, inject } from "vue"; +import { getDashboardDevice } from "@/apis/dashboard"; +import useSearchParams from "@/hooks/useSearchParam"; +import useSystemHeatmap from "./useSystemHeatmap"; + +export default function useSystemStatusByBaja(updateHeatBarIsShow) { + const rawData = ref([]); + const forgeViewer = ref(null); + const urn = ref(""); + const { searchParams } = useSearchParams(); + + const initialData = ref(null); + + const updateInitialData = (data = false) => { + initialData.value = data; + }; + + const { updateHeatMapData, updateTemp, initHeatMap } = + useSystemHeatmap(updateHeatBarIsShow); + + const updateForgeViewer = (viewer) => { + if (!viewer) { + forgeViewer.value = null; + return; + } + forgeViewer.value = markRaw(viewer); + initHeatMap(viewer); + }; + + const getSubPoint = (normal, close, error, sub_points) => { + let points = { + ...Object.fromEntries(sub_points.map((p) => [p, ""])), + }; + if (normal) points[normal] = ""; + if (close) points[close] = ""; + if (error) points[error] = ""; + return points; + }; + const subscribeData = ref({}); + + watch(rawData, () => { + let sub_data = {}; + + rawData.value.forEach((d) => { + sub_data = { + ...sub_data, + ...Object.fromEntries( + d.device.map((dev) => [ + dev.device_number, + { + ...dev, + labelText: d.labelText, + show_value: d.labelText, + device_normal_point_name: d.device_normal_point_name, + device_close_point_name: d.device_close_point_name, + device_error_point_name: d.device_error_point_name, + device_normal_point_value: d.device_normal_point_value, + device_close_point_value: d.device_close_point_value, + device_error_point_value: d.device_error_point_value, + device_normal_color: d.device_normal_color, + device_close_color: d.device_close_color, + device_error_color: d.device_error_color, + forge_dbid: parseInt(dev.forge_dbid), + device_coordinate_3d: dev.device_coordinate_3d + ? JSON.parse(dev.device_coordinate_3d) + : { x: 0, y: 0 }, + points: getSubPoint( + d.device_normal_point_name, + d.device_close_point_name, + d.device_error_point_name, + d.points + ), + is_show: true, + currentColor: d.device_normal_color, + }, + ]) + ), + }; + }); + subscribeData.value = sub_data; + updateHeatMapData(sub_data); + updateSubscribeDataFromBaja(sub_data); + }); + + const visibleDbid = computed(() => { + let visible = []; + + rawData.value.forEach((d) => { + visible = [ + ...visible, + ...d.device.map((dev) => parseInt(dev.forge_dbid)), + ]; + }); + + return visible; + }); + + const getDevice = async (option = 1) => { + const res = await getDashboardDevice({ + option: parseInt(option), + }); + rawData.value = res.data.map((d) => ({ + ...d, + key: d.subSys, + })); + }; + + // subscribe from baja + const booleanPointFacets = ref({}); + const updateFacets = (point, facets) => { + booleanPointFacets.value = { + ...booleanPointFacets, + [point]: facets, + }; + }; + const updateDeviceData = (device_number, point, value) => { + const correspondPoint = initialData.value.points.find( + ({ name }) => name === point + ); + // console.log("sub 回傳值 ", typeof value) + const text = correspondPoint + ? correspondPoint.values.find( + ({ value: pValue }) => pValue === parseInt(value) + )?.text || "" + : value; + + // console.log("sub", correspondPoint, device_number, point, value); + subscribeData.value[device_number].points[point] = text; + if ( + point.toLowerCase() === "temp" && + parseInt(searchParams.value.option) > 1 + ) { + updateTemp(device_number, value); + } + if (point === subscribeData.value[device_number].device_error_point_name) { + subscribeData.value[device_number].currentColor = + value === subscribeData.value[device_number].device_error_point_value + ? subscribeData.value[device_number].device_error_color + : subscribeData.value[device_number].device_normal_color; + } + + updateLabelText(device_number, point, text); + }; + + const transformDeviceNumber = (device_number) => { + return device_number.replaceAll("_", "/"); + }; + + const updateLabelText = (key, point, value) => { + let text = subscribeData.value[key].labelText.replace(`%${point}`, value); + Object.keys(subscribeData.value[key].points) + .filter((p) => p !== point) + .forEach((p) => { + text = text.replace(`%${p}`, subscribeData.value[key].points[p]); + }); + subscribeData.value[key].show_value = text; + }; + + const subComponents = ref(null); + const updateSubscribeDataFromBaja = (data) => { + for (let [key, value] of Object.entries(data)) { + window.require && + window.requirejs(["baja!"], (baja) => { + console.log("進入 bajaSubscriber 準備執行BQL訂閱"); + + const ordPath = transformDeviceNumber(key); + baja.Ord.make(`local:|foxs:|station:|slot:/${ordPath}`) + .get() + .then((folder) => { + const batch = new baja.comm.Batch(); + + const sub = new baja.Subscriber(); + sub.attach({ + changed: function (prop, cx) { + if (prop.$getDisplayName() !== "Out") return; + if ( + Object.hasOwn( + booleanPointFacets.value, + prop.$complex.$propInParent.$slotName + ) + ) { + const facets = + booleanPointFacets.value[ + prop.$complex.$propInParent.$slotName + ]; + + for (let [facetKey, facetValue] of Object.entries(facets)) { + if (facetValue === prop.$getValue().getValueDisplay()) { + updateDeviceData( + key, + prop.$complex.$propInParent.$slotName, + facetKey + ); + } + } + } else { + updateDeviceData( + key, + prop.$complex.$propInParent.$slotName, + prop.$getValue().getValueDisplay() + ); + } + }, + }); + + folder + .getSlots() + .is("control:ControlPoint") + .eachValue((point) => { + if ( + Object.keys(value.points).includes(point.getDisplayName()) + ) { + baja.Ord.make( + `local:|foxs:|station:|slot:/${ordPath}/${point.getDisplayName()}` + ) + .get() + .then((component) => { + if ( + point.getType().getTypeSpec() === + "control:BooleanWritable" + ) { + const facets = component.getFacets1().toObject(); + updateFacets(point.getDisplayName(), facets); + for (let [facetKey, facetValue] of Object.entries( + facets + )) { + if ( + facetValue === + component.getOut().getValue().toString() + ) { + updateDeviceData( + key, + point.getDisplayName(), + facetKey + ); + } + } + } else { + updateDeviceData( + key, + point.getDisplayName(), + component.getOut().getValue() + ); + } + + sub + .subscribe({ + comps: component, // Can also just be an singular Component instance + batch, // if defined, any network calls will be batched into this object (optional) + }) + .then(() => { + console.log("subscribed successfully"); + subComponents.value = sub; + }) + .catch(function (err) { + baja.error( + "some components failed to subscribe: " + err + ); + }); + }); + } + }); + }); + }); + } + }; + + const updateDbidPosition = (viewer, data) => { + if (!viewer) return; + if (!forgeViewer.value) forgeViewer.value = markRaw(viewer); + const tree = viewer.model.getData().instanceTree; + const fragList = viewer.model.getFragmentList(); + for (let [key, value] of Object.entries(data)) { + const nodebBox = new window.THREE.Box3(); + + // for each fragId on the list, get the bounding box + tree.enumNodeFragments( + value.forge_dbid, + (fragId) => { + const fragbBox = new window.THREE.Box3(); + fragList.getWorldBounds(fragId, fragbBox); + nodebBox.union(fragbBox); // create a unifed bounding box + }, + true + ); + subscribeData.value[key].device_coordinate_3d = viewer.worldToClient( + nodebBox.getCenter() + ); + subscribeData.value[key].is_show = viewer.isNodeVisible(value.forge_dbid); + } + }; + + const fitToView = () => { + if(!searchParams.value.camera_position) return + const { x, y, z } = JSON.parse(searchParams.value.camera_position); + const newPosition = new THREE.Vector3(x, y, z); //!<<< 相机的新位置 + + const { + x: x1, + y: y1, + z: z1, + } = JSON.parse(searchParams.value.target_position); //!<<< 计算新焦点位置 + const newTarget = new THREE.Vector3(x1, y1, z1); //!<<< 焦點的新位置 + + forgeViewer.value.navigation.getCamera().setView({ + position: newPosition.clone(), + target: newTarget.clone(), + }); + setTimeout(() => { + updateDbidPosition(forgeViewer.value, subscribeData.value); + }, 700); + }; + + const hideAllObjects = (instanceTree, filDbids = []) => { + const tree = instanceTree || forgeViewer.value.model?.getInstanceTree(); + const allDbIdsStr = Object.keys(tree.nodeAccess.dbIdToIndex); + for (var i = 0; i < allDbIdsStr.length; i++) { + forgeViewer.value.hide(parseInt(allDbIdsStr[i])); + } + + for (var i = 0; i < filDbids.length; i++) { + forgeViewer.value.show(parseInt(filDbids[i])); + } + fitToView(); + forgeViewer.value.impl.invalidate(true); + }; + + const loadModel = (viewer, urn) => { + return new Promise(function (resolve, reject) { + async function onDocumentLoadSuccess(doc) { + viewer.setGroundShadow(false); + viewer.impl.renderer().setClearAlpha(0); //clear alpha channel + viewer.impl.glrenderer().setClearColor(0xffffff, 0); //set transparent background, color code does not matter + viewer.impl.invalidate(true); //trigger rendering + + const documentNode = await viewer.loadDocumentNode( + doc, + doc.getRoot().getDefaultGeometry() + ); + + resolve(documentNode); + } + function onDocumentLoadFailure(code, message, errors) { + reject({ code, message, errors }); + } + Autodesk.Viewing.Document.load( + "urn:" + urn, + onDocumentLoadSuccess, + onDocumentLoadFailure + ); + }); + }; + + const reloadModal = () => {}; + + watch(visibleDbid, (newValue) => { + forgeViewer.value && + hideAllObjects(forgeViewer.value.model.getData().instanceTree, newValue); + }); + + watch(initialData, (newValue) => { + if (newValue) { + getDevice(searchParams.value.option); + } + }); + + watch( + searchParams, + (newValue) => { + getDevice(newValue.option); + }, + { + deep: true, + } + ); + + return { + subscribeData, + visibleDbid, + updateDbidPosition, + hideAllObjects, + updateForgeViewer, + loadModel, + urn, + updateInitialData, + subComponents, + }; +} diff --git a/src/hooks/forge/useForgeFloor.js b/src/hooks/forge/useForgeFloor.js new file mode 100644 index 0000000..aa2f196 --- /dev/null +++ b/src/hooks/forge/useForgeFloor.js @@ -0,0 +1,115 @@ +import useSelectedFloor from "@/hooks/useSelectedFloor"; +import { watch, ref, inject } from "vue"; +import { useRoute } from "vue-router"; +import useSystemShowData from "@/hooks/useSystemShowData"; + +function useForgeFloor() { + const route = useRoute(); + const levelList = ref([]); + const { selectedFloor } = useSelectedFloor(); + const { subscribeData } = inject("system_deviceList"); + + const forgeViewer = ref(null); + const dataVizExtn = ref(null); + const updateViewerFloor = (viewer, dataVisualization) => { + forgeViewer.value = viewer; + dataVizExtn.value = dataVisualization; + }; + + const findLevels = () => { + forgeViewer.value.model.search( + "layer", + (nodeIds) => { + let levels = []; + const tree = forgeViewer.value.model.getInstanceTree(); + for (let i = 0; i < nodeIds.length; i++) { + const dbId = nodeIds[i]; + const name = tree.getNodeName(dbId); + if (!name || name.includes("<沒有層級>")) continue; + levels.push({ + guid: dbId, + name, + dbId, + extension: { + buildingStory: true, + structure: false, + computationHeight: 0, + groundPlane: false, + hasAssociatedViewPlans: false, + }, + }); + } + levels = levels.sort((a, b) => b.elevation - a.elevation); + console.log(levels); + levelList.value = levels; + }, + (e) => { + console.log(e); + } + ); + }; + + watch(forgeViewer, () => { + findLevels(); + }); + + const hideDbIdFn = () => { + const tree = forgeViewer.value?.model.getInstanceTree(); + const allDbIdsStr = Object.keys(tree.nodeAccess.dbIdToIndex); + for (var i = 0; i < allDbIdsStr.length; i++) { + forgeViewer.value.hide(parseInt(allDbIdsStr[i])); + } + }; + + const { flatSubData } = useSystemShowData(); + const showDbIdFn = () => { + hideDbIdFn(); + flatSubData.value.forEach((value, index) => { + forgeViewer.value.show(value.forge_dbid); + }); + + forgeViewer.value.impl.invalidate(true); + }; + + const showLevels = () => { + if (forgeViewer.value) { + const currentFloorName = + selectedFloor.value?.title?.replaceAll(/U/gi, "") || ""; + + const level = levelList.value.find(({ name }) => + name.includes(currentFloorName) + ); + console.log(currentFloorName, level); + + if (!level) { + forgeViewer.value?.impl.toggleGhosting(true); + forgeViewer.value?.fitToView([forgeViewer.value.model.getRootId()]); + showDbIdFn(); + } else { + showDbIdFn(); + // forgeViewer.value.clearSelection(); + // forgeViewer.value.model.setAllVisibility(0); + forgeViewer.value.impl.toggleGhosting(false); + // forgeViewer.value.impl.toggleGroundShadow(false); + forgeViewer.value.show(level.dbId); + forgeViewer.value.impl.invalidate(true); + forgeViewer.value.fitToView([level.dbId]); + } + } + }; + + watch( + () => route, + (newValue) => { + console.log(newValue); + newValue && showLevels(); + }, + { + deep: true, + } + ); + + return { findLevels, showLevels, updateViewerFloor }; +} + +export default useForgeFloor; diff --git a/src/hooks/forge/useForgeHeatmap.js b/src/hooks/forge/useForgeHeatmap.js new file mode 100644 index 0000000..7ae588c --- /dev/null +++ b/src/hooks/forge/useForgeHeatmap.js @@ -0,0 +1,141 @@ +import { watch, inject, markRaw, ref, computed, onMounted } from "vue"; +import { useRoute } from "vue-router"; +import useHeatmapBarStore from "@/stores/useHeatmapBarStore"; +import useSystemShowData from "@/hooks/useSystemShowData"; + +export default function useForgeHeatmap() { + const route = useRoute(); + const { subscribeData, realtimeData } = inject("system_deviceList"); + + const store = useHeatmapBarStore(); + + const forgeViewer = ref(null); + const dataVizExtn = ref(null); + const updateViewExtension = (viewer, dataVisualization) => { + forgeViewer.value = viewer; + dataVizExtn.value = dataVisualization; + }; + + //create the heatmap + function getSensorValue(device, sensorType, pointData) { + const dev = realtimeData.value.find( + ({ device_number }) => device_number === device.id + ); + if (dev) { + const [min, max] = store.heatmapConfig?.range; + const point = dev.data.find(({ point }) => point === route.query?.gas); + console.log(9, device, dev, point, (point?.value - min || 0) / max); + + return Math.random(); + } + return 0; + } + + const { flatSubData } = useSystemShowData(); + + const data = computed(() => + flatSubData.value?.map((d) => { + const pointsMap = d.points ? Object.fromEntries(d.points.map(({ point, value }) => [point, 0])) : {}; + return { + ...d, + ...pointsMap, + }; + }) + ); + + watch( + () => realtimeData, + () => { + dataVizExtn.value && + Object.keys(dataVizExtn.value?.surfaceShading)?.length && + dataVizExtn.value.updateSurfaceShading(getSensorValue); + }, + { + deep: true, + } + ); + + const createHeatMap = async () => { + if (route.query?.gas === "all" || !route.query?.gas || !dataVizExtn.value) return; + const heatMapName = `iot_heatmap_${route.query?.gas}`; + console.log("createHeatMap", heatMapName); + const { + SurfaceShadingData, + SurfaceShadingPoint, + SurfaceShadingNode, + SurfaceShadingGroup, + } = Autodesk.DataVisualization.Core; + const shadingGroup = new SurfaceShadingGroup(`${heatMapName}`); + const rooms = new Map(); + + const roomSet = new Set(data.value.filter(({ device_coordinate_3d }) => device_coordinate_3d).map(({ room_dbid }) => room_dbid)); + // 每個room是一個node + [...roomSet].forEach((roomDbId) => { + if (!roomDbId) { + return; + } + const room = new SurfaceShadingNode(`room_${roomDbId}`, roomDbId); + + //相同room內的設備 + data.value + .filter(({ room_dbid }) => room_dbid === roomDbId) + .forEach( + ({ + device_number: id, + device_coordinate_3d: position, + sensorTypes, + }) => + room.addPoint(new SurfaceShadingPoint(id, position, sensorTypes)) + ); + + shadingGroup.addChild(room); + }); + + // data.value.forEach( + // ({ + // device_number: id, + // room_dbid: roomDbId, + // device_coordinate_3d: position, + // sensorTypes, + // }) => { + // if (!id || roomDbId == -1 || !roomDbId) { + // return; + // } + // if (!rooms.has(roomDbId)) { + // const room = new SurfaceShadingNode(id, roomDbId); + // shadingGroup.addChild(room); + // rooms.set(roomDbId, room); + // } + // const room = rooms.get(roomDbId); + // room.addPoint(new SurfaceShadingPoint(id, position, route.query.gas)); + // } + // ); + const shadingData = new SurfaceShadingData(`${heatMapName}`); + shadingData.addChild(shadingGroup); + shadingData.initialize(forgeViewer.value?.model); + await dataVizExtn.value.setupSurfaceShading( + forgeViewer.value.model, + shadingData + ); + dataVizExtn.value.registerSurfaceShadingColors( + route.query?.gas, + store.heatmapConfig?.color + ); + dataVizExtn.value.renderSurfaceShading( + heatMapName, + route.query?.gas, + getSensorValue + ); + }; + + watch( + data, + (newValue, oldValue) => { + dataVizExtn.value?.removeSurfaceShading(); + createHeatMap(route.query.gas); + }, + { deep: true } + ); + + return { createHeatMap, updateViewExtension }; +} diff --git a/src/hooks/forge/useForgeSprite.js b/src/hooks/forge/useForgeSprite.js new file mode 100644 index 0000000..d0abad8 --- /dev/null +++ b/src/hooks/forge/useForgeSprite.js @@ -0,0 +1,222 @@ +import { watch, inject, markRaw, ref, computed, provide } from "vue"; +import useAlarmStore from "@/stores/useAlarmStore"; +import hexToRgb from "@/util/hexToRgb"; +import useSystemShowData from "@/hooks/useSystemShowData"; +import useForgeHeatmap from "./useForgeHeatmap"; +import useForgeFloor from "./useForgeFloor"; + +export default function useForgeSprite() { + const { subscribeData } = inject("system_deviceList"); + const { getCurrentInfoModalData, clearSelectedDeviceInfo, selected_dbid } = + inject("system_selectedDevice"); + const forgeViewer = ref(null); + const dataVizExtn = ref(null); + let lastClickedDbId = null; + + const { createHeatMap, updateViewExtension } = useForgeHeatmap(); + const { updateViewerFloor } = useForgeFloor(); + + const setCameraPosition = (position, target) => { + // 使用 THREE.Vector3 定義位置與焦點 + const newPosition = new THREE.Vector3(position.x, position.y, position.z); + const newTarget = new THREE.Vector3(target.x, target.y, target.z); + + // 設定攝影機的新位置與焦點 + forgeViewer.value.navigation.setView(newPosition, newTarget); + + // 確保 Home 視角 + forgeViewer.value.autocam.setCurrentViewAsHome(true); + }; + + const updateDataVisualization = async (viewer) => { + if (!forgeViewer.value) { + forgeViewer.value = markRaw(viewer); + } + + const dataVisualization = await viewer.loadExtension( + "Autodesk.DataVisualization" + ); + dataVizExtn.value = markRaw(dataVisualization); + updateViewExtension(markRaw(viewer), markRaw(dataVisualization)); + updateViewerFloor(markRaw(viewer), markRaw(dataVisualization)); + }; + + function onSpriteClicked(event) { + event.hasStopped = true; + + if (event.type === Autodesk.DataVisualization.Core.MOUSE_CLICK_OUT) return; + + const data = subscribeData.value.find( + (d) => + d.spriteDbId === event.dbId || d.forge_dbid === event.dbIdArray?.[0] + ); + console.log("onSpriteClicked", event.target); + console.log("onSpriteClicked", data); + // modalContent.value = data; + // debugger; + if (data) { + getCurrentInfoModalData( + event, + { left: event.target.startX, top: event.target.startY }, + data + ); + } + } + + const { flatSubData } = useSystemShowData(); + + // 創建 sprites + const createSprites = async () => { + if (dataVizExtn.value) { + dataVizExtn.value.removeAllViewables(); + const DataVizCore = Autodesk.DataVisualization.Core; + const viewableType = DataVizCore.ViewableType.SPRITE; + let spriteColor = new THREE.Color(0xffffff); + const BASEURL = import.meta.env.VITE_FORGE_BASEURL; + const spriteIconUrl = `${BASEURL}/hotspot.svg`; + const style = new DataVizCore.ViewableStyle( + viewableType, + spriteColor, + spriteIconUrl + ); + const viewableData = new DataVizCore.ViewableData(); + viewableData.spriteSize = 24; // Sprites as points of size 24 x 24 pixels + flatSubData.value?.forEach((d, index) => { + if (d.device_coordinate_3d) { + const position = d.device_coordinate_3d; + style.color = new THREE.Color(hexToRgb(d.device_normal_color)); + const viewable = new DataVizCore.SpriteViewable( + position, + style, + d.spriteDbId + ); + viewableData.addViewable(viewable); + } + }); + // await viewableData.finish(); + // dataVizExtn.value.addViewables(viewableData); + // console.log(dataVizExtn.value); + viewableData.finish().then( + () => { + dataVizExtn.value.addViewables(viewableData); + createHeatMap(); + }, + (error) => { + console.log(error); + } + ); + } + }; + + watch( + () => flatSubData, + () => { + if (forgeViewer.value?.isLoadDone()) { + createSprites(); + showSubSystemObjects(); + } + }, + { + deep: true, + } + ); + + watch( + () => selected_dbid, + () => { + if (forgeViewer.value?.isLoadDone()) { + cardfitToView(selected_dbid.value); + } + }, + { + immediate: true, + deep: true, + } + ); + + const forgeClickListener = () => { + console.log("監聽forge"); + + forgeViewer.value.addEventListener( + Autodesk.DataVisualization.Core.MOUSE_CLICK, + onSpriteClicked + ); + forgeViewer.value.addEventListener( + Autodesk.DataVisualization.Core.MOUSE_CLICK_OUT, + onSpriteClicked + ); + }; + + const cardfitToView = async ([forge_dbid, spriteDbId]) => { + try { + // 相機調整 + const nav = forgeViewer.value.navigation; + const camera = nav.getCamera(); + forgeViewer.value.fitToView([forge_dbid], null, true); + const direction = new THREE.Vector3(); + camera.getWorldDirection(direction); + const distanceBack = 30; + camera.position.add(direction.multiplyScalar(-distanceBack)); + const target = nav.getTarget(); + const fov = nav.getVerticalFov(); + nav.setRequestTransition(true, camera.position, target, fov); + + if (lastClickedDbId !== null && lastClickedDbId !== spriteDbId) { + dataVizExtn.value.invalidateViewables([lastClickedDbId], (viewable) => { + return { + scale: 1.0, // 恢復為 scale 1 + }; + }); + } + + dataVizExtn.value.invalidateViewables([spriteDbId], (viewable) => { + return { + scale: 2.0, // 設置為 scale 2 + }; + }); + + lastClickedDbId = spriteDbId; + } catch (error) { + console.error("Error in cardfitToView:", error); + } + }; + + const hideAllObjects = () => { + const tree = forgeViewer.value.model.getInstanceTree(); + const allDbIdsStr = Object.keys(tree.nodeAccess.dbIdToIndex); + for (var i = 0; i < allDbIdsStr.length; i++) { + forgeViewer.value.hide(parseInt(allDbIdsStr[i])); + } + }; + + const showSubSystemObjects = () => { + hideAllObjects(); + flatSubData.value.forEach((value, index) => { + forgeViewer.value.show(value.forge_dbid); + }); + + forgeViewer.value.impl.invalidate(true); + }; + + const clear = () => { + forgeViewer.value.removeEventListener( + Autodesk.DataVisualization.Core.MOUSE_CLICK, + onSpriteClicked + ); + forgeViewer.value.removeEventListener( + Autodesk.DataVisualization.Core.MOUSE_CLICK_OUT, + onSpriteClicked + ); + forgeViewer.value.tearDown(); + }; + + return { + createSprites, + setCameraPosition, + updateDataVisualization, + showSubSystemObjects, + forgeClickListener, + clear, + cardfitToView, + }; +} diff --git a/src/hooks/useActiveBtn.js b/src/hooks/useActiveBtn.js new file mode 100644 index 0000000..9691ab2 --- /dev/null +++ b/src/hooks/useActiveBtn.js @@ -0,0 +1,41 @@ +import { computed } from "@vue/reactivity"; +import { ref } from "vue"; +export default function useActiveBtn(type = "single") { + // default buttons + const items = ref([]); + + const setItems = (btnGroup) => { + items.value = btnGroup; + }; + + const selectedBtn = computed(() => { + if (type === "single") { + return items.value?.find((d) => { + return d.active + }); + } else if (type === "multiple") { + return items.value?.filter(({ active }) => active); + } + }); + + // change active button + const changeActiveBtn = (item) => { + if (type === "single") { + // 先將全部變成false + const newItems = Object.assign(items.value).map((it) => ({ + ...it, + active: item.key === it.key, + })); + items.value = newItems; + } else if (type === "multiple") { + // 先將全部變成false + const newItems = Object.assign(items.value).map((it) => ({ + ...it, + active: item.key === it.key ? !item.active : it.active, + })); + items.value = newItems; + } + }; + + return { items, changeActiveBtn, setItems, selectedBtn }; +} diff --git a/src/hooks/useDashboardOption.js b/src/hooks/useDashboardOption.js new file mode 100644 index 0000000..ad2117a --- /dev/null +++ b/src/hooks/useDashboardOption.js @@ -0,0 +1,20 @@ +import { inject, watch } from "vue"; + +export default function useDashboardOption( + SetFn, + injectData = "dashboard_items" +) { + const { initialData } = inject(injectData); + + watch(initialData, (newValue) => { + const data = newValue.points[1].values.filter(({ value }) => value !== 0); + SetFn( + data.map(({ value, text }, index) => ({ + title: text, + key: `option_${value}`, + active: index === 0, + typeOption: value, + })) + ); + }); +} diff --git a/src/hooks/useFormErrorMessage.js b/src/hooks/useFormErrorMessage.js new file mode 100644 index 0000000..4d40f21 --- /dev/null +++ b/src/hooks/useFormErrorMessage.js @@ -0,0 +1,50 @@ +import { onMounted, ref } from "vue"; + +export default function useFormErrorMessage(scheme) { + const formErrorMsg = ref({}); + + onMounted(() => { + // formErrorMsg.value = scheme + if (scheme) { + formErrorMsg.value = Object.fromEntries( + Object.keys(scheme.fields).map((f) => [f, ""]) + ); + } + }); + + const handleSubmit = (scheme, value) => { + return new Promise((resolve, reject) => { + scheme + .validate(value, { + abortEarly: false, + }) + .then((res) => resolve(res)) + .catch((err) => { + let errorMsg = Object.fromEntries( + err.inner.map((e) => [e.path, e.message]) + ); + formErrorMsg.value = errorMsg; + reject(errorMsg); + }); + }); + }; + + const handleErrorReset = () => { + // formErrorMsg.value = Object.fromEntries( + // Object.keys(scheme.fields).map((f) => [f, ""]) + // ); + let resetMsg = {}; + for (let key in formErrorMsg.value) { + resetMsg[key] = ""; + } + formErrorMsg.value = resetMsg; + }; + + const updateScheme = (scheme) => { + formErrorMsg.value = Object.fromEntries( + Object.keys(scheme.fields).map((f) => [f, ""]) + ); + }; + + return { formErrorMsg, handleSubmit, handleErrorReset, updateScheme }; +} diff --git a/src/hooks/useGetCookie.js b/src/hooks/useGetCookie.js new file mode 100644 index 0000000..6d150b0 --- /dev/null +++ b/src/hooks/useGetCookie.js @@ -0,0 +1,8 @@ +export default function getCookie(cookieName) { + let cookie = {}; + document.cookie.split(";").forEach(function (el) { + let [key, value] = el.split("="); + cookie[key.trim()] = value; + }); + return cookie[cookieName]; +} diff --git a/src/hooks/useGetDevice.js b/src/hooks/useGetDevice.js new file mode 100644 index 0000000..a717fe6 --- /dev/null +++ b/src/hooks/useGetDevice.js @@ -0,0 +1,31 @@ +import { ref, computed } from "vue"; +import instance from "@/util/request"; +import { GET_DEVICELIST_API } from "@/constant"; + +export default function useGetDevice() { + const deviceList = ref(null); + //取得設備列表 + const getDeviceList = async ({ + building_tag, + main_system_tag, + sub_system_tag, + floor_tag, + }) => { + const res = await instance.post(GET_DEVICELIST_API, { + building_tag, + floor_tag, + sub_system_tag, + }); + + let devices = [] + res.data.data.forEach(({device_list})=>{ + devices = [...devices, ...device_list] + }) + deviceList.value = devices; + }; + + return { + deviceList, + getDeviceList, + }; +} diff --git a/src/hooks/useSearchParam.js b/src/hooks/useSearchParam.js new file mode 100644 index 0000000..c971a02 --- /dev/null +++ b/src/hooks/useSearchParam.js @@ -0,0 +1,29 @@ +// 取得目前的params +import { computed } from "vue"; +import { useRouter, useRoute } from "vue-router"; + +export default function useSearchParam() { + const router = useRouter(); + const route = useRoute(); + + const searchParams = computed(() => route.query); + + // 排除null + + const deleteNull = (query) => { + let newQuery = {}; + for (let key in query) { + if (Array.isArray(query[key]) && query[key].length === 0) continue; + if (query[key]) { + newQuery[key] = query[key]; + } + } + return newQuery; + }; + + const changeParams = (query) => { + router.push({ path: route.path, query: deleteNull(query) }); + }; + + return { searchParams, changeParams }; +} diff --git a/src/hooks/useSelectedFloor.js b/src/hooks/useSelectedFloor.js new file mode 100644 index 0000000..986c62d --- /dev/null +++ b/src/hooks/useSelectedFloor.js @@ -0,0 +1,17 @@ +import { useRoute } from "vue-router"; +import { computed, inject, ref, watch } from "vue"; + +function useSelectedFloor() { + const { currentFloor } = inject("system_deviceList"); + const route = useRoute(); + const selectedFloor = computed(() => + currentFloor.value?.find(({ key }) => key == route.params.floor_id) + ); + + return { + selectedFloor, + currentFloor, + }; +} + +export default useSelectedFloor; diff --git a/src/hooks/useSystemShowData.js b/src/hooks/useSystemShowData.js new file mode 100644 index 0000000..97f5457 --- /dev/null +++ b/src/hooks/useSystemShowData.js @@ -0,0 +1,27 @@ +import useSelectedFloor from "@/hooks/useSelectedFloor"; +import { computed, inject, watch } from "vue"; + +function useSystemShowData() { + const { data } = inject("system_deviceList"); + const { selectedFloor } = useSelectedFloor(); + + const showData = computed(() => + selectedFloor.value?.key === "main" + ? data.value + : data.value.filter( + ({ floor_guid }) => floor_guid === selectedFloor.value?.key + ) || [] + ); + + const flatSubData = computed(() => { + let items = []; + showData.value.forEach((device) => { + items = [...items, ...device.device_list]; + }); + return items; + }); + + return { showData, flatSubData }; +} + +export default useSystemShowData; diff --git a/src/main.js b/src/main.js new file mode 100644 index 0000000..1c847f2 --- /dev/null +++ b/src/main.js @@ -0,0 +1,60 @@ +import "./assets/index.css"; +import "./assets/main.css"; +// import "./assets/table.css"; +import "./assets/btn.css"; +import "./assets/pagination.css"; + +import { createApp } from "vue"; +import { createI18n } from "vue-i18n"; +import tw from "./config/tw.json"; +import cn from "./config/cn.json"; +import us from "./config/us.json"; +import Antd from "ant-design-vue"; +import { createPinia } from "pinia"; +import App from "./App.vue"; +import router from "./router"; +import "virtual:svg-icons-register"; +// 引入项目中的全部全局组件 +import SvgIcon from "@/components/svgIcon.vue"; +import library from "./fontawsomeIconRegister"; +import "flag-icons/css/flag-icons.min.css"; + +/* import font awesome icon component */ +import { FontAwesomeIcon } from "@fortawesome/vue-fontawesome"; + +import { focusPlugin } from "@/directives/focusPlugin"; +import { draggable } from "@/directives/draggable"; +const messages = { + tw, + cn, + us, +}; + +const storedLanguage = localStorage.getItem("CviLanguage") || "us"; + +const i18n = createI18n({ + legacy: false, + locale: storedLanguage, + fallbackLocale: 'us', + messages, +}); +const app = createApp(App); +app.use(createPinia()); +app.use(router); +app.use(Antd); +app.use(i18n); + +// 组装成一个对象 +const allGlobalComponents = { SvgIcon, FontAwesomeIcon }; +const globalComponent = { + install(app) { + // 循环注册所有的全局组件 + Object.keys(allGlobalComponents).forEach((componentName) => { + app.component(componentName, allGlobalComponents[componentName]); + }); + }, +}; +app.use(globalComponent); +app.use(focusPlugin); +app.use(draggable); +app.mount("#app"); diff --git a/src/router/index.js b/src/router/index.js new file mode 100644 index 0000000..d3cf4b4 --- /dev/null +++ b/src/router/index.js @@ -0,0 +1,128 @@ +import { createRouter, createWebHashHistory } from "vue-router"; +import Dashboard from "@/views/dashboard/Dashboard.vue"; +import History from "@/views/history/History.vue"; +import Operation from "@/views/operation/Operation.vue"; +import GraphManagement from "@/views/graphManagement/GraphManagement.vue"; +import AccountManagement from "@/views/accountManagement/AccountManagement.vue"; +import AssetManagement from "@/views/AssetManagement/AssetManagement.vue"; +import AlertManagement from "@/views/alert/AlertManagement.vue"; +import EnergyManagement from "@/views/energyManagement/EnergyManagement.vue"; +import SettingManagement from "@/views/setting/SettingManagement.vue"; +import Login from "@/views/login/Login.vue"; +import useUserInfoStore from "@/stores/useUserInfoStore"; +import useGetCookie from "@/hooks/useGetCookie"; +import System from "@/views/system/System.vue"; +import SystemFloor from "@/views/system/SystemFloor.vue"; + +import Test from "@/views/Test.vue"; +import SystemMain from "@/views/system/SystemMain.vue"; + +const router = createRouter({ + history: createWebHashHistory(import.meta.env.BASE_URL), + // linkActiveClass: "is-active", + routes: [ + { + path: "/login", + name: "login", + component: Login, + }, + { + path: "/dashboard", + index: true, + name: "dashboard", + component: Dashboard, + }, + { + path: "/system/:main_system_id/:sub_system_id", + name: "system", + component: System, + children: [ + { + path: ":floor_id", + name: "sub_system", + component: SystemMain, + }, + ], + }, + { + path: "/historyData", + name: "history", + component: History, + }, + { + path: "/operation", + name: "operation", + component: Operation, + }, + { + path: "/graphManagement", + name: "graphManagement", + component: GraphManagement, + }, + { + path: "/accountManagement", + name: "accountManagement", + component: AccountManagement, + }, + { + path: "/assetManagement", + name: "assetManagement", + component: AssetManagement, + }, + { + path: "/alert", + name: "alert", + component: AlertManagement, + }, + { + path: "/energyManagement/:main_system_id/:sub_system_id/:type", + name: "energyManagement", + component: EnergyManagement, + }, + { + path: "/setting/:main_system_id/:sub_system_id/:type", + name: "setting", + component: SettingManagement, + }, + { + path: "/mytestfile/mjm", + name: "mytestfile", + component: Test, + }, + ], +}); + +router.beforeEach(async (to, from, next) => { + console.log("route", to, location, document.cookie); + // redirect to login page if not logged in and trying to access a restricted page + const publicPages = ["/login", "/"]; + const authRequired = !publicPages.includes(to.path); + const auth = useUserInfoStore(); + const token = useGetCookie("JWT-Authorization"); + const user_name = useGetCookie("user_name"); + + if (to.path === "/logout") { + document.cookie = "JWT-Authorization=; Max-Age=0"; + document.cookie = "user_name=; Max-Age=0"; + auth.user.token = ""; + auth.user.user_name = ""; + window.location.reload(); + next({ path: "/login" }); + } + + if ((authRequired && !token) || to.path === "/") { + auth.user.token = ""; + next({ path: "/login" }); + } else if (!authRequired) { + document.cookie = "JWT-Authorization=; Max-Age=0"; + document.cookie = "user_name=; Max-Age=0"; + auth.user.token = ""; + auth.user.user_name = ""; + } else { + auth.user.token = token; + auth.user.user_name = user_name; + } + next(); +}); + +export default router; diff --git a/src/stores/useAlarmStore.js b/src/stores/useAlarmStore.js new file mode 100644 index 0000000..7624b7d --- /dev/null +++ b/src/stores/useAlarmStore.js @@ -0,0 +1,63 @@ +import { defineStore } from "pinia"; +import { onMounted, ref } from "vue"; +import dayjs from "dayjs"; +import { getAllDevice } from "@/apis/building"; + +const useAlarmStore = defineStore("alarmData", () => { + let timer = null; + const alarmData = ref([]); + const allDeviceList = ref([]); + + const getFormateDate = (datetime, format_rule = "YYYY-MM-DD HH:mm") => { + return dayjs(datetime).format(format_rule); + }; + // get data from baja + const getAlarmDataFromBaja = () => { + const alarms = []; + const sampleDeviceNames = ["AA", "DeviceB", "DeviceC", "DeviceD"]; + const sampleMsgs = [ + "Over temperature", + "Power failure", + "Sensor malfunction", + "Connection lost", + ]; + + for (let i = 0; i < 3; i++) { + const timestamp = Date.now() - Math.floor(Math.random() * 100000000); + + const device_number = `NTPC_F1_Dust_EM_U9F_NA_AD_AA${Math.floor(Math.random() * 5) + 1}`; + + alarms.push({ + uuid: `uuid-${i+1}`, + building_tag: "U9F", + timestamp_date: new Date(timestamp).toLocaleDateString("en-US"), + timestamp_time: new Date(timestamp).toLocaleTimeString("en-US"), + alarmClass: `Class ${Math.floor(Math.random() * 3) + 1}`, + device_number, + full_name: `AA${Math.floor(Math.random() * 5) + 1}`, + msg: sampleMsgs[Math.floor(Math.random() * sampleMsgs.length)], + sourceState: "offnormal", + normalTime: new Date(timestamp).toLocaleString("en-US"), + ackState: "Unacked", + ackedTime: + Math.random() > 0.5 + ? new Date(timestamp).toLocaleString("en-US") + : null, + }); + } + + alarmData.value = alarms; + }; + + const getDevice = async () => { + const res = await getAllDevice(); + allDeviceList.value = res.data; + }; + + onMounted(() => { + getDevice(); + }); + + return { getAlarmDataFromBaja, alarmData }; +}); +export default useAlarmStore; diff --git a/src/stores/useBuildingStore.js b/src/stores/useBuildingStore.js new file mode 100644 index 0000000..94d2787 --- /dev/null +++ b/src/stores/useBuildingStore.js @@ -0,0 +1,103 @@ +import { defineStore } from "pinia"; +import { ref, computed, watch } from "vue"; +import { useRoute } from "vue-router"; +import { getBuildings } from "@/apis/building"; +import { getAssetFloorList, getDepartmentList } from "@/apis/asset"; + +const useBuildingStore = defineStore("buildingInfo", () => { + // 狀態定義 + const buildings = ref([]); + const selectedBuilding = ref(null); + const floorList = ref([]); + const deptList = ref([]); + const mainSubSys = ref([]); + + // 計算屬性 + const mainSys = computed(() => + mainSubSys.value.map(({ main_system_tag, full_name }) => ({ + main_system_tag, + full_name, + })) + ); + + const subSys = computed(() => { + let subPages = []; + mainSubSys.value.forEach(({ main_system_tag, history_Sub_systems }) => { + subPages = [ + ...subPages, + ...history_Sub_systems.map((Sub) => ({ + ...Sub, + main_system_tag, + key: Sub.sub_system_tag, + })), + ]; + }); + return subPages; + }); + + const route = useRoute(); + const selectedSystem = computed(() => { + if (route.params.sub_system_id && subSys.value.length > 0) { + return subSys.value.find((s) => s.key === route.params.sub_system_id); + } + return null; + }); + + // 獲取所有建築物 + const fetchBuildings = async () => { + const res = await getBuildings(); + buildings.value = res.data; + if (res.data.length > 0 && !selectedBuilding.value) { + const storedBuilding = JSON.parse(localStorage.getItem("CviBuilding")); + selectedBuilding.value = storedBuilding || res.data[0]; // 預設選第一個建築 + } + }; + + // 獲取樓層資料 + const fetchFloorList = async (building_guid) => { + const res = await getAssetFloorList(building_guid); + floorList.value = res.data[0]?.floors.map((d) => ({ + ...d, + title: d.full_name, + key: d.floor_guid, + })) || []; + }; + + // 獲取部門資料 + const fetchDepartmentList = async () => { + const res = await getDepartmentList(); + deptList.value = res.data.map((d) => ({ + ...d, + title: d.name, + key: d.id, + })) || []; + }; + + // 當 selectedBuilding 改變時,更新 floorList 和 deptList + watch(selectedBuilding, async (newBuilding) => { + if (newBuilding) { + await Promise.all([fetchFloorList(newBuilding.building_guid), fetchDepartmentList()]); + } + }); + + // 初始化資料 + const initialize = async () => { + await fetchBuildings(); + }; + + return { + buildings, + selectedBuilding, + floorList, + deptList, + mainSubSys, + mainSys, + subSys, + selectedSystem, + fetchBuildings, + fetchFloorList, + fetchDepartmentList, + initialize, + }; +}); +export default useBuildingStore; diff --git a/src/stores/useForgeDbIdStore.js b/src/stores/useForgeDbIdStore.js new file mode 100644 index 0000000..d2ace16 --- /dev/null +++ b/src/stores/useForgeDbIdStore.js @@ -0,0 +1,13 @@ +import { ref, computed } from 'vue' +import { defineStore } from 'pinia' + +const useForgeDbIdStore = defineStore('dbId', () => { + const dbId = ref([]) + function getDbIdStore(id) { + dbId.value = [id] + } + + return { dbId, getDbIdStore } +}) + +export default useForgeDbIdStore \ No newline at end of file diff --git a/src/stores/useHeatmapBarStore.js b/src/stores/useHeatmapBarStore.js new file mode 100644 index 0000000..6533620 --- /dev/null +++ b/src/stores/useHeatmapBarStore.js @@ -0,0 +1,31 @@ +import { defineStore } from "pinia"; +import axios from "axios"; +import { useRoute } from "vue-router"; +import { computed, ref, onMounted } from "vue"; + +const useHeatmapBarStore = defineStore("heatmap", () => { + const route = useRoute(); + + const allHeatMaps = ref({}); + const heatmapConfig = computed(() => allHeatMaps.value[route.query?.gas]); + + const getConfig = async () => { + const api = + import.meta.env.MODE === "production" + ? "/dist/config.json" + : "/config.json"; + const res = await axios.get(api); + console.log(res); + allHeatMaps.value = res.data.heatmap; + }; + + onMounted(() => { + getConfig(); + }); + + const heat_bar_isShow = computed(() => Boolean(heatmapConfig.value)); + + return { heatmapConfig, heat_bar_isShow }; +}); + +export default useHeatmapBarStore; diff --git a/src/stores/useUserInfoStore.js b/src/stores/useUserInfoStore.js new file mode 100644 index 0000000..b552ade --- /dev/null +++ b/src/stores/useUserInfoStore.js @@ -0,0 +1,19 @@ +import { defineStore } from "pinia"; +import { ref } from "vue"; + +const useUserInfoStore = defineStore("userInfo", () => { + const user = ref({ + token: "", + expires: 0, + user_name:"", + }); + + const auth_page = ref([]); + const updateAuthPage = (data) => { + auth_page.value = data; + }; + + return { user, auth_page, updateAuthPage }; +}); + +export default useUserInfoStore; diff --git a/src/util/apiHandler.js b/src/util/apiHandler.js new file mode 100644 index 0000000..788c2d3 --- /dev/null +++ b/src/util/apiHandler.js @@ -0,0 +1,11 @@ +const apihandler = (code, successData, errorData, cb = null) => { + return new Promise((resolve, reject) => { + if (code === "0000") { + cb && cb(successData); + resolve({ data: successData, isSuccess: true }); + } + resolve({ ...errorData, isSuccess: false }); + }); +}; + +export default apihandler; diff --git a/src/util/clearChart.js b/src/util/clearChart.js new file mode 100644 index 0000000..b8998f7 --- /dev/null +++ b/src/util/clearChart.js @@ -0,0 +1,13 @@ +const clearChart = (chart) => { + chart.setOption({ + legend: { + data: [], + }, + series: chart.getOption().series.map((d) => ({ + ...d, + data: [], + })), + }); +}; + +export default clearChart; diff --git a/src/util/downloadExcel.js b/src/util/downloadExcel.js new file mode 100644 index 0000000..38c5025 --- /dev/null +++ b/src/util/downloadExcel.js @@ -0,0 +1,42 @@ +const BASEURL = import.meta.env.VITE_API_BASEURL; + +export default function downloadExcel(res) { + let disposition = res.headers.get("Content-Disposition"); + let sDowName = ""; + if (disposition) { + // 解析出名稱 + sDowName = disposition.split(/filename\*=(?:utf-8'')?(.*)/gi)[1]; + if (sDowName.toLowerCase().startsWith("utf-8''")) + sDowName = decodeURIComponent(sDowName.replace(/utf-8''/i, "")); + else sDowName = sDowName.replace(/['"]/g, ""); + sDowName = decodeURIComponent(sDowName); + } + + let blob = res.data; + + if (window.navigator.msSaveOrOpenBlob) { + navigator.msSaveBlob(blob, sDowName); + } else { + const link = document.createElement("a"); + link.href = URL.createObjectURL(blob); + link.download = sDowName; + document.body.appendChild(link); + link.click(); + // 釋放內存 + window.URL.revokeObjectURL(link.link); + document.body.removeChild(link); + } +} + +export const downloadExcelByHref = async (url, filename) => { + const response = await fetch(url); + const blob = await response.blob(); + + const link = document.createElement("a"); + link.href = URL.createObjectURL(blob); + link.setAttribute("download", filename); + // link.setAttribute("target", "_blank"); + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); +}; diff --git a/src/util/getModalPosition.js b/src/util/getModalPosition.js new file mode 100644 index 0000000..fa12076 --- /dev/null +++ b/src/util/getModalPosition.js @@ -0,0 +1,18 @@ +export default function getModalPosition(viewer, dbid) { + const tree = viewer.model.getData().instanceTree; + const fragList = viewer.model.getFragmentList(); + const nodebBox = new window.THREE.Box3(); + + // for each fragId on the list, get the bounding box + tree.enumNodeFragments( + dbid, + (fragId) => { + const fragbBox = new window.THREE.Box3(); + fragList.getWorldBounds(fragId, fragbBox); + nodebBox.union(fragbBox); // create a unifed bounding box + }, + true + ); + const pos = viewer.worldToClient(nodebBox.center()); + return { left: Math.floor(pos.x), top: Math.floor(pos.y) }; +} diff --git a/src/util/hexToRgb.js b/src/util/hexToRgb.js new file mode 100644 index 0000000..820f4fe --- /dev/null +++ b/src/util/hexToRgb.js @@ -0,0 +1,12 @@ +//hex -> rgbsensor_circle +export default function hexToRgb(hex) { + return ( + "rgb(" + + parseInt("0x" + hex.slice(1, 3)) + + "," + + parseInt("0x" + hex.slice(3, 5)) + + "," + + parseInt("0x" + hex.slice(5, 7)) + + ")" + ); +} diff --git a/src/util/request.js b/src/util/request.js new file mode 100644 index 0000000..9c3a0e6 --- /dev/null +++ b/src/util/request.js @@ -0,0 +1,99 @@ +import useGetCookie from "@/hooks/useGetCookie"; +import axios from "axios"; +const BASEURL = import.meta.env.VITE_API_BASEURL; + +const instance = axios.create({ + baseURL: BASEURL, + timeout: -1, + headers: { Authorization: `Bearer ${useGetCookie("JWT-Authorization")}` }, +}); + +// Add a request interceptor +instance.interceptors.request.use( + function (config) { + // Do something before request is sent + const token = useGetCookie("JWT-Authorization"); + config.headers = { + Authorization: `Bearer ${token}`, + }; + return config; + }, + function (error) { + // Do something with request error + return Promise.reject(error); + } +); + +// Add a response interceptor +instance.interceptors.response.use( + function (response) { + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + const { status, data, headers } = response; + + return { + ...data, + }; + }, + function (error) { + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + if (error.response && error.response.status === 401) { + window.location.href = "/"; + } + return Promise.reject(error); + } +); + +export const fileInstance = axios.create({ + baseURL: BASEURL, + timeout: -1, + headers: { Authorization: `Bearer ${useGetCookie("JWT-Authorization")}` }, +}); + +// Add a request interceptor +fileInstance.interceptors.request.use( + function (config) { + // Do something before request is sent + const token = useGetCookie("JWT-Authorization"); + config.headers = { + Authorization: `Bearer ${token}`, + }; + return config; + }, + function (error) { + // Do something with request error + return Promise.reject(error); + } +); + +// Add a response interceptor +fileInstance.interceptors.response.use( + async function (response) { + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + const { status, data, headers } = response; + + console.log("@@", status, data, headers); + + let errorData = {}; + if (headers["content-type"] === "application/json; charset=utf-8") { + const blob = new Blob([data]); + const blobText = await blob.text(); + errorData = JSON.parse(blobText); + } + + return headers["content-disposition"] + ? { data, code: "0000", headers } + : { + ...errorData, + }; + }, + function (error) { + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + return Promise.reject(error); + } +); + +export default instance; diff --git a/src/util/showChartLoading.js b/src/util/showChartLoading.js new file mode 100644 index 0000000..3499021 --- /dev/null +++ b/src/util/showChartLoading.js @@ -0,0 +1,9 @@ +const showChartLoading = (chart) => { + chart.showLoading({ + text: "Loading...", + color: "#8ee894", + maskColor: "rgba(12, 21, 54, 0.7)", + }); +}; + +export default showChartLoading; diff --git a/src/views/AssetManagement/AssetManagement.vue b/src/views/AssetManagement/AssetManagement.vue new file mode 100644 index 0000000..acf2863 --- /dev/null +++ b/src/views/AssetManagement/AssetManagement.vue @@ -0,0 +1,66 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetMainList.vue b/src/views/AssetManagement/components/AssetMainList.vue new file mode 100644 index 0000000..f0068c7 --- /dev/null +++ b/src/views/AssetManagement/components/AssetMainList.vue @@ -0,0 +1,134 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetMainListAddModal.vue b/src/views/AssetManagement/components/AssetMainListAddModal.vue new file mode 100644 index 0000000..2fd6fa9 --- /dev/null +++ b/src/views/AssetManagement/components/AssetMainListAddModal.vue @@ -0,0 +1,107 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetSubList.vue b/src/views/AssetManagement/components/AssetSubList.vue new file mode 100644 index 0000000..5708cb6 --- /dev/null +++ b/src/views/AssetManagement/components/AssetSubList.vue @@ -0,0 +1,150 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetSubListAddModal.vue b/src/views/AssetManagement/components/AssetSubListAddModal.vue new file mode 100644 index 0000000..1dc080e --- /dev/null +++ b/src/views/AssetManagement/components/AssetSubListAddModal.vue @@ -0,0 +1,171 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTable.vue b/src/views/AssetManagement/components/AssetTable.vue new file mode 100644 index 0000000..a8d6cfc --- /dev/null +++ b/src/views/AssetManagement/components/AssetTable.vue @@ -0,0 +1,247 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableAddModal.vue b/src/views/AssetManagement/components/AssetTableAddModal.vue new file mode 100644 index 0000000..e3eda31 --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableAddModal.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeft.vue b/src/views/AssetManagement/components/AssetTableModalLeft.vue new file mode 100644 index 0000000..a41044b --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeft.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeftInfo.vue b/src/views/AssetManagement/components/AssetTableModalLeftInfo.vue new file mode 100644 index 0000000..281112f --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeftInfo.vue @@ -0,0 +1,216 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeftInfoDept.vue b/src/views/AssetManagement/components/AssetTableModalLeftInfoDept.vue new file mode 100644 index 0000000..093debb --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeftInfoDept.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeftInfoGraph.vue b/src/views/AssetManagement/components/AssetTableModalLeftInfoGraph.vue new file mode 100644 index 0000000..90cacd2 --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeftInfoGraph.vue @@ -0,0 +1,173 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeftInfoIoT.vue b/src/views/AssetManagement/components/AssetTableModalLeftInfoIoT.vue new file mode 100644 index 0000000..2406460 --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeftInfoIoT.vue @@ -0,0 +1,290 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeftInfoMQTT.vue b/src/views/AssetManagement/components/AssetTableModalLeftInfoMQTT.vue new file mode 100644 index 0000000..a92a524 --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeftInfoMQTT.vue @@ -0,0 +1,149 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalLeftModule.vue b/src/views/AssetManagement/components/AssetTableModalLeftModule.vue new file mode 100644 index 0000000..effdead --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalLeftModule.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/views/AssetManagement/components/AssetTableModalRight.vue b/src/views/AssetManagement/components/AssetTableModalRight.vue new file mode 100644 index 0000000..4a1b472 --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalRight.vue @@ -0,0 +1,22 @@ + + + + + diff --git a/src/views/AssetManagement/components/AssetTableModalRightInfo.vue b/src/views/AssetManagement/components/AssetTableModalRightInfo.vue new file mode 100644 index 0000000..cea990c --- /dev/null +++ b/src/views/AssetManagement/components/AssetTableModalRightInfo.vue @@ -0,0 +1,167 @@ + + + + + diff --git a/src/views/Test.vue b/src/views/Test.vue new file mode 100644 index 0000000..e4cff4b --- /dev/null +++ b/src/views/Test.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/src/views/accountManagement/AccountManagement.vue b/src/views/accountManagement/AccountManagement.vue new file mode 100644 index 0000000..b6df707 --- /dev/null +++ b/src/views/accountManagement/AccountManagement.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/accountManagement/components/Account.vue b/src/views/accountManagement/components/Account.vue new file mode 100644 index 0000000..dc97c4e --- /dev/null +++ b/src/views/accountManagement/components/Account.vue @@ -0,0 +1,222 @@ + + + + + diff --git a/src/views/accountManagement/components/AccountModal.vue b/src/views/accountManagement/components/AccountModal.vue new file mode 100644 index 0000000..95a7bb2 --- /dev/null +++ b/src/views/accountManagement/components/AccountModal.vue @@ -0,0 +1,232 @@ + + + + + diff --git a/src/views/accountManagement/components/AccountPasswordModal.vue b/src/views/accountManagement/components/AccountPasswordModal.vue new file mode 100644 index 0000000..b365198 --- /dev/null +++ b/src/views/accountManagement/components/AccountPasswordModal.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/src/views/accountManagement/components/Role.vue b/src/views/accountManagement/components/Role.vue new file mode 100644 index 0000000..93299b8 --- /dev/null +++ b/src/views/accountManagement/components/Role.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/views/accountManagement/components/RoleAuthModal.vue b/src/views/accountManagement/components/RoleAuthModal.vue new file mode 100644 index 0000000..6d03e45 --- /dev/null +++ b/src/views/accountManagement/components/RoleAuthModal.vue @@ -0,0 +1,208 @@ + + + + + diff --git a/src/views/alert/AlertManagement.vue b/src/views/alert/AlertManagement.vue new file mode 100644 index 0000000..910b477 --- /dev/null +++ b/src/views/alert/AlertManagement.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertQuery.vue b/src/views/alert/components/AlertQuery/AlertQuery.vue new file mode 100644 index 0000000..99299c8 --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertQuery.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertSearch.vue b/src/views/alert/components/AlertQuery/AlertSearch.vue new file mode 100644 index 0000000..661a409 --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertSearch.vue @@ -0,0 +1,28 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertSearchAckBtns.vue b/src/views/alert/components/AlertQuery/AlertSearchAckBtns.vue new file mode 100644 index 0000000..42e9e96 --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertSearchAckBtns.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertSearchNormalBtns.vue b/src/views/alert/components/AlertQuery/AlertSearchNormalBtns.vue new file mode 100644 index 0000000..d876fc4 --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertSearchNormalBtns.vue @@ -0,0 +1,62 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertSearchTimeRange.vue b/src/views/alert/components/AlertQuery/AlertSearchTimeRange.vue new file mode 100644 index 0000000..ce074d3 --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertSearchTimeRange.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertSearchTypesButton.vue b/src/views/alert/components/AlertQuery/AlertSearchTypesButton.vue new file mode 100644 index 0000000..21a27ca --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertSearchTypesButton.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertTable.vue b/src/views/alert/components/AlertQuery/AlertTable.vue new file mode 100644 index 0000000..abdc36f --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertTable.vue @@ -0,0 +1,60 @@ + + + + + diff --git a/src/views/alert/components/AlertQuery/AlertTableModal.vue b/src/views/alert/components/AlertQuery/AlertTableModal.vue new file mode 100644 index 0000000..49f5a58 --- /dev/null +++ b/src/views/alert/components/AlertQuery/AlertTableModal.vue @@ -0,0 +1,326 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertNoticesTable.vue b/src/views/alert/components/AlertSetting/AlertNoticesTable.vue new file mode 100644 index 0000000..2bfdfd1 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertNoticesTable.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertNotifyTable.vue b/src/views/alert/components/AlertSetting/AlertNotifyTable.vue new file mode 100644 index 0000000..4589752 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertNotifyTable.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertNotifyTableAddModal.vue b/src/views/alert/components/AlertSetting/AlertNotifyTableAddModal.vue new file mode 100644 index 0000000..d02d03e --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertNotifyTableAddModal.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertOutliersTable.vue b/src/views/alert/components/AlertSetting/AlertOutliersTable.vue new file mode 100644 index 0000000..552c684 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertOutliersTable.vue @@ -0,0 +1,257 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertOutliersTableAddModal.vue b/src/views/alert/components/AlertSetting/AlertOutliersTableAddModal.vue new file mode 100644 index 0000000..a92da1b --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertOutliersTableAddModal.vue @@ -0,0 +1,274 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertSetting.vue b/src/views/alert/components/AlertSetting/AlertSetting.vue new file mode 100644 index 0000000..a1398d3 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertSetting.vue @@ -0,0 +1,51 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertSubList.vue b/src/views/alert/components/AlertSetting/AlertSubList.vue new file mode 100644 index 0000000..3c3dc74 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertSubList.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/src/views/alert/components/AlertSetting/AlertTimeTable.vue b/src/views/alert/components/AlertSetting/AlertTimeTable.vue new file mode 100644 index 0000000..eb440f1 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertTimeTable.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/alert/components/AlertSetting/AlertTimeTableAddModal.vue b/src/views/alert/components/AlertSetting/AlertTimeTableAddModal.vue new file mode 100644 index 0000000..c68cf03 --- /dev/null +++ b/src/views/alert/components/AlertSetting/AlertTimeTableAddModal.vue @@ -0,0 +1,429 @@ + + + + + diff --git a/src/views/dashboard/Dashboard.vue b/src/views/dashboard/Dashboard.vue new file mode 100644 index 0000000..f6dda68 --- /dev/null +++ b/src/views/dashboard/Dashboard.vue @@ -0,0 +1,143 @@ + + + + + diff --git a/src/views/dashboard/components/DashboardAlert.vue b/src/views/dashboard/components/DashboardAlert.vue new file mode 100644 index 0000000..dcdeb5d --- /dev/null +++ b/src/views/dashboard/components/DashboardAlert.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/src/views/dashboard/components/DashboardEffectScatter.vue b/src/views/dashboard/components/DashboardEffectScatter.vue new file mode 100644 index 0000000..bd8408a --- /dev/null +++ b/src/views/dashboard/components/DashboardEffectScatter.vue @@ -0,0 +1,124 @@ + + + + + diff --git a/src/views/dashboard/components/DashboardElectricity.vue b/src/views/dashboard/components/DashboardElectricity.vue new file mode 100644 index 0000000..02573bb --- /dev/null +++ b/src/views/dashboard/components/DashboardElectricity.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/src/views/dashboard/components/DashboardEmission.vue b/src/views/dashboard/components/DashboardEmission.vue new file mode 100644 index 0000000..1136be5 --- /dev/null +++ b/src/views/dashboard/components/DashboardEmission.vue @@ -0,0 +1,117 @@ + + + + + \ No newline at end of file diff --git a/src/views/dashboard/components/DashboardFloorBar.vue b/src/views/dashboard/components/DashboardFloorBar.vue new file mode 100644 index 0000000..b5d873d --- /dev/null +++ b/src/views/dashboard/components/DashboardFloorBar.vue @@ -0,0 +1,59 @@ + + + + + diff --git a/src/views/dashboard/components/DashboardSysCard.vue b/src/views/dashboard/components/DashboardSysCard.vue new file mode 100644 index 0000000..1e568df --- /dev/null +++ b/src/views/dashboard/components/DashboardSysCard.vue @@ -0,0 +1,151 @@ + + + + diff --git a/src/views/dashboard/components/DashboardTemp.vue b/src/views/dashboard/components/DashboardTemp.vue new file mode 100644 index 0000000..004475e --- /dev/null +++ b/src/views/dashboard/components/DashboardTemp.vue @@ -0,0 +1,137 @@ + + + + + diff --git a/src/views/energyManagement/EnergyManagement.vue b/src/views/energyManagement/EnergyManagement.vue new file mode 100644 index 0000000..c08b990 --- /dev/null +++ b/src/views/energyManagement/EnergyManagement.vue @@ -0,0 +1,39 @@ + + diff --git a/src/views/energyManagement/components/EnergyChart/BillingDegreeChart.vue b/src/views/energyManagement/components/EnergyChart/BillingDegreeChart.vue new file mode 100644 index 0000000..f2f88ac --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/BillingDegreeChart.vue @@ -0,0 +1,132 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/CarbonEmissionChart.vue b/src/views/energyManagement/components/EnergyChart/CarbonEmissionChart.vue new file mode 100644 index 0000000..464fe7c --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/CarbonEmissionChart.vue @@ -0,0 +1,128 @@ + + + diff --git a/src/views/energyManagement/components/EnergyChart/CarbonEmissionModal.vue b/src/views/energyManagement/components/EnergyChart/CarbonEmissionModal.vue new file mode 100644 index 0000000..30024c0 --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/CarbonEmissionModal.vue @@ -0,0 +1,110 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/ElecConsumption.vue b/src/views/energyManagement/components/EnergyChart/ElecConsumption.vue new file mode 100644 index 0000000..460ee3e --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/ElecConsumption.vue @@ -0,0 +1,141 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/EnergyChart.vue b/src/views/energyManagement/components/EnergyChart/EnergyChart.vue new file mode 100644 index 0000000..26eb9a5 --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/EnergyChart.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/ImmediateDemandChart.vue b/src/views/energyManagement/components/EnergyChart/ImmediateDemandChart.vue new file mode 100644 index 0000000..1d0be05 --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/ImmediateDemandChart.vue @@ -0,0 +1,186 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/ImmediateDemandModal.vue b/src/views/energyManagement/components/EnergyChart/ImmediateDemandModal.vue new file mode 100644 index 0000000..bb20865 --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/ImmediateDemandModal.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/IntervalBillChart.vue b/src/views/energyManagement/components/EnergyChart/IntervalBillChart.vue new file mode 100644 index 0000000..ecfd31c --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/IntervalBillChart.vue @@ -0,0 +1,166 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyChart/MonthlyElecBillChart.vue b/src/views/energyManagement/components/EnergyChart/MonthlyElecBillChart.vue new file mode 100644 index 0000000..26d8956 --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/MonthlyElecBillChart.vue @@ -0,0 +1,131 @@ + + + diff --git a/src/views/energyManagement/components/EnergyChart/UsageInformation.vue b/src/views/energyManagement/components/EnergyChart/UsageInformation.vue new file mode 100644 index 0000000..4db0856 --- /dev/null +++ b/src/views/energyManagement/components/EnergyChart/UsageInformation.vue @@ -0,0 +1,119 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergyActionButton.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergyActionButton.vue new file mode 100644 index 0000000..7679bc5 --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergyActionButton.vue @@ -0,0 +1,136 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergyDataCahrt.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergyDataCahrt.vue new file mode 100644 index 0000000..edfaef3 --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergyDataCahrt.vue @@ -0,0 +1,164 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergyDataTable.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergyDataTable.vue new file mode 100644 index 0000000..9e1b7ac --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergyDataTable.vue @@ -0,0 +1,170 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergyHistoryTable.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergyHistoryTable.vue new file mode 100644 index 0000000..aa7d750 --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergyHistoryTable.vue @@ -0,0 +1,37 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergySearch.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergySearch.vue new file mode 100644 index 0000000..5d5fbe9 --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergySearch.vue @@ -0,0 +1,251 @@ + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergySearchTime.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergySearchTime.vue new file mode 100644 index 0000000..34f09e1 --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergySearchTime.vue @@ -0,0 +1,159 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyHistoryTable/EnergySidebar.vue b/src/views/energyManagement/components/EnergyHistoryTable/EnergySidebar.vue new file mode 100644 index 0000000..2d5bbbf --- /dev/null +++ b/src/views/energyManagement/components/EnergyHistoryTable/EnergySidebar.vue @@ -0,0 +1,265 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyReport/EnergyReport.vue b/src/views/energyManagement/components/EnergyReport/EnergyReport.vue new file mode 100644 index 0000000..ec8efda --- /dev/null +++ b/src/views/energyManagement/components/EnergyReport/EnergyReport.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyReport/EnergyReportSearch.vue b/src/views/energyManagement/components/EnergyReport/EnergyReportSearch.vue new file mode 100644 index 0000000..ce7b62f --- /dev/null +++ b/src/views/energyManagement/components/EnergyReport/EnergyReportSearch.vue @@ -0,0 +1,197 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyReport/EnergyReportTable.vue b/src/views/energyManagement/components/EnergyReport/EnergyReportTable.vue new file mode 100644 index 0000000..eda12c3 --- /dev/null +++ b/src/views/energyManagement/components/EnergyReport/EnergyReportTable.vue @@ -0,0 +1,97 @@ + + + + + diff --git a/src/views/energyManagement/components/EnergyReport/EnergyReportTimeRange.vue b/src/views/energyManagement/components/EnergyReport/EnergyReportTimeRange.vue new file mode 100644 index 0000000..cf6e7a0 --- /dev/null +++ b/src/views/energyManagement/components/EnergyReport/EnergyReportTimeRange.vue @@ -0,0 +1,129 @@ + + + + + \ No newline at end of file diff --git a/src/views/graphManagement/GraphManagement.vue b/src/views/graphManagement/GraphManagement.vue new file mode 100644 index 0000000..1e9074f --- /dev/null +++ b/src/views/graphManagement/GraphManagement.vue @@ -0,0 +1,26 @@ + + + + + diff --git a/src/views/graphManagement/components/GraphModal.vue b/src/views/graphManagement/components/GraphModal.vue new file mode 100644 index 0000000..f2c8cf8 --- /dev/null +++ b/src/views/graphManagement/components/GraphModal.vue @@ -0,0 +1,178 @@ + + + + + diff --git a/src/views/graphManagement/components/GraphSidebar.vue b/src/views/graphManagement/components/GraphSidebar.vue new file mode 100644 index 0000000..6948398 --- /dev/null +++ b/src/views/graphManagement/components/GraphSidebar.vue @@ -0,0 +1,256 @@ + + + + + diff --git a/src/views/graphManagement/components/GraphSidebarDropdown.vue b/src/views/graphManagement/components/GraphSidebarDropdown.vue new file mode 100644 index 0000000..2bc32f9 --- /dev/null +++ b/src/views/graphManagement/components/GraphSidebarDropdown.vue @@ -0,0 +1,63 @@ + + + + + diff --git a/src/views/graphManagement/components/GraphTable.vue b/src/views/graphManagement/components/GraphTable.vue new file mode 100644 index 0000000..648a46e --- /dev/null +++ b/src/views/graphManagement/components/GraphTable.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/src/views/history/History.vue b/src/views/history/History.vue new file mode 100644 index 0000000..cd636f4 --- /dev/null +++ b/src/views/history/History.vue @@ -0,0 +1,39 @@ + + + + + diff --git a/src/views/history/components/HistoryActionButton.vue b/src/views/history/components/HistoryActionButton.vue new file mode 100644 index 0000000..5368a31 --- /dev/null +++ b/src/views/history/components/HistoryActionButton.vue @@ -0,0 +1,130 @@ + + + + + diff --git a/src/views/history/components/HistoryFavoriteOption.vue b/src/views/history/components/HistoryFavoriteOption.vue new file mode 100644 index 0000000..b54c5a9 --- /dev/null +++ b/src/views/history/components/HistoryFavoriteOption.vue @@ -0,0 +1,205 @@ + + + + + diff --git a/src/views/history/components/HistorySearch.vue b/src/views/history/components/HistorySearch.vue new file mode 100644 index 0000000..be12808 --- /dev/null +++ b/src/views/history/components/HistorySearch.vue @@ -0,0 +1,252 @@ + + + diff --git a/src/views/history/components/HistorySearchTime.vue b/src/views/history/components/HistorySearchTime.vue new file mode 100644 index 0000000..32a4662 --- /dev/null +++ b/src/views/history/components/HistorySearchTime.vue @@ -0,0 +1,146 @@ + + + + + diff --git a/src/views/history/components/HistorySidebar.vue b/src/views/history/components/HistorySidebar.vue new file mode 100644 index 0000000..139f971 --- /dev/null +++ b/src/views/history/components/HistorySidebar.vue @@ -0,0 +1,291 @@ + + + + + diff --git a/src/views/history/components/HistoryTable.vue b/src/views/history/components/HistoryTable.vue new file mode 100644 index 0000000..ac85baf --- /dev/null +++ b/src/views/history/components/HistoryTable.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/src/views/login/Login.vue b/src/views/login/Login.vue new file mode 100644 index 0000000..70d1e22 --- /dev/null +++ b/src/views/login/Login.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/src/views/operation/Operation.vue b/src/views/operation/Operation.vue new file mode 100644 index 0000000..6fe3022 --- /dev/null +++ b/src/views/operation/Operation.vue @@ -0,0 +1,140 @@ + + + + + diff --git a/src/views/operation/components/OperationActionButton.vue b/src/views/operation/components/OperationActionButton.vue new file mode 100644 index 0000000..a4d40dd --- /dev/null +++ b/src/views/operation/components/OperationActionButton.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/operation/components/OperationSearch.vue b/src/views/operation/components/OperationSearch.vue new file mode 100644 index 0000000..fadc6b9 --- /dev/null +++ b/src/views/operation/components/OperationSearch.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/views/operation/components/OperationSearchSubSys.vue b/src/views/operation/components/OperationSearchSubSys.vue new file mode 100644 index 0000000..9b24cf6 --- /dev/null +++ b/src/views/operation/components/OperationSearchSubSys.vue @@ -0,0 +1,133 @@ + + + + + diff --git a/src/views/operation/components/OperationSearchType.vue b/src/views/operation/components/OperationSearchType.vue new file mode 100644 index 0000000..f8719bf --- /dev/null +++ b/src/views/operation/components/OperationSearchType.vue @@ -0,0 +1,158 @@ + + + + + diff --git a/src/views/operation/components/OperationTable.vue b/src/views/operation/components/OperationTable.vue new file mode 100644 index 0000000..8037178 --- /dev/null +++ b/src/views/operation/components/OperationTable.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/src/views/operation/components/OperationTableModal.vue b/src/views/operation/components/OperationTableModal.vue new file mode 100644 index 0000000..c33a7c6 --- /dev/null +++ b/src/views/operation/components/OperationTableModal.vue @@ -0,0 +1,452 @@ + + + + + diff --git a/src/views/operation/constant/OperationTableColumns.js b/src/views/operation/constant/OperationTableColumns.js new file mode 100644 index 0000000..bc2db76 --- /dev/null +++ b/src/views/operation/constant/OperationTableColumns.js @@ -0,0 +1,57 @@ +export const getFIX_COL = (t) => [ + { + title: t("operation.project"), + key: "work_type_name", + }, + // { + // title: t("operation.location"), + // key: "location", + // }, + { + title: t("operation.uuid"), + key: "error_code", + }, + { + title: t("operation.form_number"), + key: "formId", + }, + { + title: t("operation.device_name"), + key: "device_name", + }, + { + title: t("operation.status"), + key: "status_name", + filter: true, + }, + { + title: t("operation.staff"), + key: "user_full_name", + filter: true, + }, + { + title: t("operation.start_time"), + key: "start_time", + sort: true, + }, + { + title: t("operation.upload"), + key: "lorf", + width: "15%", + }, + { + title: t("operation.finish_time"), + key: "finish_time", + sort: true, + }, + { + title: t("operation.updated_time"), + key: "updated_at", + sort: true, + }, + { + title: t("operation.operation"), + key: "operation", + width: 200, + }, +]; diff --git a/src/views/setting/SettingManagement.vue b/src/views/setting/SettingManagement.vue new file mode 100644 index 0000000..4555ff3 --- /dev/null +++ b/src/views/setting/SettingManagement.vue @@ -0,0 +1,51 @@ + + diff --git a/src/views/setting/components/Building.vue b/src/views/setting/components/Building.vue new file mode 100644 index 0000000..4bd1968 --- /dev/null +++ b/src/views/setting/components/Building.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/src/views/setting/components/BuildingModal.vue b/src/views/setting/components/BuildingModal.vue new file mode 100644 index 0000000..0885c59 --- /dev/null +++ b/src/views/setting/components/BuildingModal.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/views/setting/components/Demand.vue b/src/views/setting/components/Demand.vue new file mode 100644 index 0000000..8453490 --- /dev/null +++ b/src/views/setting/components/Demand.vue @@ -0,0 +1,169 @@ + + + + + diff --git a/src/views/setting/components/Dept.vue b/src/views/setting/components/Dept.vue new file mode 100644 index 0000000..7569a3f --- /dev/null +++ b/src/views/setting/components/Dept.vue @@ -0,0 +1,98 @@ + + + + + diff --git a/src/views/setting/components/DeptModal.vue b/src/views/setting/components/DeptModal.vue new file mode 100644 index 0000000..be9d1d3 --- /dev/null +++ b/src/views/setting/components/DeptModal.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/src/views/setting/components/ElecPriceManagement.vue b/src/views/setting/components/ElecPriceManagement.vue new file mode 100644 index 0000000..648e00d --- /dev/null +++ b/src/views/setting/components/ElecPriceManagement.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/views/setting/components/ElecPriceRes.vue b/src/views/setting/components/ElecPriceRes.vue new file mode 100644 index 0000000..07b201a --- /dev/null +++ b/src/views/setting/components/ElecPriceRes.vue @@ -0,0 +1,434 @@ + + + + + diff --git a/src/views/setting/components/ElecPriceStd.vue b/src/views/setting/components/ElecPriceStd.vue new file mode 100644 index 0000000..0d4791c --- /dev/null +++ b/src/views/setting/components/ElecPriceStd.vue @@ -0,0 +1,729 @@ + + + + + diff --git a/src/views/setting/components/ElecType.vue b/src/views/setting/components/ElecType.vue new file mode 100644 index 0000000..5942a92 --- /dev/null +++ b/src/views/setting/components/ElecType.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/src/views/setting/components/ElecTypeModal.vue b/src/views/setting/components/ElecTypeModal.vue new file mode 100644 index 0000000..0038d5c --- /dev/null +++ b/src/views/setting/components/ElecTypeModal.vue @@ -0,0 +1,84 @@ + + + + + diff --git a/src/views/setting/components/Floors.vue b/src/views/setting/components/Floors.vue new file mode 100644 index 0000000..ee6a4b1 --- /dev/null +++ b/src/views/setting/components/Floors.vue @@ -0,0 +1,127 @@ + + + + + diff --git a/src/views/setting/components/FloorsModal.vue b/src/views/setting/components/FloorsModal.vue new file mode 100644 index 0000000..807709a --- /dev/null +++ b/src/views/setting/components/FloorsModal.vue @@ -0,0 +1,112 @@ + + + + + diff --git a/src/views/setting/components/MQTTCheckboxTree.vue b/src/views/setting/components/MQTTCheckboxTree.vue new file mode 100644 index 0000000..d260334 --- /dev/null +++ b/src/views/setting/components/MQTTCheckboxTree.vue @@ -0,0 +1,91 @@ + + + \ No newline at end of file diff --git a/src/views/setting/components/MQTTList.vue b/src/views/setting/components/MQTTList.vue new file mode 100644 index 0000000..3e103db --- /dev/null +++ b/src/views/setting/components/MQTTList.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/src/views/setting/components/MQTTListAddModal.vue b/src/views/setting/components/MQTTListAddModal.vue new file mode 100644 index 0000000..c88c45a --- /dev/null +++ b/src/views/setting/components/MQTTListAddModal.vue @@ -0,0 +1,246 @@ + + + + + diff --git a/src/views/setting/components/PointList.vue b/src/views/setting/components/PointList.vue new file mode 100644 index 0000000..f45e4db --- /dev/null +++ b/src/views/setting/components/PointList.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/src/views/setting/components/PointListAddModal.vue b/src/views/setting/components/PointListAddModal.vue new file mode 100644 index 0000000..1ebb4eb --- /dev/null +++ b/src/views/setting/components/PointListAddModal.vue @@ -0,0 +1,175 @@ + + + + + diff --git a/src/views/setting/components/Vendor.vue b/src/views/setting/components/Vendor.vue new file mode 100644 index 0000000..cb087c4 --- /dev/null +++ b/src/views/setting/components/Vendor.vue @@ -0,0 +1,128 @@ + + + + + diff --git a/src/views/setting/components/VendorModal.vue b/src/views/setting/components/VendorModal.vue new file mode 100644 index 0000000..8fff154 --- /dev/null +++ b/src/views/setting/components/VendorModal.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/src/views/system/System.vue b/src/views/system/System.vue new file mode 100644 index 0000000..aa336fc --- /dev/null +++ b/src/views/system/System.vue @@ -0,0 +1,303 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/SystemFloor.vue b/src/views/system/SystemFloor.vue new file mode 100644 index 0000000..452aee4 --- /dev/null +++ b/src/views/system/SystemFloor.vue @@ -0,0 +1,198 @@ + + + + + diff --git a/src/views/system/SystemMain.vue b/src/views/system/SystemMain.vue new file mode 100644 index 0000000..4c5cb6f --- /dev/null +++ b/src/views/system/SystemMain.vue @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/components/SystemCard.vue b/src/views/system/components/SystemCard.vue new file mode 100644 index 0000000..feaa56d --- /dev/null +++ b/src/views/system/components/SystemCard.vue @@ -0,0 +1,214 @@ + + + + + diff --git a/src/views/system/components/SystemDeptBar.vue b/src/views/system/components/SystemDeptBar.vue new file mode 100644 index 0000000..2c9a06c --- /dev/null +++ b/src/views/system/components/SystemDeptBar.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/views/system/components/SystemFloorBar.vue b/src/views/system/components/SystemFloorBar.vue new file mode 100644 index 0000000..2203a5e --- /dev/null +++ b/src/views/system/components/SystemFloorBar.vue @@ -0,0 +1,88 @@ + + + + + diff --git a/src/views/system/components/SystemInfoModal.vue b/src/views/system/components/SystemInfoModal.vue new file mode 100644 index 0000000..0917efe --- /dev/null +++ b/src/views/system/components/SystemInfoModal.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/src/views/system/components/SystemInfoModalChart.vue b/src/views/system/components/SystemInfoModalChart.vue new file mode 100644 index 0000000..b0d74fe --- /dev/null +++ b/src/views/system/components/SystemInfoModalChart.vue @@ -0,0 +1,194 @@ + + + + + diff --git a/src/views/system/components/SystemInfoModalCog.vue b/src/views/system/components/SystemInfoModalCog.vue new file mode 100644 index 0000000..49ae667 --- /dev/null +++ b/src/views/system/components/SystemInfoModalCog.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/src/views/system/components/SystemInfoModalContent.vue b/src/views/system/components/SystemInfoModalContent.vue new file mode 100644 index 0000000..1d2e7f6 --- /dev/null +++ b/src/views/system/components/SystemInfoModalContent.vue @@ -0,0 +1,63 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/components/SystemInfoModalDesktop.vue b/src/views/system/components/SystemInfoModalDesktop.vue new file mode 100644 index 0000000..02cd2ea --- /dev/null +++ b/src/views/system/components/SystemInfoModalDesktop.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/src/views/system/components/SystemInfoModalImage.vue b/src/views/system/components/SystemInfoModalImage.vue new file mode 100644 index 0000000..c8e6cab --- /dev/null +++ b/src/views/system/components/SystemInfoModalImage.vue @@ -0,0 +1,76 @@ + + + + + diff --git a/src/views/system/components/SystemMode.vue b/src/views/system/components/SystemMode.vue new file mode 100644 index 0000000..266acc4 --- /dev/null +++ b/src/views/system/components/SystemMode.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/src/views/system/components/SystemSubBar.vue b/src/views/system/components/SystemSubBar.vue new file mode 100644 index 0000000..a5875b3 --- /dev/null +++ b/src/views/system/components/SystemSubBar.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..1656874 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,44 @@ +module.exports = { + content: [ + "./src/**/*.{vue,js,ts}", + "./node_modules/vue-tailwind-datepicker/**/*.js", + ], + purge: ["./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}"], + darkMode: false, // or 'media' or 'class' + theme: { + extend: { + backgroundImage: { + navbar: + "linear-gradient(to bottom,rgba(0, 15, 125, 0.9),rgba(0, 96, 255, 0.9))", + normal: + "linear-gradient(180deg,rgba(127, 237, 193, 0.1),rgba(0, 0, 0, 0),rgba(127, 237, 193, 0.1))", + }, + colors: { + dark: "#111", + warning: "#ffe448", + "sub-warning": "#BEAC53", + info: "#35eded", + "dark-info": "#24272c", + "light-info": "#83e0ea", + success: "#8ee894", + "sub-success": "#808B68", + "success-content": "#8ee894", + body: "#02101B", + danger: "#722e3c", + active: "#6fdda8", + innerTable: "rgba(111, 221, 168, 0.1)", + error: "#ff033e", + }, + boxShadow: { + custom: "0px 0px 10px 1px rgba(255, 255, 255, 0.8)", + }, + }, + }, + variants: { + extend: {}, + }, + plugins: [require("daisyui")], + daisyui: { + themes: ["synthwave", "dracula"], + }, +}; diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..7c685b9 --- /dev/null +++ b/vite.config.js @@ -0,0 +1,50 @@ +import { fileURLToPath, URL } from "node:url"; +import { defineConfig } from "vite"; +import vue from "@vitejs/plugin-vue"; +import Components from "unplugin-vue-components/vite"; +import { AntDesignVueResolver } from "unplugin-vue-components/resolvers"; +import { createSvgIconsPlugin } from "vite-plugin-svg-icons"; +import path from "path"; + +// https://vitejs.dev/config/ +export default defineConfig({ + base: process.env.NODE_ENV === "production" ? "./" : "/", + build: { + outDir: "./dist", + emptyOutDir: true, + }, + server: { + proxy: { + "/upload": { + target: "https://ibms-empower.production.mjmtech.com.tw", + changeOrigin: true, + secure: false, + }, + }, + }, + plugins: [ + vue(), + Components({ + resolvers: [ + AntDesignVueResolver({ + importStyle: false, // css in js + }), + ], + }), + createSvgIconsPlugin({ + iconDirs: [path.resolve(process.cwd(), "src/assets/icon")], + symbolId: "icon-[dir]-[name]", + }), + ], + css: { + preprocessorOptions: { + scss: {}, + }, + }, + resolve: { + alias: { + "@": fileURLToPath(new URL("./src", import.meta.url)), + "@ASSET": fileURLToPath(new URL("./src/assets", import.meta.url)), + }, + }, +});