diff --git a/package-lock.json b/package-lock.json index bc934d1a..0d2493a0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,11 +8,10 @@ "name": "crm", "version": "24.08.0", "dependencies": { - "@vue/compat": "^3.5.1", + "@vue/compat": "^3.4.27", "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", "@vueuse/core": "^11.0.3", - "@webitel/ui-sdk": "^24.10.5", "axios": "^1.7.7", "deep-equal": "^2.2.1", "dompurify": "^3.1.2", @@ -24,7 +23,7 @@ "vue-i18n": "^9.13.1", "vue-router": "^4.3.2", "vuex": "^4.1.0", - "webitel-sdk": "^24.4.16" + "webitel-sdk": "^24.8.1" }, "devDependencies": { "@vitejs/plugin-vue": "5.1.3", @@ -39,6 +38,7 @@ "vite": "^5.4.3", "vite-plugin-node-polyfills": "^0.22.0", "vite-plugin-svg-sprite": "^0.5.2", + "vite-plugin-vue-devtools": "^7.4.6", "vitest": "^2.0.5" } }, @@ -46,6 +46,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.24" @@ -54,10 +55,20 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, "dependencies": { "@babel/highlight": "^7.24.7", "picocolors": "^1.0.0" @@ -70,6 +81,7 @@ "version": "7.25.4", "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.4.tgz", "integrity": "sha512-+LGRog6RAsCJrrrg/IO6LGmpphNe5DiK30dGjCoxxeGv49B10/3XYGxPsAwrDlMFcFEvdAUavDT8r9k/hSyQqQ==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -78,6 +90,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.2.tgz", "integrity": "sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.24.7", @@ -107,6 +120,7 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -115,6 +129,7 @@ "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.6.tgz", "integrity": "sha512-VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZw==", + "dev": true, "dependencies": { "@babel/types": "^7.25.6", "@jridgewell/gen-mapping": "^0.3.5", @@ -125,10 +140,23 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz", + "integrity": "sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-compilation-targets": { "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.2.tgz", "integrity": "sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==", + "dev": true, "dependencies": { "@babel/compat-data": "^7.25.2", "@babel/helper-validator-option": "^7.24.8", @@ -144,6 +172,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, "dependencies": { "yallist": "^3.0.2" } @@ -152,19 +181,59 @@ "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, "bin": { "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.25.4.tgz", + "integrity": "sha512-ro/bFs3/84MDgDmMwbcHgDa8/E6J3QKNTk4xJJnVeFtGE+tL0K26E3pNxhYz2b67fJpt7Aphw5XcploKXuCvCQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/helper-replace-supers": "^7.25.0", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/traverse": "^7.25.4", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.8.tgz", + "integrity": "sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.8", + "@babel/types": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/helper-module-imports": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz", "integrity": "sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==", + "dev": true, "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -177,6 +246,7 @@ "version": "7.25.2", "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.2.tgz", "integrity": "sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==", + "dev": true, "dependencies": { "@babel/helper-module-imports": "^7.24.7", "@babel/helper-simple-access": "^7.24.7", @@ -190,10 +260,62 @@ "@babel/core": "^7.0.0" } }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz", + "integrity": "sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.8", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.8.tgz", + "integrity": "sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.25.0", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.25.0.tgz", + "integrity": "sha512-q688zIvQVYtZu+i2PsdIu/uWGRpfxzr5WESsfpShfZECkO+d2o+WROWezCi/Q6kJ0tfPa5+pUGUlfx2HhrA3Bg==", + "dev": true, + "dependencies": { + "@babel/helper-member-expression-to-functions": "^7.24.8", + "@babel/helper-optimise-call-expression": "^7.24.7", + "@babel/traverse": "^7.25.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, "node_modules/@babel/helper-simple-access": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz", "integrity": "sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.24.7", + "@babel/types": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz", + "integrity": "sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==", + "dev": true, "dependencies": { "@babel/traverse": "^7.24.7", "@babel/types": "^7.24.7" @@ -222,6 +344,7 @@ "version": "7.24.8", "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.24.8.tgz", "integrity": "sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -230,6 +353,7 @@ "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.6.tgz", "integrity": "sha512-Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q==", + "dev": true, "dependencies": { "@babel/template": "^7.25.0", "@babel/types": "^7.25.6" @@ -242,6 +366,7 @@ "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", @@ -256,6 +381,7 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, "dependencies": { "color-convert": "^1.9.0" }, @@ -267,6 +393,7 @@ "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -280,6 +407,7 @@ "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, "dependencies": { "color-name": "1.1.3" } @@ -287,12 +415,14 @@ "node_modules/@babel/highlight/node_modules/color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true }, "node_modules/@babel/highlight/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" } @@ -301,19 +431,16 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, "engines": { "node": ">=4" } }, - "node_modules/@babel/highlight/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/@babel/highlight/node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -335,29 +462,119 @@ "node": ">=6.0.0" } }, - "node_modules/@babel/runtime": { - "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.6.tgz", - "integrity": "sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ==", + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.24.7.tgz", + "integrity": "sha512-RL9GR0pUG5Kc8BUWLNDm2T5OpYwSX15r98I0IkgmRQTXuELq/OynH8xtMTMvTJFjXbMWFVTKtYkTaYQsuAwQlQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.7", + "@babel/plugin-syntax-decorators": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.24.7.tgz", + "integrity": "sha512-Ui4uLJJrRV1lb38zg1yYTmRKmiZLiftDEvZN2iq3kd9kUFU+PttmzTbAFC2ucRk/XJmtek6G23gPsuZbhrT8fQ==", + "dev": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/helper-plugin-utils": "^7.24.7" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/standalone": { + "node_modules/@babel/plugin-syntax-import-attributes": { "version": "7.25.6", - "resolved": "https://registry.npmjs.org/@babel/standalone/-/standalone-7.25.6.tgz", - "integrity": "sha512-Kf2ZcZVqsKbtYhlA7sP0z5A3q5hmCVYMKMWRWNK/5OVwHIve3JY1djVRmIVAx8FMueLIfZGKQDIILK2w8zO4mg==", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.25.6.tgz", + "integrity": "sha512-sXaDXaJN9SNLymBdlWFA+bjzBhFD617ZaFiY13dGt7TVslVvVgA6fkZOP7Ki3IGElC45lwHdOTrCtKZGVAWeLQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz", + "integrity": "sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.25.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.4.tgz", + "integrity": "sha512-uMOCoHVU52BsSWxPOMVv5qKRdeSlPuImUCB2dlPuBSU+W2/ROE7/Zg8F2Kepbk+8yBa68LlRKxO+xgEVWorsDg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typescript": { + "version": "7.25.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.25.2.tgz", + "integrity": "sha512-lBwRvjSmqiMYe/pS0+1gggjJleUJi7NzjvQ1Fkqtt69hBa/0t1YuW/MLQMAPixfwaQOHUXsd6jeU3Z+vdGv3+A==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.24.7", + "@babel/helper-create-class-features-plugin": "^7.25.0", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/helper-skip-transparent-expression-wrappers": "^7.24.7", + "@babel/plugin-syntax-typescript": "^7.24.7" + }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { "version": "7.25.0", "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.0.tgz", "integrity": "sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/parser": "^7.25.0", @@ -371,6 +588,7 @@ "version": "7.25.6", "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.6.tgz", "integrity": "sha512-9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ==", + "dev": true, "dependencies": { "@babel/code-frame": "^7.24.7", "@babel/generator": "^7.25.6", @@ -388,6 +606,7 @@ "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, "engines": { "node": ">=4" } @@ -411,497 +630,88 @@ "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", "dev": true }, - "node_modules/@esbuild/aix-ppc64": { + "node_modules/@esbuild/win32-x64": { "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", "cpu": [ - "ppc64" + "x64" ], "dev": true, "optional": true, "os": [ - "aix" + "win32" ], "engines": { "node": ">=12" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], + "node_modules/@eslint-community/regexpp": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", + "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", "dev": true, - "optional": true, - "os": [ - "android" - ], "engines": { - "node": ">=12" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], + "node_modules/@eslint/js": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.3.0.tgz", + "integrity": "sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", - "dev": true, - "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", - "dev": true, - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", - "dev": true, - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^10.0.1", - "globals": "^14.0.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/js": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.3.0.tgz", - "integrity": "sha512-niBqk8iwv96+yuTwjM6bWg8ovzAPF9qkICsGtcoa5/dmqcEMfdwNAX7+/OHcJHc7wj7XqPxH98oAHytFYlw6Sw==", - "dev": true, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "node_modules/@floating-ui/core": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.7.tgz", - "integrity": "sha512-yDzVT/Lm101nQ5TCVeK65LtdN7Tj4Qpr9RTXJ2vPFLqtLxwOrpoxAHAJI8J3yYWUc40J0BDBheaitK5SJmno2g==", - "dependencies": { - "@floating-ui/utils": "^0.2.7" - } - }, - "node_modules/@floating-ui/dom": { - "version": "1.6.10", - "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.10.tgz", - "integrity": "sha512-fskgCFv8J8OamCmyun8MfjB1Olfn+uZKjOKZ0vhYF3gRmEUXcGOjxWL8bBr7i4kIuPZ2KD2S3EUIOxnjC8kl2A==", - "dependencies": { - "@floating-ui/core": "^1.6.0", - "@floating-ui/utils": "^0.2.7" - } - }, - "node_modules/@floating-ui/utils": { - "version": "0.2.7", - "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.7.tgz", - "integrity": "sha512-X8R8Oj771YRl/w+c1HqAC1szL8zWQRwFvgDwT129k9ACdBoud/+/rX9V0qiMl6LWUdP9voC2nDVZYPMQQsb6eA==" - }, - "node_modules/@floating-ui/vue": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/@floating-ui/vue/-/vue-1.1.4.tgz", - "integrity": "sha512-ammH7T3vyCx7pmm9OF19Wc42zrGnUw0QvLoidgypWsCLJMtGXEwY7paYIHO+K+oLC3mbWpzIHzeTVienYenlNg==", - "dependencies": { - "@floating-ui/dom": "^1.0.0", - "@floating-ui/utils": "^0.2.7", - "vue-demi": ">=0.13.0" - } - }, - "node_modules/@floating-ui/vue/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "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": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@humanwhocodes/config-array": { @@ -1048,6 +858,7 @@ "version": "0.3.5", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -1061,6 +872,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -1069,6 +881,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -1082,46 +895,17 @@ "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@morev/utils": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/@morev/utils/-/utils-3.11.1.tgz", - "integrity": "sha512-BRcTAlQkkNgMvVMDGaJFsoeCs8vLokq/FRQXY8wHw/FvZftbbwdlhy/VrqPKOYL2Ni4vgfF8rgbXKV4ikAUAfg==", - "dependencies": { - "fast-copy": "^3.0.2", - "fast-equals": "^5.0.1", - "ohash": "^1.1.3", - "type-fest": "^4.18.3" - } - }, - "node_modules/@morev/vue-transitions": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@morev/vue-transitions/-/vue-transitions-3.0.2.tgz", - "integrity": "sha512-4KviwLrU50nvp8Y+hSK5dPrtNF86wmcmCtXExdT5MGTnTeD/EgLNW5LEU5jlGScPyDNzps+ZcKuQBZiq6IJ3tA==", - "hasInstallScript": true, - "dependencies": { - "@morev/utils": "^3.7.0", - "@nuxt/kit": "^3.10.3" - }, - "bin": { - "vue-transitions-version-fix": "bin/fix.js", - "vue-transitions-version-switch": "bin/switch.js" - }, - "engines": { - "node": ">= 18.0.0" - }, - "peerDependencies": { - "vue": "^2.6.14 || >=3" - } - }, "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" @@ -1134,6 +918,7 @@ "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" } @@ -1142,324 +927,85 @@ "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/@nuxt/kit": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@nuxt/kit/-/kit-3.13.1.tgz", - "integrity": "sha512-FkUL349lp/3nVfTIyws4UDJ3d2jyv5Pk1DC1HQUCOkSloYYMdbRcQAUcb4fe2TCLNWvHM+FhU8jnzGTzjALZYA==", - "dependencies": { - "@nuxt/schema": "3.13.1", - "c12": "^1.11.2", - "consola": "^3.2.3", - "defu": "^6.1.4", - "destr": "^2.0.3", - "globby": "^14.0.2", - "hash-sum": "^2.0.0", - "ignore": "^5.3.2", - "jiti": "^1.21.6", - "klona": "^2.0.6", - "knitwork": "^1.1.0", - "mlly": "^1.7.1", - "pathe": "^1.1.2", - "pkg-types": "^1.2.0", - "scule": "^1.3.0", - "semver": "^7.6.3", - "ufo": "^1.5.4", - "unctx": "^2.3.1", - "unimport": "^3.11.1", - "untyped": "^1.4.2" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@nuxt/schema": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/@nuxt/schema/-/schema-3.13.1.tgz", - "integrity": "sha512-ishbhzVGspjshG9AG0hYnKYY6LWXzCtua7OXV7C/DQ2yA7rRcy1xHpzKZUDbIRyxCHHCAcBd8jfHEUmEuhEPrA==", - "dependencies": { - "compatx": "^0.1.8", - "consola": "^3.2.3", - "defu": "^6.1.4", - "hookable": "^5.5.3", - "pathe": "^1.1.2", - "pkg-types": "^1.2.0", - "scule": "^1.3.0", - "std-env": "^3.7.0", - "ufo": "^1.5.4", - "uncrypto": "^0.1.3", - "unimport": "^3.11.1", - "untyped": "^1.4.2" - }, - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, - "node_modules/@one-ini/wasm": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", - "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", - "dev": true - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", - "dev": true, - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@rollup/plugin-inject": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", - "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^5.0.1", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.3" - }, - "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/@rollup/pluginutils": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", - "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", - "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/@rollup/rollup-android-arm-eabi": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.2.tgz", - "integrity": "sha512-fSuPrt0ZO8uXeS+xP3b+yYTCBUd05MoSp2N/MFOgjhhUhMmchXlpTQrTpI8T+YAwAQuK7MafsCOxW7VrPMrJcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.2.tgz", - "integrity": "sha512-xGU5ZQmPlsjQS6tzTTGwMsnKUtu0WVbl0hYpTPauvbRAnmIvpInhJtgjj3mcuJpEiuUw4v1s4BimkdfDWlh7gA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.2.tgz", - "integrity": "sha512-99AhQ3/ZMxU7jw34Sq8brzXqWH/bMnf7ZVhvLk9QU2cOepbQSVTns6qoErJmSiAvU3InRqC2RRZ5ovh1KN0d0Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.2.tgz", - "integrity": "sha512-ZbRaUvw2iN/y37x6dY50D8m2BnDbBjlnMPotDi/qITMJ4sIxNY33HArjikDyakhSv0+ybdUxhWxE6kTI4oX26w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.2.tgz", - "integrity": "sha512-ztRJJMiE8nnU1YFcdbd9BcH6bGWG1z+jP+IPW2oDUAPxPjo9dverIOyXz76m6IPA6udEL12reYeLojzW2cYL7w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.2.tgz", - "integrity": "sha512-flOcGHDZajGKYpLV0JNc0VFH361M7rnV1ee+NTeC/BQQ1/0pllYcFmxpagltANYt8FYf9+kL6RSk80Ziwyhr7w==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.2.tgz", - "integrity": "sha512-69CF19Kp3TdMopyteO/LJbWufOzqqXzkrv4L2sP8kfMaAQ6iwky7NoXTp7bD6/irKgknDKM0P9E/1l5XxVQAhw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.2.tgz", - "integrity": "sha512-48pD/fJkTiHAZTnZwR0VzHrao70/4MlzJrq0ZsILjLW/Ab/1XlVUStYyGt7tdyIiVSlGZbnliqmult/QGA2O2w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.2.tgz", - "integrity": "sha512-cZdyuInj0ofc7mAQpKcPR2a2iu4YM4FQfuUzCVA2u4HI95lCwzjoPtdWjdpDKyHxI0UO82bLDoOaLfpZ/wviyQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.2.tgz", - "integrity": "sha512-RL56JMT6NwQ0lXIQmMIWr1SW28z4E4pOhRRNqwWZeXpRlykRIlEpSWdsgNWJbYBEWD84eocjSGDu/XxbYeCmwg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">= 8" + } }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.2.tgz", - "integrity": "sha512-PMxkrWS9z38bCr3rWvDFVGD6sFeZJw4iQlhrup7ReGmfn7Oukrr/zweLhYX6v2/8J6Cep9IEA/SmjXjCmSbrMQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "node_modules/@one-ini/wasm": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", + "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", + "dev": true }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.2.tgz", - "integrity": "sha512-B90tYAUoLhU22olrafY3JQCFLnT3NglazdwkHyxNDYF/zAxJt5fJUB/yBoWFoIQ7SQj+KLe3iL4BhOMa9fzgpw==", - "cpu": [ - "x64" - ], + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, "optional": true, - "os": [ - "linux" - ] + "engines": { + "node": ">=14" + } }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.2.tgz", - "integrity": "sha512-7twFizNXudESmC9oneLGIUmoHiiLppz/Xs5uJQ4ShvE6234K0VB1/aJYU3f/4g7PhssLGKBVCC37uRkkOi8wjg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.2.tgz", - "integrity": "sha512-9rRero0E7qTeYf6+rFh3AErTNU1VCQg2mn7CQcI44vNUWM9Ze7MSRS/9RFuSsox+vstRt97+x3sOhEey024FRQ==", - "cpu": [ - "arm64" - ], + "node_modules/@rollup/plugin-inject": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-5.0.5.tgz", + "integrity": "sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==", "dev": true, - "optional": true, - "os": [ - "win32" - ] + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.3" + }, + "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/@rollup/rollup-win32-ia32-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.2.tgz", - "integrity": "sha512-5rA4vjlqgrpbFVVHX3qkrCo/fZTj1q0Xxpg+Z7yIo3J2AilW7t2+n6Q8Jrx+4MrYpAnjttTYF8rr7bP46BPzRw==", - "cpu": [ - "ia32" - ], + "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, - "optional": true, - "os": [ - "win32" - ] + "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/@rollup/rollup-win32-x64-msvc": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.2.tgz", - "integrity": "sha512-6UUxd0+SKomjdzuAcp+HAmxw1FlGBnl1v2yEPSabtx4lBfdXHDVsW7+lQkgz9cNFJGY3AWR7+V8P5BqkD9L9nA==", + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.3.tgz", + "integrity": "sha512-fOvu7PCQjAj4eWDEuD8Xz5gpzFqXzGlxHZozHP4b9Jxv9APtdxL6STqztDzMLuRXEc4UpXGGhx029Xgm91QBeA==", "cpu": [ "x64" ], @@ -1469,17 +1015,56 @@ "win32" ] }, - "node_modules/@sindresorhus/merge-streams": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", - "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/@shikijs/core": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.17.5.tgz", + "integrity": "sha512-JDgFZbJvfZ1g0lRVHtPTv6n2MwWnbTSGwncL/Qmlg7BZBzHCcDY2CxYGkNUm7k+lljOrFzXFGh38s8CRRZH+TQ==", + "peer": true, + "dependencies": { + "@shikijs/engine-javascript": "1.17.5", + "@shikijs/engine-oniguruma": "1.17.5", + "@shikijs/types": "1.17.5", + "@shikijs/vscode-textmate": "^9.2.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.2" + } + }, + "node_modules/@shikijs/engine-javascript": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.17.5.tgz", + "integrity": "sha512-129knB7yGxq51i5f9ci1lsrC/9rJwo7yzOmHVjQIRk+e1C0caaSwzm4mhLJ506ui0vEmQZ9LzY6a/crW1UsReA==", + "peer": true, + "dependencies": { + "@shikijs/types": "1.17.5", + "oniguruma-to-js": "0.4.0" + } + }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.17.5.tgz", + "integrity": "sha512-GcuDWdUcs06sCoRS/JwbcO8M55MOvirTs3wIR7E6pMoePJWgAxhIYDQHURvSrgKgyUrTl3EKwujHljivS5BJVA==", + "peer": true, + "dependencies": { + "@shikijs/types": "1.17.5", + "@shikijs/vscode-textmate": "^9.2.2" + } + }, + "node_modules/@shikijs/types": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.17.5.tgz", + "integrity": "sha512-xDIczjZ7QB6opNrCObX/6/78Jb/BFglRPo7E7f9swd1TCabhumOLsv23103pNUOMZrJYARUkHJpEx7ryFLM3FA==", + "peer": true, + "dependencies": { + "@shikijs/vscode-textmate": "^9.2.2", + "@types/hast": "^3.0.4" } }, + "node_modules/@shikijs/vscode-textmate": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.2.2.tgz", + "integrity": "sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==", + "peer": true + }, "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", @@ -1500,18 +1085,43 @@ "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==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/events": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.3.tgz", "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==" }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "peer": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "peer": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "peer": true + }, "node_modules/@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", @@ -1522,6 +1132,12 @@ "resolved": "https://registry.npmjs.org/@types/webrtc/-/webrtc-0.0.43.tgz", "integrity": "sha512-W5FyScaZ+nLb0CXP/4UaRiNr042RwW/RnLUZYt0uwveZN8w+X1gtt0bYIg9oMzt5ODiU/aQV/kyCFv24wfNrXA==" }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "peer": true + }, "node_modules/@vitejs/plugin-vue": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-5.1.3.tgz", @@ -1536,19 +1152,19 @@ } }, "node_modules/@vitest/coverage-v8": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", - "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.1.0.tgz", + "integrity": "sha512-yqCkr2nrV4o58VcVMxTVkS6Ggxzy7pmSD8JbTbhbH5PsQfUIES1QT716VUzo33wf2lX9EcWYdT3Vl2MMmjR59g==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.3.0", "@bcoe/v8-coverage": "^0.2.3", - "debug": "^4.3.5", + "debug": "^4.3.6", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-report": "^3.0.1", "istanbul-lib-source-maps": "^5.0.6", "istanbul-reports": "^3.1.7", - "magic-string": "^0.30.10", + "magic-string": "^0.30.11", "magicast": "^0.3.4", "std-env": "^3.7.0", "test-exclude": "^7.0.1", @@ -1558,17 +1174,23 @@ "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "2.0.5" + "@vitest/browser": "2.1.0", + "vitest": "2.1.0" + }, + "peerDependenciesMeta": { + "@vitest/browser": { + "optional": true + } } }, "node_modules/@vitest/expect": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", - "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.0.tgz", + "integrity": "sha512-N3/xR4fSu0+6sVZETEtPT1orUs2+Y477JOXTcU3xKuu3uBlsgbD7/7Mz2LZ1Jr1XjwilEWlrIgSCj4N1+5ZmsQ==", "dev": true, "dependencies": { - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/spy": "2.1.0", + "@vitest/utils": "2.1.0", "chai": "^5.1.1", "tinyrainbow": "^1.2.0" }, @@ -1576,10 +1198,46 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/@vitest/mocker": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.0.tgz", + "integrity": "sha512-ZxENovUqhzl+QiOFpagiHUNUuZ1qPd5yYTCYHomGIZOFArzn4mgX2oxZmiAItJWAaXHG6bbpb/DpSPhlk5DgtA==", + "dev": true, + "dependencies": { + "@vitest/spy": "^2.1.0-beta.1", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.11" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@vitest/spy": "2.1.0", + "msw": "^2.3.5", + "vite": "^5.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/mocker/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/@vitest/pretty-format": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", - "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.0.tgz", + "integrity": "sha512-7sxf2F3DNYatgmzXXcTh6cq+/fxwB47RIQqZJFoSH883wnVAoccSRT6g+dTKemUBo8Q5N4OYYj1EBXLuRKvp3Q==", "dev": true, "dependencies": { "tinyrainbow": "^1.2.0" @@ -1589,12 +1247,12 @@ } }, "node_modules/@vitest/runner": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", - "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.0.tgz", + "integrity": "sha512-D9+ZiB8MbMt7qWDRJc4CRNNUlne/8E1X7dcKhZVAbcOKG58MGGYVDqAq19xlhNfMFZsW0bpVKgztBwks38Ko0w==", "dev": true, "dependencies": { - "@vitest/utils": "2.0.5", + "@vitest/utils": "2.1.0", "pathe": "^1.1.2" }, "funding": { @@ -1602,13 +1260,13 @@ } }, "node_modules/@vitest/snapshot": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", - "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.0.tgz", + "integrity": "sha512-x69CygGMzt9VCO283K2/FYQ+nBrOj66OTKpsPykjCR4Ac3lLV+m85hj9reaIGmjBSsKzVvbxWmjWE3kF5ha3uQ==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.0.5", - "magic-string": "^0.30.10", + "@vitest/pretty-format": "2.1.0", + "magic-string": "^0.30.11", "pathe": "^1.1.2" }, "funding": { @@ -1616,9 +1274,9 @@ } }, "node_modules/@vitest/spy": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", - "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.0.tgz", + "integrity": "sha512-IXX5NkbdgTYTog3F14i2LgnBc+20YmkXMx0IWai84mcxySUDRgm0ihbOfR4L0EVRBDFG85GjmQQEZNNKVVpkZw==", "dev": true, "dependencies": { "tinyspy": "^3.0.0" @@ -1628,13 +1286,12 @@ } }, "node_modules/@vitest/utils": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", - "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.0.tgz", + "integrity": "sha512-rreyfVe0PuNqJfKYUwfPDfi6rrp0VSu0Wgvp5WBqJonP+4NvXHk48X6oBam1Lj47Hy6jbJtnMj3OcRdrkTP0tA==", "dev": true, "dependencies": { - "@vitest/pretty-format": "2.0.5", - "estree-walker": "^3.0.3", + "@vitest/pretty-format": "2.1.0", "loupe": "^3.1.1", "tinyrainbow": "^1.2.0" }, @@ -1642,59 +1299,98 @@ "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/@vue/babel-helper-vue-transform-on": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.2.5.tgz", + "integrity": "sha512-lOz4t39ZdmU4DJAa2hwPYmKc8EsuGa2U0L9KaZaOJUt0UwQNjNA3AZTq6uEivhOKhhG1Wvy96SvYBoFmCg3uuw==", + "dev": true + }, + "node_modules/@vue/babel-plugin-jsx": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-jsx/-/babel-plugin-jsx-1.2.5.tgz", + "integrity": "sha512-zTrNmOd4939H9KsRIGmmzn3q2zvv1mjxkYZHgqHZgDrXz5B1Q3WyGEjO2f+JrmKghvl1JIRcvo63LgM1kH5zFg==", "dev": true, "dependencies": { - "@types/estree": "^1.0.0" + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/plugin-syntax-jsx": "^7.24.7", + "@babel/template": "^7.25.0", + "@babel/traverse": "^7.25.6", + "@babel/types": "^7.25.6", + "@vue/babel-helper-vue-transform-on": "1.2.5", + "@vue/babel-plugin-resolve-type": "1.2.5", + "html-tags": "^3.3.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + } + } + }, + "node_modules/@vue/babel-plugin-resolve-type": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-resolve-type/-/babel-plugin-resolve-type-1.2.5.tgz", + "integrity": "sha512-U/ibkQrf5sx0XXRnUZD1mo5F7PkpKyTbfXM3a3rC4YnUz6crHEz9Jg09jzzL6QYlXNto/9CePdOg/c87O4Nlfg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.7", + "@babel/helper-module-imports": "^7.24.7", + "@babel/helper-plugin-utils": "^7.24.8", + "@babel/parser": "^7.25.6", + "@vue/compiler-sfc": "^3.5.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@vue/compat": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/compat/-/compat-3.5.1.tgz", - "integrity": "sha512-RpBk9HppvFPqnu89ucp9lenbVZ7OnHbs7+Cyl1AufxSLC0zWWt4BjqiyFhnS6fPyV0MNLX43KMV/OJb55KLRTg==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/compat/-/compat-3.5.4.tgz", + "integrity": "sha512-3qo4KPZsPWjSA9UmhAi+3/hbL//4PatZcpue7hDYAkbJkfscmzPhadLplAjIe5TBlGR0y89xoCJF2g5+kcbqzQ==", "dependencies": { "@babel/parser": "^7.25.3", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" }, "peerDependencies": { - "vue": "3.5.1" + "vue": "3.5.4" } }, "node_modules/@vue/compiler-core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.1.tgz", - "integrity": "sha512-WdjF+NSgFYdWttHevHw5uaJFtKPalhmxhlu2uREj8cLP0uyKKIR60/JvSZNTp0x+NSd63iTiORQTx3+tt55NWQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.4.tgz", + "integrity": "sha512-oNwn+BAt3n9dK9uAYvI+XGlutwuTq/wfj4xCBaZCqwwVIGtD7D6ViihEbyYZrDHIHTDE3Q6oL3/hqmAyFEy9DQ==", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.1", + "@vue/shared": "3.5.4", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.1.tgz", - "integrity": "sha512-Ao23fB1lINo18HLCbJVApvzd9OQe8MgmQSgyY5+umbWj2w92w9KykVmJ4Iv2US5nak3ixc2B+7Km7JTNhQ8kSQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.4.tgz", + "integrity": "sha512-yP9RRs4BDLOLfldn6ah+AGCNovGjMbL9uHvhDHf5wan4dAHLnFGOkqtfE7PPe4HTXIqE7l/NILdYw53bo1C8jw==", "dependencies": { - "@vue/compiler-core": "3.5.1", - "@vue/shared": "3.5.1" + "@vue/compiler-core": "3.5.4", + "@vue/shared": "3.5.4" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.1.tgz", - "integrity": "sha512-DFizMNH8eDglLhlfwJ0+ciBsztaYe3fY/zcZjrqL1ljXvUw/UpC84M1d7HpBTCW68SNqZyIxrs1XWmf+73Y65w==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.4.tgz", + "integrity": "sha512-P+yiPhL+NYH7m0ZgCq7AQR2q7OIE+mpAEgtkqEeH9oHSdIRvUO+4X6MPvblJIWcoe4YC5a2Gdf/RsoyP8FFiPQ==", "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.1", - "@vue/compiler-dom": "3.5.1", - "@vue/compiler-ssr": "3.5.1", - "@vue/shared": "3.5.1", + "@vue/compiler-core": "3.5.4", + "@vue/compiler-dom": "3.5.4", + "@vue/compiler-ssr": "3.5.4", + "@vue/shared": "3.5.4", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.44", @@ -1702,12 +1398,12 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.1.tgz", - "integrity": "sha512-C1hpSHQgRM8bg+5XWWD7CkFaVpSn9wZHCLRd10AmxqrH17d4EMP6+XcZpwBOM7H1jeStU5naEapZZWX0kso1tQ==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.4.tgz", + "integrity": "sha512-acESdTXsxPnYr2C4Blv0ggx5zIFMgOzZmYU2UgvIff9POdRGbRNBHRyzHAnizcItvpgerSKQbllUc9USp3V7eg==", "dependencies": { - "@vue/compiler-dom": "3.5.1", - "@vue/shared": "3.5.1" + "@vue/compiler-dom": "3.5.4", + "@vue/shared": "3.5.4" } }, "node_modules/@vue/devtools-api": { @@ -1715,50 +1411,91 @@ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.6.1.tgz", "integrity": "sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==" }, + "node_modules/@vue/devtools-core": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-core/-/devtools-core-7.4.6.tgz", + "integrity": "sha512-7ATNPEbVqThOOAp2bg/YUIm9MqqgimbSk24D05hdXUp89JlXX12aTzdrWd9xZRwS78hDR+wCToHl1C/8sopBrg==", + "dev": true, + "dependencies": { + "@vue/devtools-kit": "^7.4.6", + "@vue/devtools-shared": "^7.4.6", + "mitt": "^3.0.1", + "nanoid": "^3.3.4", + "pathe": "^1.1.2", + "vite-hot-client": "^0.2.3" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/@vue/devtools-kit": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-kit/-/devtools-kit-7.4.6.tgz", + "integrity": "sha512-NbYBwPWgEic1AOd9bWExz9weBzFdjiIfov0yRn4DrRfR+EQJCI9dn4I0XS7IxYGdkmUJi8mFW42LLk18WsGqew==", + "dev": true, + "dependencies": { + "@vue/devtools-shared": "^7.4.6", + "birpc": "^0.2.17", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/@vue/devtools-shared/-/devtools-shared-7.4.6.tgz", + "integrity": "sha512-rPeSBzElnHYMB05Cc056BQiJpgocQjY8XVulgni+O9a9Gr9tNXgPteSzFFD+fT/iWMxNuUgGKs9CuW5DZewfIg==", + "dev": true, + "dependencies": { + "rfdc": "^1.4.1" + } + }, "node_modules/@vue/reactivity": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.1.tgz", - "integrity": "sha512-aFE1nMDfbG7V+U5vdOk/NXxH/WX78XuAfX59vWmCM7Ao4lieoc83RkzOAWun61sQXlzNZ4IgROovFBHg+Iz1+Q==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.4.tgz", + "integrity": "sha512-HKKbEuP7tYSGCq4e4nK6ZW6l5hyG66OUetefBp4budUyjvAYsnQDf+bgFzg2RAgnH0CInyqXwD9y47jwJEHrQw==", "dependencies": { - "@vue/shared": "3.5.1" + "@vue/shared": "3.5.4" } }, "node_modules/@vue/runtime-core": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.1.tgz", - "integrity": "sha512-Ce92CCholNRHR3ZtzpRp/7CDGIPFxQ7ElXt9iH91ilK5eOrUv3Z582NWJesuM3aYX71BujVG5/4ypUxigGNxjA==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.4.tgz", + "integrity": "sha512-f3ek2sTA0AFu0n+w+kCtz567Euqqa3eHewvo4klwS7mWfSj/A+UmYTwsnUFo35KeyAFY60JgrCGvEBsu1n/3LA==", "dependencies": { - "@vue/reactivity": "3.5.1", - "@vue/shared": "3.5.1" + "@vue/reactivity": "3.5.4", + "@vue/shared": "3.5.4" } }, "node_modules/@vue/runtime-dom": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.1.tgz", - "integrity": "sha512-B/fUJfBLp5PwE0EWNfBYnA4JUea8Yufb3wN8fN0/HzaqBdkiRHh4sFHOjWqIY8GS75gj//8VqeEqhcU6yUjIkA==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.4.tgz", + "integrity": "sha512-ofyc0w6rbD5KtjhP1i9hGOKdxGpvmuB1jprP7Djlj0X7R5J/oLwuNuE98GJ8WW31Hu2VxQHtk/LYTAlW8xrJdw==", "dependencies": { - "@vue/reactivity": "3.5.1", - "@vue/runtime-core": "3.5.1", - "@vue/shared": "3.5.1", + "@vue/reactivity": "3.5.4", + "@vue/runtime-core": "3.5.4", + "@vue/shared": "3.5.4", "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.1.tgz", - "integrity": "sha512-C5V/fjQTitgVaRNH5wCoHynaWysjZ+VH68drNsAvQYg4ArHsZUQNz0nHoEWRj41nzqkVn2RUlnWaEOTl2o1Ppg==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.4.tgz", + "integrity": "sha512-FbjV6DJLgKRetMYFBA1UXCroCiED/Ckr53/ba9wivyd7D/Xw9fpo0T6zXzCnxQwyvkyrL7y6plgYhWhNjGxY5g==", "dependencies": { - "@vue/compiler-ssr": "3.5.1", - "@vue/shared": "3.5.1" + "@vue/compiler-ssr": "3.5.4", + "@vue/shared": "3.5.4" }, "peerDependencies": { - "vue": "3.5.1" + "vue": "3.5.4" } }, "node_modules/@vue/shared": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.1.tgz", - "integrity": "sha512-NdcTRoO4KuW2RSFgpE2c+E/R/ZHaRzWPxAGxhmxZaaqLh6nYCXx7lc9a88ioqOCxCaV2SFJmujkxbUScW7dNsQ==" + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.4.tgz", + "integrity": "sha512-L2MCDD8l7yC62Te5UUyPVpmexhL9ipVnYRw9CsWfm/BGRL5FwDX4a25bcJ/OJSD3+Hx+k/a8LDKcG2AFdJV3BA==" }, "node_modules/@vue/test-utils": { "version": "2.4.6", @@ -1820,91 +1557,19 @@ "vue-demi": "^0.13.11" }, "peerDependencies": { - "@vue/composition-api": "^1.0.0-rc.1", - "vue": "^2.0.0 || >=3.0.0" - }, - "peerDependenciesMeta": { - "@vue/composition-api": { - "optional": true - } - } - }, - "node_modules/@vuelidate/validators/node_modules/vue-demi": { - "version": "0.13.11", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", - "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", - "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/@vuepic/vue-datepicker": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@vuepic/vue-datepicker/-/vue-datepicker-4.5.1.tgz", - "integrity": "sha512-zdG37Q8iuwTPWnQEI9/WvabqmrDDfDLgdXUTW08FXHSbiHuNN2S+bVeN1Wm9yeD+onHgzEn6DiW6J3fYXEfa0Q==", - "dependencies": { - "date-fns": "^2.29.3", - "date-fns-tz": "^1.3.7" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "vue": ">=3.2.0" - } - }, - "node_modules/@vueuse/components": { - "version": "10.11.1", - "resolved": "https://registry.npmjs.org/@vueuse/components/-/components-10.11.1.tgz", - "integrity": "sha512-ThcreQCX/eq61sLkLKjigD4PQvs3Wy4zglICvQH9tP6xl87y5KsQEoizn6OI+R3hrOgwQHLJe7Y0wLLh3fBKcg==", - "dependencies": { - "@vueuse/core": "10.11.1", - "@vueuse/shared": "10.11.1", - "vue-demi": ">=0.14.8" - } - }, - "node_modules/@vueuse/components/node_modules/@vueuse/core": { - "version": "10.11.1", - "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.11.1.tgz", - "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", - "dependencies": { - "@types/web-bluetooth": "^0.0.20", - "@vueuse/metadata": "10.11.1", - "@vueuse/shared": "10.11.1", - "vue-demi": ">=0.14.8" + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^2.0.0 || >=3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/components/node_modules/@vueuse/metadata": { - "version": "10.11.1", - "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.11.1.tgz", - "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", - "funding": { - "url": "https://github.com/sponsors/antfu" + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } } }, - "node_modules/@vueuse/components/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "node_modules/@vuelidate/validators/node_modules/vue-demi": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.13.11.tgz", + "integrity": "sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==", "hasInstallScript": true, "bin": { "vue-demi-fix": "bin/vue-demi-fix.js", @@ -1984,77 +1649,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@vueuse/shared": { - "version": "10.11.1", - "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.11.1.tgz", - "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", - "dependencies": { - "vue-demi": ">=0.14.8" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/@vueuse/shared/node_modules/vue-demi": { - "version": "0.14.10", - "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.10.tgz", - "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", - "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/@webitel/ui-sdk": { - "version": "24.10.5", - "resolved": "https://registry.npmjs.org/@webitel/ui-sdk/-/ui-sdk-24.10.5.tgz", - "integrity": "sha512-T6RKu3rWmFRHQfTlb+l33PEUUG8KYCIo7P8rCKh1mStD5e0muRRe3Qf94o8Hgkhlq8EZduiKAHBm5q2p2Jna3A==", - "dependencies": { - "@floating-ui/vue": "^1.0.1", - "@morev/vue-transitions": "^3.0.2", - "@vuelidate/core": "^2.0.3", - "@vuelidate/validators": "^2.0.4", - "@vuepic/vue-datepicker": "^4.4.0", - "@vueuse/components": "^10.7.2", - "axios": "^1.7.1", - "clipboard-copy": "^4.0.1", - "csv-stringify": "^5.5.3", - "deep-copy": "^1.4.2", - "deep-equal": "^2.0.3", - "deepmerge": "^4.3.1", - "file-saver-es": "^2.0.5", - "is-valid-domain": "^0.1.6", - "jszip": "^3.5.0", - "jszip-utils": "^0.1.0", - "lodash": "^4.17.21", - "mitt": "3.0.1", - "path-browserify": "^1.0.1", - "plyr": "3.6.3", - "query-string": "^8.1.0", - "sortablejs": "^1.15.0", - "vue-i18n": "^9.2.2", - "vue-multiselect": "^3.0.0-beta.3", - "vue-observe-visibility": "^2.0.0-alpha.1", - "vue-router": "^4.1.6", - "webitel-sdk": "^24.8.1", - "xlsx": "^0.18.5" - } - }, "node_modules/abbrev": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-2.0.0.tgz", @@ -2065,9 +1659,10 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -2084,14 +1679,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/adler-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", - "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -2136,6 +1723,7 @@ "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" @@ -2319,8 +1907,7 @@ "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 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base": { "version": "0.11.2", @@ -2382,6 +1969,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { "node": ">=8" }, @@ -2389,6 +1977,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/birpc": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/birpc/-/birpc-0.2.17.tgz", + "integrity": "sha512-+hkTxhot+dWsLpp3gia5AkVHIsKlZybNT5gIYiDlNzJrmYPcTM9k5/w2uaj3IPpd7LlEYpmCj4Jj1nC41VhDFg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/bluebird": { "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", @@ -2421,6 +2018,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { "fill-range": "^7.1.1" }, @@ -2541,9 +2139,10 @@ } }, "node_modules/browserslist": { - "version": "4.23.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.3.tgz", - "integrity": "sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==", + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2559,8 +2158,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001646", - "electron-to-chromium": "^1.5.4", + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", "node-releases": "^2.0.18", "update-browserslist-db": "^1.1.0" }, @@ -2607,31 +2206,19 @@ "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==", "dev": true }, - "node_modules/c12": { - "version": "1.11.2", - "resolved": "https://registry.npmjs.org/c12/-/c12-1.11.2.tgz", - "integrity": "sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==", - "dependencies": { - "chokidar": "^3.6.0", - "confbox": "^0.1.7", - "defu": "^6.1.4", - "dotenv": "^16.4.5", - "giget": "^1.2.3", - "jiti": "^1.21.6", - "mlly": "^1.7.1", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "perfect-debounce": "^1.0.0", - "pkg-types": "^1.2.0", - "rc9": "^2.1.2" + "node_modules/bundle-name": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz", + "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==", + "dev": true, + "dependencies": { + "run-applescript": "^7.0.0" }, - "peerDependencies": { - "magicast": "^0.3.4" + "engines": { + "node": ">=18" }, - "peerDependenciesMeta": { - "magicast": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cac": { @@ -2700,9 +2287,10 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "version": "1.0.30001664", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001664.tgz", + "integrity": "sha512-AmE7k4dXiNKQipgn7a2xg558IRqPN3jMQY/rOsbxDhrd0tyChwbITBfiwtnqz8bi2M5mIWbxAYBvk7W7QBUS2g==", + "dev": true, "funding": [ { "type": "opencollective", @@ -2718,16 +2306,14 @@ } ] }, - "node_modules/cfb": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", - "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", - "dependencies": { - "adler-32": "~1.3.0", - "crc-32": "~1.2.0" - }, - "engines": { - "node": ">=0.8" + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" } }, "node_modules/chai": { @@ -2762,6 +2348,26 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/check-error": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", @@ -2775,6 +2381,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2794,14 +2401,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", - "engines": { - "node": ">=10" - } - }, "node_modules/cipher-base": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", @@ -2812,14 +2411,6 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/citty": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/citty/-/citty-0.1.6.tgz", - "integrity": "sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==", - "dependencies": { - "consola": "^3.2.3" - } - }, "node_modules/class-utils": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", @@ -2869,25 +2460,6 @@ "node": ">=0.10.0" } }, - "node_modules/clipboard-copy": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/clipboard-copy/-/clipboard-copy-4.0.1.tgz", - "integrity": "sha512-wOlqdqziE/NNTUJsfSgXmBMIrYmfd5V0HCGsR8uAKHcg+h9NENWINcfRjtWGU77wDHC8B8ijV4hMTGYbrKovng==", - "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/clone": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", @@ -2897,14 +2469,6 @@ "node": ">=0.8" } }, - "node_modules/codepage": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", - "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", - "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", @@ -2947,6 +2511,16 @@ "node": ">= 0.8" } }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/commander": { "version": "10.0.1", "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", @@ -2956,11 +2530,6 @@ "node": ">=14" } }, - "node_modules/compatx": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/compatx/-/compatx-0.1.8.tgz", - "integrity": "sha512-jcbsEAR81Bt5s1qOFymBufmCbXCXbk0Ql+K5ouj6gCyx2yHlu6AgmGIi9HxfKixpUDO5bCFJUHQ5uM6ecbTebw==" - }, "node_modules/component-emitter": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", @@ -2975,11 +2544,6 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "node_modules/confbox": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.7.tgz", - "integrity": "sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==" - }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -2990,14 +2554,6 @@ "proto-list": "~1.2.1" } }, - "node_modules/consola": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", - "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", - "engines": { - "node": "^14.18.0 || >=16.10.0" - } - }, "node_modules/console-browserify": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", @@ -3013,13 +2569,29 @@ "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/cookiejar": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==" }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "dev": true, + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -3029,31 +2601,11 @@ "node": ">=0.10.0" } }, - "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true }, "node_modules/create-ecdh": { "version": "4.0.4", @@ -3108,6 +2660,7 @@ "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -3285,16 +2838,6 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" }, - "node_modules/csv-stringify": { - "version": "5.6.5", - "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-5.6.5.tgz", - "integrity": "sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==" - }, - "node_modules/custom-event-polyfill": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/custom-event-polyfill/-/custom-event-polyfill-1.0.7.tgz", - "integrity": "sha512-TDDkd5DkaZxZFM8p+1I3yAlvM3rSr1wbrOliG4yJiwinMZN8z/iGL7BTlDkrJcYTmgUSb4ywVCc3ZaUtOtC76w==" - }, "node_modules/data-view-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", @@ -3346,35 +2889,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/date-fns": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", - "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", - "dependencies": { - "@babel/runtime": "^7.21.0" - }, - "engines": { - "node": ">=0.11" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/date-fns" - } - }, - "node_modules/date-fns-tz": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/date-fns-tz/-/date-fns-tz-1.3.8.tgz", - "integrity": "sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==", - "peerDependencies": { - "date-fns": ">=2.0.0" - } - }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -3385,14 +2905,6 @@ } } }, - "node_modules/decode-uri-component": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.4.1.tgz", - "integrity": "sha512-+8VxcR21HhTy8nOt6jf20w0c9CADrw1O8d+VZ/YzzCt4bJ3uBjw+D1q2osAB8RnpwwaeYBxy0HyKQxD5JBMuuQ==", - "engines": { - "node": ">=14.16" - } - }, "node_modules/deep-copy": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/deep-copy/-/deep-copy-1.4.2.tgz", @@ -3447,12 +2959,32 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/default-browser": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", + "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "dev": true, + "dependencies": { + "bundle-name": "^4.1.0", + "default-browser-id": "^5.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-browser-id": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", + "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/define-data-property": { @@ -3471,6 +3003,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz", + "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/define-properties": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", @@ -3499,11 +3043,6 @@ "node": ">=0.10.0" } }, - "node_modules/defu": { - "version": "6.1.4", - "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", - "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==" - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -3512,6 +3051,15 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "peer": true, + "engines": { + "node": ">=6" + } + }, "node_modules/des.js": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.1.0.tgz", @@ -3522,10 +3070,18 @@ "minimalistic-assert": "^1.0.0" } }, - "node_modules/destr": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/destr/-/destr-2.0.3.tgz", - "integrity": "sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==" + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "peer": true, + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/dezalgo": { "version": "1.0.4", @@ -3626,17 +3182,6 @@ "domelementtype": "1" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3697,9 +3242,10 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.18", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.18.tgz", - "integrity": "sha512-1OfuVACu+zKlmjsNdcJuVQuVE61sZOLbNM4JAQ1Rvh6EOj0/EUKhMJjRH73InPlXSh8HIJk1cVZ8pyOV/FMdUQ==" + "version": "1.5.29", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.29.tgz", + "integrity": "sha512-PF8n2AlIhCKXQ+gTpiJi0VhcHDb69kYX4MtCiivctc2QD3XuNZ/XIOlbGzt7WAjjEev0TtaH6Cu3arZExm5DOw==", + "dev": true }, "node_modules/elliptic": { "version": "6.5.5", @@ -3745,7 +3291,16 @@ "node": ">=0.12" }, "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-stack-parser-es": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/error-stack-parser-es/-/error-stack-parser-es-0.1.5.tgz", + "integrity": "sha512-xHku1X40RO+fO8yJ8Wh2f2rZWVjqyhb1zgq1yZ8aZRQkv6OOKhKWRUaht3eSCUbAOBaKIgM+ykwFLE+QUxgGeg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, "node_modules/es-abstract": { @@ -3931,6 +3486,7 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, "engines": { "node": ">=6" } @@ -4185,6 +3741,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^8.0.1", @@ -4292,40 +3849,12 @@ "node": ">=0.10.0" } }, - "node_modules/fast-copy": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" - }, "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==", "dev": true }, - "node_modules/fast-equals": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/fast-equals/-/fast-equals-5.0.1.tgz", - "integrity": "sha512-WF1Wi8PwwSY7/6Kx0vKXtw8RwuSGoM1bvDaJbu7MxDlR1vovZjIAKrnzyrThgAjm6JDTu0fVgWXDlMGspodfoQ==", - "engines": { - "node": ">=6.0.0" - } - }, - "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==", - "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-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -4347,6 +3876,7 @@ "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, "dependencies": { "reusify": "^1.0.4" } @@ -4363,15 +3893,11 @@ "node": ">=16.0.0" } }, - "node_modules/file-saver-es": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/file-saver-es/-/file-saver-es-2.0.5.tgz", - "integrity": "sha512-Kg0lt+is9nOyi/VDms9miScNGot25jVFbjFccXuCL/shd2Q+rt70MALxHVkXllsX83JEBLiHQNjDPGd/6FIOoQ==" - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -4379,17 +3905,6 @@ "node": ">=8" } }, - "node_modules/filter-obj": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-5.1.0.tgz", - "integrity": "sha512-qWeTREPoT7I0bifpPUXtxkZJ1XJzxWtfoWWkdVGqa+eCr3SHW/Ocp89o8vLvbUuQnadybJpjOKu4V+RwO6sGng==", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/find-up": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", @@ -4426,9 +3941,9 @@ "dev": true }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "funding": [ { "type": "individual", @@ -4504,14 +4019,6 @@ "url": "https://ko-fi.com/tunnckoCore/commissions" } }, - "node_modules/frac": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", - "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -4524,39 +4031,18 @@ "node": ">=0.10.0" } }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/fs-minipass/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=14.14" } }, "node_modules/function-bind": { @@ -4597,6 +4083,7 @@ "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, "engines": { "node": ">=6.9.0" } @@ -4632,6 +4119,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, "engines": { "node": ">=16" }, @@ -4665,24 +4153,6 @@ "node": ">=0.10.0" } }, - "node_modules/giget": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/giget/-/giget-1.2.3.tgz", - "integrity": "sha512-8EHPljDvs7qKykr6uw8b+lqLiUc/vUg+KVTI0uND4s63TdsZM2Xus3mflvF0DDG9SiM4RlCkFGL+7aAjRmV7KA==", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "defu": "^6.1.4", - "node-fetch-native": "^1.6.3", - "nypm": "^0.3.8", - "ohash": "^1.1.3", - "pathe": "^1.1.2", - "tar": "^6.2.0" - }, - "bin": { - "giget": "dist/cli.mjs" - } - }, "node_modules/glob": { "version": "10.4.1", "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", @@ -4709,6 +4179,7 @@ "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" }, @@ -4768,25 +4239,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "14.0.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", - "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", - "dependencies": { - "@sindresorhus/merge-streams": "^2.1.0", - "fast-glob": "^3.3.2", - "ignore": "^5.2.4", - "path-type": "^5.0.0", - "slash": "^5.1.0", - "unicorn-magic": "^0.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -4798,6 +4250,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/graphlib": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", @@ -4807,9 +4265,9 @@ } }, "node_modules/happy-dom": { - "version": "15.7.3", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-15.7.3.tgz", - "integrity": "sha512-w3RUaYNXFJX5LiNVhOJLK4GqCB1bFj1FvELtpon3HrN8gUpS09V0Vvm4/BBRRj7mLUE1+ch8PKv1JxEp/0IHjA==", + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-15.7.4.tgz", + "integrity": "sha512-r1vadDYGMtsHAAsqhDuk4IpPvr6N8MGKy5ntBo7tSdim+pWDxus2PNqOcOt8LuDZ4t3KJHE+gCuzupcx/GKnyQ==", "dev": true, "dependencies": { "entities": "^4.5.0", @@ -4990,11 +4448,6 @@ "node": ">=4" } }, - "node_modules/hash-sum": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz", - "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==" - }, "node_modules/hash.js": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", @@ -5016,6 +4469,42 @@ "node": ">= 0.4" } }, + "node_modules/hast-util-to-html": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.2.tgz", + "integrity": "sha512-RP5wNpj5nm1Z8cloDv4Sl4RS8jH5HYa0v93YB6Wb4poEzgMo/dAAL0KcT4974dCjcNG5pkLqTImeFHHCwwfY3g==", + "peer": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-whitespace": "^3.0.0", + "html-void-elements": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "stringify-entities": "^4.0.0", + "zwitch": "^2.0.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "peer": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -5047,7 +4536,8 @@ "node_modules/hookable": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/hookable/-/hookable-5.5.3.tgz", - "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==" + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "dev": true }, "node_modules/html-escaper": { "version": "2.0.2", @@ -5055,6 +4545,28 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/html-void-elements": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/htmlparser2": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", @@ -5099,6 +4611,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, "engines": { "node": ">=16.17.0" } @@ -5124,9 +4637,10 @@ ] }, "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "dev": true, "engines": { "node": ">= 4" } @@ -5143,11 +4657,6 @@ "node": ">=0.10.0" } }, - "node_modules/immediate": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", - "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" - }, "node_modules/immutable": { "version": "4.3.6", "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz", @@ -5260,6 +4769,7 @@ "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" }, @@ -5365,6 +4875,21 @@ "node": ">= 0.4" } }, + "node_modules/is-docker": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", + "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", @@ -5378,6 +4903,7 @@ "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" } @@ -5410,6 +4936,7 @@ "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" }, @@ -5417,6 +4944,24 @@ "node": ">=0.10.0" } }, + "node_modules/is-inside-container": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", + "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==", + "dev": true, + "dependencies": { + "is-docker": "^3.0.0" + }, + "bin": { + "is-inside-container": "cli.js" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-map": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", @@ -5460,6 +5005,7 @@ "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" } @@ -5561,6 +5107,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -5611,14 +5158,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-valid-domain": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-valid-domain/-/is-valid-domain-0.1.6.tgz", - "integrity": "sha512-ZKtq737eFkZr71At8NxOFcP9O1K89gW3DkdrGMpp1upr/ueWjj+Weh4l9AI4rN0Gt8W2M1w7jrG2b/Yv83Ljpg==", - "dependencies": { - "punycode": "^2.1.1" - } - }, "node_modules/is-weakmap": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", @@ -5657,6 +5196,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "dev": true, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, "node_modules/is-windows": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", @@ -5666,6 +5217,21 @@ "node": ">=0.10.0" } }, + "node_modules/is-wsl": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", + "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "dev": true, + "dependencies": { + "is-inside-container": "^1.0.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/isarray": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", @@ -5674,7 +5240,8 @@ "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true }, "node_modules/isobject": { "version": "2.1.0", @@ -5771,14 +5338,6 @@ "@pkgjs/parseargs": "^0.11.0" } }, - "node_modules/jiti": { - "version": "1.21.6", - "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", - "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", - "bin": { - "jiti": "bin/jiti.js" - } - }, "node_modules/js-base64": { "version": "2.6.4", "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", @@ -5816,9 +5375,10 @@ } }, "node_modules/js-tokens": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.0.tgz", - "integrity": "sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true }, "node_modules/js-yaml": { "version": "4.1.0", @@ -5836,6 +5396,7 @@ "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, "bin": { "jsesc": "bin/jsesc" }, @@ -5919,6 +5480,7 @@ "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, "bin": { "json5": "lib/cli.js" }, @@ -5926,6 +5488,18 @@ "node": ">=6" } }, + "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/jssip": { "version": "3.10.1", "resolved": "https://registry.npmjs.org/jssip/-/jssip-3.10.1.tgz", @@ -5938,22 +5512,6 @@ "sdp-transform": "^2.14.1" } }, - "node_modules/jszip": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", - "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } - }, - "node_modules/jszip-utils": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/jszip-utils/-/jszip-utils-0.1.0.tgz", - "integrity": "sha512-tBNe0o3HAf8vo0BrOYnLPnXNo5A3KsRMnkBFYjh20Y3GPYGfgyoclEMgvVchx0nnL+mherPi74yLPIusHUQpZg==" - }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -5972,18 +5530,11 @@ "node": ">=0.10.0" } }, - "node_modules/klona": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", - "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", - "engines": { - "node": ">= 8" - } - }, - "node_modules/knitwork": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/knitwork/-/knitwork-1.1.0.tgz", - "integrity": "sha512-oHnmiBUVHz1V+URE77PNot2lv3QiYU2zQf1JjOVkMt3YDKGbu8NAFr+c4mcNOhdsGrB/VpVbRwPwhiXrPhxQbw==" + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "dev": true }, "node_modules/levn": { "version": "0.4.1", @@ -5998,14 +5549,6 @@ "node": ">= 0.8.0" } }, - "node_modules/lie": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", - "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", - "dependencies": { - "immediate": "~3.0.5" - } - }, "node_modules/linkify-html": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/linkify-html/-/linkify-html-4.1.3.tgz", @@ -6053,26 +5596,6 @@ "json5": "lib/cli.js" } }, - "node_modules/loadjs": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loadjs/-/loadjs-4.3.0.tgz", - "integrity": "sha512-vNX4ZZLJBeDEOBvdr2v/F+0aN5oMuPu7JTqrMwp+DtgK+AryOlpy6Xtm2/HpNr+azEa828oQjOtWsB6iDtSfSQ==" - }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", - "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -6117,6 +5640,12 @@ "node": "14 || >=16.14" } }, + "node_modules/lunr": { + "version": "2.3.9", + "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", + "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==", + "peer": true + }, "node_modules/magic-string": { "version": "0.30.11", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", @@ -6129,7 +5658,7 @@ "version": "0.3.4", "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", - "devOptional": true, + "dev": true, "dependencies": { "@babel/parser": "^7.24.4", "@babel/types": "^7.24.0", @@ -6199,6 +5728,27 @@ "safe-buffer": "^5.1.2" } }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "peer": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/mdn-data": { "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", @@ -6216,37 +5766,120 @@ "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", "dev": true, "dependencies": { - "is-plain-obj": "^1.1" - }, - "engines": { - "node": ">=4" + "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 + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", + "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "peer": true, + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", + "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "peer": true + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", + "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "peer": true, + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/merge-stream": { + "node_modules/micromark-util-symbol": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "engines": { - "node": ">= 8" - } + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", + "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "peer": true }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } + "node_modules/micromark-util-types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", + "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "peer": true }, "node_modules/micromatch": { "version": "4.0.7", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dev": true, "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -6308,6 +5941,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, "engines": { "node": ">=12" }, @@ -6357,33 +5991,11 @@ "node": ">=16 || 14 >=14.17" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/minizlib/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mitt": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", - "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "dev": true }, "node_modules/mixin-deep": { "version": "1.3.2", @@ -6410,40 +6022,19 @@ "node": ">=0.10.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "bin": { - "mkdirp": "bin/cmd.js" - }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, "engines": { "node": ">=10" } }, - "node_modules/mlly": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.1.tgz", - "integrity": "sha512-rrVRZRELyQzrIUAVMHxP97kv+G786pHmOKzuFII8zDYahFBS7qnHh2AlYSl1GAHhaMPCz6/oHjVMcfFYgFYHgA==", - "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.1.1", - "ufo": "^1.5.3" - } - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "engines": { - "node": ">=4" - } - }, "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==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoid": { "version": "3.3.7", @@ -6551,15 +6142,11 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/node-fetch-native": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/node-fetch-native/-/node-fetch-native-1.6.4.tgz", - "integrity": "sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ==" - }, "node_modules/node-releases": { "version": "2.0.18", "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==" + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true }, "node_modules/node-stdlib-browser": { "version": "1.2.0", @@ -6638,6 +6225,7 @@ "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" } @@ -6646,6 +6234,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, "dependencies": { "path-key": "^4.0.0" }, @@ -6660,6 +6249,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, "engines": { "node": ">=12" }, @@ -6679,25 +6269,6 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/nypm": { - "version": "0.3.11", - "resolved": "https://registry.npmjs.org/nypm/-/nypm-0.3.11.tgz", - "integrity": "sha512-E5GqaAYSnbb6n1qZyik2wjPDZON43FqOJO59+3OkWrnmQtjggrMOVnsyzfjxp/tS6nlYJBA4zRA5jSM2YaadMg==", - "dependencies": { - "citty": "^0.1.6", - "consola": "^3.2.3", - "execa": "^8.0.1", - "pathe": "^1.1.2", - "pkg-types": "^1.2.0", - "ufo": "^1.5.4" - }, - "bin": { - "nypm": "dist/cli.mjs" - }, - "engines": { - "node": "^14.16.0 || >=16.10.0" - } - }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6848,11 +6419,6 @@ "node": ">=0.10.0" } }, - "node_modules/ohash": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/ohash/-/ohash-1.1.3.tgz", - "integrity": "sha512-zuHHiGTYTA1sYJ/wZN+t5HKZaH23i4yI1HMwbuXm24Nid7Dv0KcuRlKoNKS9UNfAVSBlnGLcuQrnOKWOZoEGaw==" - }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -6865,6 +6431,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, "dependencies": { "mimic-fn": "^4.0.0" }, @@ -6875,6 +6442,36 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/oniguruma-to-js": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.0.tgz", + "integrity": "sha512-GwNFPQygkpDjO9MOr54Rqi01dGS+h9VAS//Qxz9lTN5B09CxqiIc7rydvdV+Ex2Z8Vk+zqfHH7hU6ePn8uf+Mg==", + "peer": true, + "dependencies": { + "regex": "^4.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/open": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", + "integrity": "sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==", + "dev": true, + "dependencies": { + "default-browser": "^5.2.1", + "define-lazy-prop": "^3.0.0", + "is-inside-container": "^1.0.0", + "is-wsl": "^3.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -6931,7 +6528,8 @@ "node_modules/pako": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true }, "node_modules/parent-module": { "version": "1.0.1", @@ -6994,7 +6592,8 @@ "node_modules/path-browserify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "dev": true }, "node_modules/path-exists": { "version": "4.0.0", @@ -7009,6 +6608,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, "engines": { "node": ">=8" } @@ -7044,21 +6644,11 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-type": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", - "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pathe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==" + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true }, "node_modules/pathval": { "version": "2.0.0", @@ -7088,17 +6678,19 @@ "node_modules/perfect-debounce": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-1.0.0.tgz", - "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==" + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "dev": true }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", + "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==" }, "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" }, @@ -7118,28 +6710,6 @@ "node": ">=10" } }, - "node_modules/pkg-types": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.0.tgz", - "integrity": "sha512-+ifYuSSqOQ8CqP4MbZA5hDpb97n3E8SVWdJe+Wms9kj745lmd3b7EZJiqvmLwAlmRfjrI7Hi5z3kdBJ93lFNPA==", - "dependencies": { - "confbox": "^0.1.7", - "mlly": "^1.7.1", - "pathe": "^1.1.2" - } - }, - "node_modules/plyr": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/plyr/-/plyr-3.6.3.tgz", - "integrity": "sha512-AEwp5G9BtOK0s2mZhwtfipkCqLm1yPN8iUGcmAtyByDK1fcYoOJiDXZeLf+e7OTjsWi4wRp8Q1VJ+gZjTmVeqA==", - "dependencies": { - "core-js": "^3.7.0", - "custom-event-polyfill": "^1.0.7", - "loadjs": "^4.2.0", - "rangetouch": "^2.0.1", - "url-polyfill": "^1.1.12" - } - }, "node_modules/posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -7289,7 +6859,18 @@ "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==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } }, "node_modules/proto-list": { "version": "1.2.4", @@ -7352,22 +6933,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/query-string": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-8.2.0.tgz", - "integrity": "sha512-tUZIw8J0CawM5wyGBiDOAp7ObdRQh4uBor/fUR9ZjmbZVvw95OD9If4w3MQxr99rg0DJZ/9CIORcpEqU5hQG7g==", - "dependencies": { - "decode-uri-component": "^0.4.1", - "filter-obj": "^5.1.0", - "split-on-first": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/querystring-es3": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", @@ -7381,6 +6946,7 @@ "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", @@ -7415,24 +6981,11 @@ "safe-buffer": "^5.1.0" } }, - "node_modules/rangetouch": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/rangetouch/-/rangetouch-2.0.1.tgz", - "integrity": "sha512-sln+pNSc8NGaHoLzwNBssFSf/rSYkqeBXzX1AtJlkJiUaVSJSbRAWJk+4omsXkN+EJalzkZhWQ3th1m0FpR5xA==" - }, - "node_modules/rc9": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/rc9/-/rc9-2.1.2.tgz", - "integrity": "sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==", - "dependencies": { - "defu": "^6.1.4", - "destr": "^2.0.3" - } - }, "node_modules/readable-stream": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -7446,12 +6999,14 @@ "node_modules/readable-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true }, "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" }, @@ -7459,10 +7014,11 @@ "node": ">=8.10.0" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + "node_modules/regex": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/regex/-/regex-4.3.2.tgz", + "integrity": "sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==", + "peer": true }, "node_modules/regex-not": { "version": "1.0.2", @@ -7583,11 +7139,18 @@ "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==", + "dev": true + }, "node_modules/ripemd160": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", @@ -7599,10 +7162,10 @@ } }, "node_modules/rollup": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.2.tgz", - "integrity": "sha512-e3TapAgYf9xjdLvKQCkQTnbTKd4a6jwlpQSJJFokHGaX2IVjoEqkIIhiQfqsi0cdwlOD+tQGuOd5AJkc5RngBw==", - "devOptional": true, + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.3.tgz", + "integrity": "sha512-7sqRtBNnEbcBtMeRVc6VRsJMmpI+JU1z9VTvW8D4gXIYQFz0aLcsE6rRkyghZkLfEgUZgVvOG7A5CVz/VW5GIA==", + "dev": true, "dependencies": { "@types/estree": "1.0.5" }, @@ -7614,29 +7177,42 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.21.2", - "@rollup/rollup-android-arm64": "4.21.2", - "@rollup/rollup-darwin-arm64": "4.21.2", - "@rollup/rollup-darwin-x64": "4.21.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.21.2", - "@rollup/rollup-linux-arm-musleabihf": "4.21.2", - "@rollup/rollup-linux-arm64-gnu": "4.21.2", - "@rollup/rollup-linux-arm64-musl": "4.21.2", - "@rollup/rollup-linux-powerpc64le-gnu": "4.21.2", - "@rollup/rollup-linux-riscv64-gnu": "4.21.2", - "@rollup/rollup-linux-s390x-gnu": "4.21.2", - "@rollup/rollup-linux-x64-gnu": "4.21.2", - "@rollup/rollup-linux-x64-musl": "4.21.2", - "@rollup/rollup-win32-arm64-msvc": "4.21.2", - "@rollup/rollup-win32-ia32-msvc": "4.21.2", - "@rollup/rollup-win32-x64-msvc": "4.21.2", + "@rollup/rollup-android-arm-eabi": "4.21.3", + "@rollup/rollup-android-arm64": "4.21.3", + "@rollup/rollup-darwin-arm64": "4.21.3", + "@rollup/rollup-darwin-x64": "4.21.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.21.3", + "@rollup/rollup-linux-arm-musleabihf": "4.21.3", + "@rollup/rollup-linux-arm64-gnu": "4.21.3", + "@rollup/rollup-linux-arm64-musl": "4.21.3", + "@rollup/rollup-linux-powerpc64le-gnu": "4.21.3", + "@rollup/rollup-linux-riscv64-gnu": "4.21.3", + "@rollup/rollup-linux-s390x-gnu": "4.21.3", + "@rollup/rollup-linux-x64-gnu": "4.21.3", + "@rollup/rollup-linux-x64-musl": "4.21.3", + "@rollup/rollup-win32-arm64-msvc": "4.21.3", + "@rollup/rollup-win32-ia32-msvc": "4.21.3", + "@rollup/rollup-win32-x64-msvc": "4.21.3", "fsevents": "~2.3.2" } }, + "node_modules/run-applescript": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.0.0.tgz", + "integrity": "sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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", @@ -7721,11 +7297,6 @@ "node": ">=14.0.0" } }, - "node_modules/scule": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/scule/-/scule-1.3.0.tgz", - "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==" - }, "node_modules/sdp-transform": { "version": "2.14.2", "resolved": "https://registry.npmjs.org/sdp-transform/-/sdp-transform-2.14.2.tgz", @@ -7735,9 +7306,9 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "bin": { "semver": "bin/semver.js" }, @@ -7793,7 +7364,8 @@ "node_modules/setimmediate": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true }, "node_modules/sha.js": { "version": "2.4.11", @@ -7812,6 +7384,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, "dependencies": { "shebang-regex": "^3.0.0" }, @@ -7823,10 +7396,25 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, "engines": { "node": ">=8" } }, + "node_modules/shiki": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.17.5.tgz", + "integrity": "sha512-8i4+fbTlnJPUYkgBEZ92QKmK3Gr23n2YVwqwyz0e+VmXqKpJZuV6P/CY00gSGHDXXjXT5l0BLwsMfO2Pe52TLQ==", + "peer": true, + "dependencies": { + "@shikijs/core": "1.17.5", + "@shikijs/engine-javascript": "1.17.5", + "@shikijs/engine-oniguruma": "1.17.5", + "@shikijs/types": "1.17.5", + "@shikijs/vscode-textmate": "^9.2.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -7854,6 +7442,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, "engines": { "node": ">=14" }, @@ -7861,15 +7450,18 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", - "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", - "engines": { - "node": ">=14.16" + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10" } }, "node_modules/snapdragon": { @@ -7978,11 +7570,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, - "node_modules/sortablejs": { - "version": "1.15.3", - "resolved": "https://registry.npmjs.org/sortablejs/-/sortablejs-1.15.3.tgz", - "integrity": "sha512-zdK3/kwwAK1cJgy1rwl1YtNTbRmc8qW/+vgXf75A7NHag5of4pyI6uK86ktmQETyWRH7IGaE73uZOOBcGxgqZg==" - }, "node_modules/source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -8030,15 +7617,23 @@ "deprecated": "See https://github.com/lydell/source-map-url#deprecated", "dev": true }, - "node_modules/split-on-first": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-3.0.0.tgz", - "integrity": "sha512-qxQJTx2ryR0Dw0ITYyekNQWpz6f8dGd7vffGNflQQ3Iqj9NJ6qiZ7ELpZsJ/QBhIVAiDfXdag3+Gp8RvWa62AA==", - "engines": { - "node": ">=12" - }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "peer": true, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, "node_modules/split-string": { @@ -8083,17 +7678,6 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, - "node_modules/ssf": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", - "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", - "dependencies": { - "frac": "~1.1.2" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/stackback": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", @@ -8141,7 +7725,8 @@ "node_modules/std-env": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==" + "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", + "dev": true }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", @@ -8335,6 +7920,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "peer": true, + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -8364,6 +7963,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, "engines": { "node": ">=12" }, @@ -8383,17 +7983,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strip-literal": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.1.0.tgz", - "integrity": "sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==", - "dependencies": { - "js-tokens": "^9.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/superagent": { "version": "7.1.6", "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", @@ -8429,6 +8018,18 @@ "node": ">= 6" } }, + "node_modules/superjson": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/superjson/-/superjson-2.2.1.tgz", + "integrity": "sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==", + "dev": true, + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -8699,6 +8300,12 @@ "integrity": "sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==", "dev": true }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, "node_modules/svgo": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", @@ -8733,30 +8340,6 @@ "node": ">= 10" } }, - "node_modules/tar": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", - "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", - "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "engines": { - "node": ">=8" - } - }, "node_modules/test-exclude": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", @@ -8819,6 +8402,12 @@ "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", "dev": true }, + "node_modules/tinyexec": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.0.tgz", + "integrity": "sha512-tVGE0mVJPGb0chKhqmsoosjsS+qUnJVGJpZgsHYQcGoPlG3B51R3PouqTgEGH2Dc9jjFyOqOpix6ZHNMXp1FZg==", + "dev": true + }, "node_modules/tinypool": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", @@ -8838,9 +8427,9 @@ } }, "node_modules/tinyspy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", - "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", "dev": true, "engines": { "node": ">=14.0.0" @@ -8897,6 +8486,7 @@ "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" }, @@ -8951,6 +8541,15 @@ "node": ">=0.10.0" } }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/traverse": { "version": "0.6.9", "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.9.tgz", @@ -8968,6 +8567,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/tslib": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", @@ -8992,17 +8601,6 @@ "node": ">= 0.8.0" } }, - "node_modules/type-fest": { - "version": "4.26.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", - "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", @@ -9096,6 +8694,63 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedoc": { + "version": "0.26.7", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.7.tgz", + "integrity": "sha512-gUeI/Wk99vjXXMi8kanwzyhmeFEGv1LTdTQsiyIsmSYsBebvFxhbcyAx7Zjo4cMbpLGxM4Uz3jVIjksu/I2v6Q==", + "peer": true, + "dependencies": { + "lunr": "^2.3.9", + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.16.2", + "yaml": "^2.5.1" + }, + "bin": { + "typedoc": "bin/typedoc" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x" + } + }, + "node_modules/typedoc-github-theme": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/typedoc-github-theme/-/typedoc-github-theme-0.1.2.tgz", + "integrity": "sha512-GFwQeq+z4FMtA9u2+wBx/UvzaX6t3xueigv6Jrt1G8JQLLyYuFfWwE3ESuKzpLfDu1+29GK4n70GbIqFRG+gaw==", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "typedoc": "^0.26.0" + } + }, + "node_modules/typedoc/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==", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typedoc/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "peer": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/typescript": { "version": "5.4.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", @@ -9114,11 +8769,6 @@ "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==" }, - "node_modules/ufo": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", - "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==" - }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -9134,113 +8784,96 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/uncrypto": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", - "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" - }, - "node_modules/unctx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unctx/-/unctx-2.3.1.tgz", - "integrity": "sha512-PhKke8ZYauiqh3FEMVNm7ljvzQiph0Mt3GBRve03IJm7ukfaON2OBK795tLwhbyfzknuRRkW0+Ze+CQUmzOZ+A==", + "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": { - "acorn": "^8.8.2", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.0", - "unplugin": "^1.3.1" + "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/unctx/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "peer": true, "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", - "engines": { - "node": ">=18" + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/unimport": { - "version": "3.11.1", - "resolved": "https://registry.npmjs.org/unimport/-/unimport-3.11.1.tgz", - "integrity": "sha512-DuB1Uoq01LrrXTScxnwOoMSlTXxyKcULguFxbLrMDFcE/CO0ZWHpEiyhovN0mycPt7K6luAHe8laqvwvuoeUPg==", - "dependencies": { - "@rollup/pluginutils": "^5.1.0", - "acorn": "^8.12.1", - "escape-string-regexp": "^5.0.0", - "estree-walker": "^3.0.3", - "fast-glob": "^3.3.2", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.11", - "mlly": "^1.7.1", - "pathe": "^1.1.2", - "pkg-types": "^1.2.0", - "scule": "^1.3.0", - "strip-literal": "^2.1.0", - "unplugin": "^1.12.2" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unimport/node_modules/escape-string-regexp": { + "node_modules/unist-util-position": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", - "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", - "engines": { - "node": ">=12" + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "peer": true, + "dependencies": { + "@types/unist": "^3.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unimport/node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "peer": true, "dependencies": { - "@types/estree": "^1.0.0" + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "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, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "peer": true, "dependencies": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/unplugin": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.0.tgz", - "integrity": "sha512-cfkZeALGyW7tKYjZbi0G+pn0XnUFa0QvLIeLJEUUlnU0R8YYsBQnt5+h9Eu1B7AB7KETld+UBFI5lOeBL+msoQ==", + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "peer": true, "dependencies": { - "acorn": "^8.12.1", - "webpack-virtual-modules": "^0.6.2" + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "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": ">=14.0.0" - }, - "peerDependencies": { - "webpack-sources": "^3" - }, - "peerDependenciesMeta": { - "webpack-sources": { - "optional": true - } + "node": ">= 10.0.0" } }, "node_modules/unset-value": { @@ -9306,27 +8939,11 @@ "node": ">=0.10.0" } }, - "node_modules/untyped": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/untyped/-/untyped-1.4.2.tgz", - "integrity": "sha512-nC5q0DnPEPVURPhfPQLahhSTnemVtPzdx7ofiRxXpOB2SYnb3MfdU3DVGyJdS8Lx+tBWeAePO8BfU/3EgksM7Q==", - "dependencies": { - "@babel/core": "^7.23.7", - "@babel/standalone": "^7.23.8", - "@babel/types": "^7.23.6", - "defu": "^6.1.4", - "jiti": "^1.21.0", - "mri": "^1.2.0", - "scule": "^1.2.0" - }, - "bin": { - "untyped": "dist/cli.mjs" - } - }, "node_modules/update-browserslist-db": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", - "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, "funding": [ { "type": "opencollective", @@ -9342,8 +8959,8 @@ } ], "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -9377,11 +8994,6 @@ "qs": "^6.11.2" } }, - "node_modules/url-polyfill": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/url-polyfill/-/url-polyfill-1.1.12.tgz", - "integrity": "sha512-mYFmBHCapZjtcNHW0MDq9967t+z4Dmg5CJ0KqysK3+ZbyoNOWQHksGCTWwDhxGXllkWlOc10Xfko6v4a3ucM6A==" - }, "node_modules/url/node_modules/punycode": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", @@ -9415,10 +9027,38 @@ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "peer": true, + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "peer": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/vite": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.3.tgz", - "integrity": "sha512-IH+nl64eq9lJjFqU+/yrRnrHPVTlgy42/+IzbOdaFDVlyLgI/wDlf+FCobXLX1cT0X5+7LMyH1mIy2xJdLfo8Q==", + "version": "5.4.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.4.tgz", + "integrity": "sha512-RHFCkULitycHVTtelJ6jQLd+KSAAzOgEYorV32R2q++M6COBjKJR6BxqClwp5sf0XaBDjVMuJ9wnNfyAJwjMkA==", "dev": true, "dependencies": { "esbuild": "^0.21.3", @@ -9474,16 +9114,27 @@ } } }, + "node_modules/vite-hot-client": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/vite-hot-client/-/vite-hot-client-0.2.3.tgz", + "integrity": "sha512-rOGAV7rUlUHX89fP2p2v0A2WWvV3QMX2UYq0fRqsWSvFvev4atHWqjwGoKaZT1VTKyLGk533ecu3eyd0o59CAg==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, "node_modules/vite-node": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", - "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.0.tgz", + "integrity": "sha512-+ybYqBVUjYyIscoLzMWodus2enQDZOpGhcU6HdOVD6n8WZdk12w1GFL3mbnxLs7hPtRtqs1Wo5YF6/Tsr6fmhg==", "dev": true, "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.5", + "debug": "^4.3.6", "pathe": "^1.1.2", - "tinyrainbow": "^1.2.0", "vite": "^5.0.0" }, "bin": { @@ -9496,6 +9147,37 @@ "url": "https://opencollective.com/vitest" } }, + "node_modules/vite-plugin-inspect": { + "version": "0.8.7", + "resolved": "https://registry.npmjs.org/vite-plugin-inspect/-/vite-plugin-inspect-0.8.7.tgz", + "integrity": "sha512-/XXou3MVc13A5O9/2Nd6xczjrUwt7ZyI9h8pTnUMkr5SshLcb0PJUOVq2V+XVkdeU4njsqAtmK87THZuO2coGA==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.10", + "@rollup/pluginutils": "^5.1.0", + "debug": "^4.3.6", + "error-stack-parser-es": "^0.1.5", + "fs-extra": "^11.2.0", + "open": "^10.1.0", + "perfect-debounce": "^1.0.0", + "picocolors": "^1.0.1", + "sirv": "^2.0.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + } + } + }, "node_modules/vite-plugin-node-polyfills": { "version": "0.22.0", "resolved": "https://registry.npmjs.org/vite-plugin-node-polyfills/-/vite-plugin-node-polyfills-0.22.0.tgz", @@ -9527,30 +9209,71 @@ "vite": "^2 || ^3 || ^4 || ^5" } }, + "node_modules/vite-plugin-vue-devtools": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-devtools/-/vite-plugin-vue-devtools-7.4.6.tgz", + "integrity": "sha512-lOKur3qovCB3BQStL0qfHEoIusqya1ngfxfWuqn9DTa6h9rlw6+S3PV4geOP5YBGYQ4NW1hRX70OD8I+sYr1dA==", + "dev": true, + "dependencies": { + "@vue/devtools-core": "^7.4.6", + "@vue/devtools-kit": "^7.4.6", + "@vue/devtools-shared": "^7.4.6", + "execa": "^8.0.1", + "sirv": "^2.0.4", + "vite-plugin-inspect": "^0.8.7", + "vite-plugin-vue-inspector": "^5.2.0" + }, + "engines": { + "node": ">=v14.21.3" + }, + "peerDependencies": { + "vite": "^3.1.0 || ^4.0.0-0 || ^5.0.0-0" + } + }, + "node_modules/vite-plugin-vue-inspector": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-vue-inspector/-/vite-plugin-vue-inspector-5.2.0.tgz", + "integrity": "sha512-wWxyb9XAtaIvV/Lr7cqB1HIzmHZFVUJsTNm3yAxkS87dgh/Ky4qr2wDEWNxF23fdhVa3jQ8MZREpr4XyiuaRqA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.0", + "@babel/plugin-proposal-decorators": "^7.23.0", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-transform-typescript": "^7.22.15", + "@vue/babel-plugin-jsx": "^1.1.5", + "@vue/compiler-dom": "^3.3.4", + "kolorist": "^1.8.0", + "magic-string": "^0.30.4" + }, + "peerDependencies": { + "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0" + } + }, "node_modules/vitest": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", - "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.0.tgz", + "integrity": "sha512-XuuEeyNkqbfr0FtAvd9vFbInSSNY1ykCQTYQ0sj9wPy4hx+1gR7gqVNdW0AX2wrrM1wWlN5fnJDjF9xG6mYRSQ==", "dev": true, "dependencies": { - "@ampproject/remapping": "^2.3.0", - "@vitest/expect": "2.0.5", - "@vitest/pretty-format": "^2.0.5", - "@vitest/runner": "2.0.5", - "@vitest/snapshot": "2.0.5", - "@vitest/spy": "2.0.5", - "@vitest/utils": "2.0.5", + "@vitest/expect": "2.1.0", + "@vitest/mocker": "2.1.0", + "@vitest/pretty-format": "^2.1.0", + "@vitest/runner": "2.1.0", + "@vitest/snapshot": "2.1.0", + "@vitest/spy": "2.1.0", + "@vitest/utils": "2.1.0", "chai": "^5.1.1", - "debug": "^4.3.5", - "execa": "^8.0.1", - "magic-string": "^0.30.10", + "debug": "^4.3.6", + "magic-string": "^0.30.11", "pathe": "^1.1.2", "std-env": "^3.7.0", - "tinybench": "^2.8.0", + "tinybench": "^2.9.0", + "tinyexec": "^0.3.0", "tinypool": "^1.0.0", "tinyrainbow": "^1.2.0", "vite": "^5.0.0", - "vite-node": "2.0.5", + "vite-node": "2.1.0", "why-is-node-running": "^2.3.0" }, "bin": { @@ -9565,8 +9288,8 @@ "peerDependencies": { "@edge-runtime/vm": "*", "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.0.5", - "@vitest/ui": "2.0.5", + "@vitest/browser": "2.1.0", + "@vitest/ui": "2.1.0", "happy-dom": "*", "jsdom": "*" }, @@ -9598,15 +9321,15 @@ "dev": true }, "node_modules/vue": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.1.tgz", - "integrity": "sha512-k4UNnbPOEskodSxMtv+B9GljdB0C9ubZDOmW6vnXVGIfMqmEsY2+ohasjGguhGkMkrcP/oOrbH0dSD41x5JQFw==", + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.4.tgz", + "integrity": "sha512-3yAj2gkmiY+i7+22A1PWM+kjOVXjU74UPINcTiN7grIVPyFFI0lpGwHlV/4xydDmobaBn7/xmi+YG8HeSlCTcg==", "dependencies": { - "@vue/compiler-dom": "3.5.1", - "@vue/compiler-sfc": "3.5.1", - "@vue/runtime-dom": "3.5.1", - "@vue/server-renderer": "3.5.1", - "@vue/shared": "3.5.1" + "@vue/compiler-dom": "3.5.4", + "@vue/compiler-sfc": "3.5.4", + "@vue/runtime-dom": "3.5.4", + "@vue/server-renderer": "3.5.4", + "@vue/shared": "3.5.4" }, "peerDependencies": { "typescript": "*" @@ -9711,23 +9434,6 @@ "vue": "^3.0.0" } }, - "node_modules/vue-multiselect": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/vue-multiselect/-/vue-multiselect-3.0.0.tgz", - "integrity": "sha512-uupKdINgz7j83lQToCL7KkgQQxvG43el++hsR39YT9pCe1DwzUGmKzPxjVP6rqskXed5P6DtUASYAlCliW740Q==", - "engines": { - "node": ">= 14.18.1", - "npm": ">= 6.14.15" - } - }, - "node_modules/vue-observe-visibility": { - "version": "2.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/vue-observe-visibility/-/vue-observe-visibility-2.0.0-alpha.1.tgz", - "integrity": "sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==", - "peerDependencies": { - "vue": "^3.0.0" - } - }, "node_modules/vue-router": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.3.2.tgz", @@ -9763,16 +9469,17 @@ } }, "node_modules/webitel-sdk": { - "version": "24.8.1", - "resolved": "https://registry.npmjs.org/webitel-sdk/-/webitel-sdk-24.8.1.tgz", - "integrity": "sha512-abdjKyIX7OgykvRJwAAJiIZAyvCExGa9aA9obtXbSfQtMvrF9mTXVQFYv5STYWLQGgpU04Q8BSLp2nj+GSFOZQ==", + "version": "24.8.2", + "resolved": "https://registry.npmjs.org/webitel-sdk/-/webitel-sdk-24.8.2.tgz", + "integrity": "sha512-by1c089JhjVA6NeUuHNyRyqcmZOcEry6iaDoDqpxRYAxg1k5WoOCNyIYuJ7iOCpWls9krJ0ahkswmYw9EvKS7w==", "dependencies": { "@types/webrtc": "~0.0.41", "deep-copy": "1.4.2", "ee-ts": "1.0.1", "json-refs": "3.0.13", "jssip": "=3.10.1", - "query-string": "7.0.0" + "query-string": "7.0.0", + "typedoc-github-theme": "0.1.2" }, "peerDependencies": { "axios": "^1.6.8", @@ -9828,11 +9535,6 @@ "node": ">=4" } }, - "node_modules/webpack-virtual-modules": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", - "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==" - }, "node_modules/whatwg-mimetype": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", @@ -9846,6 +9548,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, "dependencies": { "isexe": "^2.0.0" }, @@ -9922,22 +9625,6 @@ "node": ">=8" } }, - "node_modules/wmf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", - "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/word": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", - "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", - "engines": { - "node": ">=0.8" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -10046,26 +9733,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xlsx": { - "version": "0.18.5", - "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", - "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", - "dependencies": { - "adler-32": "~1.3.0", - "cfb": "~1.2.1", - "codepage": "~1.15.0", - "crc-32": "~1.2.1", - "ssf": "~0.11.2", - "wmf": "~1.0.1", - "word": "~0.3.0" - }, - "bin": { - "xlsx": "bin/xlsx.njs" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", @@ -10085,9 +9752,22 @@ } }, "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } }, "node_modules/yocto-queue": { "version": "0.1.0", @@ -10100,6 +9780,16 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "peer": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index e4a3c548..46cf1453 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,10 @@ }, "type": "module", "dependencies": { - "@vue/compat": "^3.5.1", + "@vue/compat": "^3.4.27", "@vuelidate/core": "^2.0.3", "@vuelidate/validators": "^2.0.4", "@vueuse/core": "^11.0.3", - "@webitel/ui-sdk": "^24.10.5", "axios": "^1.7.7", "deep-equal": "^2.2.1", "dompurify": "^3.1.2", @@ -27,7 +26,7 @@ "vue-i18n": "^9.13.1", "vue-router": "^4.3.2", "vuex": "^4.1.0", - "webitel-sdk": "^24.4.16" + "webitel-sdk": "^24.8.1" }, "devDependencies": { "@vitejs/plugin-vue": "5.1.3", @@ -42,6 +41,7 @@ "vite": "^5.4.3", "vite-plugin-node-polyfills": "^0.22.0", "vite-plugin-svg-sprite": "^0.5.2", + "vite-plugin-vue-devtools": "^7.4.6", "vitest": "^2.0.5" } } diff --git a/src/app/api/PermissionsAPIService/APIPermissionsGetter.js b/src/app/api/PermissionsAPIService/APIPermissionsGetter.js new file mode 100644 index 00000000..90896020 --- /dev/null +++ b/src/app/api/PermissionsAPIService/APIPermissionsGetter.js @@ -0,0 +1,84 @@ +import { getDefaultGetListResponse, getDefaultGetParams } from '@webitel/ui-sdk/src/api/defaults/index.js'; +import applyTransform, { + camelToSnake, + generateUrl, + merge, + mergeEach, + notify, + sanitize, + snakeToCamel, + starToSearch, +} from '@webitel/ui-sdk/src/api/transformers/index.js'; +import instance from '../instance'; + +export default class APIPermissionsGetter { + nestedUrl = 'acl'; + + constructor(url) { + this.baseUrl = url; + + this.listGetter = async ({ parentId, ...params }) => { + const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id']; + + const defaultObject = { + user: false, + }; + + const url = applyTransform(params, [ + merge(getDefaultGetParams()), + starToSearch('search'), + (params) => ({ + ...params, + q: params.search, + }), + sanitize(fieldsToSend), + camelToSnake(), + generateUrl(`${this.baseUrl}/${parentId}/${this.nestedUrl}`), + ]); + try { + const response = await instance.get(url); + const { items, next } = applyTransform(response.data, [ + snakeToCamel(), + merge(getDefaultGetListResponse()), + ]); + return { + items: applyTransform(items, [ + mergeEach(defaultObject), + APIPermissionsGetter.handlePermissionsList, + ]), + next, + }; + } catch (err) { + throw applyTransform(err, [notify]); + } + }; + } + + static handlePermissionsList(items) { + return items.map((item) => ({ + ...item, + access: { + x: { + id: (item.granted.match(/x/g) || []).length + 1, + rule: 'x'.repeat((item.granted.match(/x/g) || []).length), + }, + r: { + id: (item.granted.match(/r/g) || []).length + 1, + rule: 'r'.repeat((item.granted.match(/r/g) || []).length), + }, + w: { + id: (item.granted.match(/w/g) || []).length + 1, + rule: 'w'.repeat((item.granted.match(/w/g) || []).length), + }, + d: { + id: (item.granted.match(/d/g) || []).length + 1, + rule: 'd'.repeat((item.granted.match(/d/g) || []).length), + }, + }, + })); + } + + async getList(params) { + return this.listGetter(params); + } +} diff --git a/src/app/api/PermissionsAPIService/APIPermissionsPatcher.js b/src/app/api/PermissionsAPIService/APIPermissionsPatcher.js new file mode 100644 index 00000000..56c49413 --- /dev/null +++ b/src/app/api/PermissionsAPIService/APIPermissionsPatcher.js @@ -0,0 +1,27 @@ +import applyTransform, { + camelToSnake, + notify, + snakeToCamel, +} from '@webitel/ui-sdk/src/api/transformers/index.js'; +import instance from '../instance'; + +export default class APIPermissionsPatcher { + constructor(baseUrl) { + this.baseUrl = baseUrl; + this.patcher = async ({ changes, id }) => { + const afterUrl = 'acl'; + const body = applyTransform(changes, [camelToSnake()]); + const url = `${baseUrl}/${id}/${afterUrl}`; + try { + const response = await instance.patch(url, body); + return applyTransform(response.data, [snakeToCamel()]); + } catch (err) { + throw applyTransform(err, [notify]); + } + }; + } + + async patchItem({ id, changes }) { + return this.patcher({ id, changes }); + } +} diff --git a/src/app/components/actions/delete-all-action.vue b/src/app/components/actions/delete-all-action.vue new file mode 100644 index 00000000..fedc2791 --- /dev/null +++ b/src/app/components/actions/delete-all-action.vue @@ -0,0 +1,41 @@ + + + + + + + {{ actionPanelDeleteTooltip }} + + + + + + + diff --git a/src/app/components/actions/index.js b/src/app/components/actions/index.js new file mode 100644 index 00000000..6f6968b7 --- /dev/null +++ b/src/app/components/actions/index.js @@ -0,0 +1,5 @@ +import DeleteAllAction from './delete-all-action.vue'; + +const actions = [DeleteAllAction]; + +export default actions; diff --git a/src/app/composables/useDummy.js b/src/app/composables/useDummy.js new file mode 100644 index 00000000..d013d538 --- /dev/null +++ b/src/app/composables/useDummy.js @@ -0,0 +1,58 @@ +import IsEmpty from '@webitel/ui-sdk/src/scripts/isEmpty'; +import getNamespacedState from '@webitel/ui-sdk/src/store/helpers/getNamespacedState'; +import { computed, ref, watch } from 'vue'; +import { useRoute } from 'vue-router'; +import { useStore } from 'vuex'; +import defaultDummyPicAfterSearchDark from '../assets/dummy-dark.svg'; +import defaultDummyPicAfterSearchLight from '../assets/dummy-light.svg'; + +export function useDummy({ + namespace, + showAction, + hiddenText, + dummyPic, + dummyText, + dummyPicAfterSearch, + dummyTextAfterSearch = 'objects.emptyResultSearch', +}) { + const store = useStore(); + const route = useRoute(); + + const dummy = ref(''); + + const dataList = computed(() => getNamespacedState(store.state, namespace).dataList); + const search = computed(() => getNamespacedState(store.state, namespace).search); + + const darkMode = computed(() => store.getters['appearance/DARK_MODE']); + const dummyImgAfterSearch = computed(() => { + if (dummyPicAfterSearch) return dummyPicAfterSearch; + return darkMode.value ? defaultDummyPicAfterSearchDark : defaultDummyPicAfterSearchLight; + }); + + watch( + () => dataList, + () => { + if (!dataList.value.length) { + if ( + IsEmpty(route?.query) + ? search.value + : Object.values(route.query).some((query) => query.length) + ) { + return (dummy.value = { + src: dummyImgAfterSearch, + text: dummyTextAfterSearch, + }); + } + return (dummy.value = { + src: dummyPic, + text: dummyText, + showAction, + hiddenText, + }); + } + return (dummy.value = ''); + }, + { deep: true }, + ); + return { dummy }; +} diff --git a/src/app/css/main.scss b/src/app/css/main.scss index db782d0a..039c7aa0 100644 --- a/src/app/css/main.scss +++ b/src/app/css/main.scss @@ -1,12 +1,21 @@ @import '@webitel/ui-sdk/src/css/main'; +@import './objects/table-page'; +@import './objects/objects'; //disables scrollbar on 100vh auth on small laptops body { + @extend %wt-scrollbar; @extend %typo-body-1; display: flex; min-width: 100%; min-height: 100%; color: var(--text-main-color); + background: var(--wt-page-wrapper-background-color); +} + +#app { + min-width: 100%; + min-height: 100%; } .wt-page-wrapper { @@ -25,6 +34,7 @@ body { .table-wrapper { flex-grow: 1; display: flex; + padding-top: var(--spacing-xs); flex-direction: column; gap: var(--spacing-xs); max-height: 100%; @@ -70,3 +80,74 @@ a { text-decoration: none; color: #000; } + +.mb-0 { + margin-bottom: 0; +} + +// helper class +.no-padding { + padding: 0; +} + +.box-shadow { + //box-shadow: 0px 5px 6px rgba(0, 0, 0, 0.2), 0px 3px 16px rgba(0, 0, 0, 0.12), 0px 9px 12px rgba(0, 0, 0, 0.14); + box-shadow: rgba(0, 0, 0, 0.08) 0 8px 18px; +} + +.icon-action { + cursor: pointer; + + &:before { + transition: var(--transition); + } + + &:hover:before { + color: #000; + } +} + +// helper underline class +.border-underline { + position: relative; + + &:before { + position: absolute; + right: 0; + bottom: 6px; + left: 0; + height: 1px; + content: ''; + } +} + +$scrollbar-bg-color: #EAEAEA; +$srollbar-thumb-color: var(--primary-color); +$srollbar-border-radius: 4px; + +.scrollbar { + // scrollbar itself + &::-webkit-scrollbar { + width: 4px; + height: 6px; + cursor: pointer; + background-color: $scrollbar-bg-color; + } + + // scrollable element + &::-webkit-scrollbar-thumb { + width: 4px; + height: 6px; + border-radius: $srollbar-border-radius; + background-color: $srollbar-thumb-color; + } +} + +.hidden { + pointer-events: none; + opacity: 0; +} + +.value-pair-wrap { + position: relative; +} diff --git a/src/app/css/objects/objects.scss b/src/app/css/objects/objects.scss new file mode 100644 index 00000000..d106d17b --- /dev/null +++ b/src/app/css/objects/objects.scss @@ -0,0 +1,164 @@ +// ----- new styles + +.tabs-page-wrapper { + display: flex; + flex-direction: column; + width: 100%; +} + +.wt-page-wrapper { + width: 100%; + + .main-container { + display: flex; + flex-direction: column; + width: 100%; + + & > section { + display: flex; + flex-direction: column; + height: 100%; + } + } +} + +// ----- old styles + +// inner content section +.object-content { + display: flex; + flex-direction: column; + box-sizing: border-box; + width: 100%; + min-height: 65vh; + padding: 30px; + border-radius: var(--border-radius); + background: #fff; + + .pagination { + margin: auto 0 0 auto; + padding-top: 28px; + } +} + +.main-section__wrapper { + display: flex; + flex-direction: column; + width: 100%; +} + +.content-wrapper { + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.btn-controls { + .btn { + margin-left: 28px; + } +} + +// SECTION HEADING +.content-header { + position: relative; + display: flex; + align-items: center; + flex-wrap: wrap; + justify-content: space-between; + margin: var(--spacing-sm) 0; + + .content-title { + @extend %typo-heading-3; + + + .hint { + top: -2px; + } + } + + // WRAP FOR SEARCH INPUT + .content-header__actions-wrap { + display: flex; + align-items: center; + gap: var(--table-actions-icon-gap); + } +} + +// GRID TEMPLATE FOR MODULE INPUTS +.object-input-grid { + display: grid; + align-items: flex-start; + grid-template-columns: 1fr 1fr; + grid-column-gap: 20px; + grid-row-gap: 16px; + + &__1-col { + grid-template-columns: 1fr; + } + + &__w50 { + width: 50%; + } +} + +.grid-w100 { + .object-input-grid { + grid-template-columns: 1fr; + } +} + +.grid-w50 { + .object-input-grid { + grid-template-columns: 50%; + } +} + +.value-pair { + display: grid; + align-items: center; + margin-bottom: 20px; + grid-template-columns: 1fr 1fr 24px; + grid-gap: 20px; +} + +.module-new .object-input-grid .select-preview { + margin-bottom: 20px; +} + +.module-new { + .new_w50 { + width: 50%; + + .form-input { + margin: 8px 0; + } + } + + &.object-with-tabs { + padding-top: 28px; + padding-right: 0; + padding-left: 0; + + .tabs-inner-component { + padding: 0 58px 38px 58px; + } + } +} + +.opened-calendar-work-week { + .vuetable tr { + border-bottom: transparent; + + &.day-start { + //border-top: 1px solid rgba(0, 0, 0, 0.1); + } + + &:last-child { + //border-bottom: 1px solid rgba(0, 0, 0, 0.1); + } + } +} + +.dummy-wrapper { + height: 100%; +} diff --git a/src/app/css/objects/table-page.scss b/src/app/css/objects/table-page.scss new file mode 100644 index 00000000..5b9e2246 --- /dev/null +++ b/src/app/css/objects/table-page.scss @@ -0,0 +1,60 @@ + +.actions-panel-wrapper { + display: flex; + + .filter-wrap { + flex: 1; + } + + .wt-table-actions { + height: fit-content; + margin-top: 24px; + } +} + +.table-wrapper { + display: flex; + flex: 1 1 100%; + flex-direction: column; + justify-content: space-between; + box-sizing: border-box; + width: 100%; + + .wt-table { + flex-grow: 1; + } + + .wt-pagination { + margin-top: 20px; + margin-left: auto; + } + + .table-action { + margin-left: 10px; + } + + /* + wrapper class for table content overflow: visible preserving table scroll itself + .table-wrapper>.table-wrapper__visible-scroll-wrapper>.wt-table + */ + .table-wrapper__visible-scroll-wrapper { + overflow: visible; + height: 100%; + + .wt-table { + overflow: visible; + } + } + + .table-wrapper__scroll-wrapper { + @extend %wt-scrollbar; + + overflow: auto; + height: 100%; + min-height: 0; + + .wt-table { + overflow: visible; + } + } +} diff --git a/src/app/locale/en/en.js b/src/app/locale/en/en.js index 3f688e82..27972838 100644 --- a/src/app/locale/en/en.js +++ b/src/app/locale/en/en.js @@ -6,6 +6,9 @@ import AccessMode import TimelineTaskStatusEnum from '../../../modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js'; +import CrmSections from '@webitel/ui-sdk/src/enums/WebitelApplications/CrmSections.enum'; +import CrmConfigurationSections from '@webitel/ui-sdk/src/enums/WebitelApplications/CrmConfigurationSections.enum'; + export default { crm: 'CRM', contacts: { @@ -85,4 +88,454 @@ export default { [AccessMode.MANAGE]: 'Allow with delegation', }, }, + startPage: { + [CrmSections.CONTACTS]: { + name: 'Contacts', + text: 'In this section, you can work with your contacts: clients, customers etc.', + }, + [CrmSections.CONFIGURATION]: { + name: 'Configuration', + text: 'In this section, you will set up the Case management process.', + }, + }, + configuration: { + [CrmConfigurationSections.LOOKUPS]: 'Lookups', + [CrmConfigurationSections.CONTACT_GROUPS]: 'Contact groups', + [CrmConfigurationSections.STATUSES]: 'Statuses', + [CrmConfigurationSections.SOURCES]: 'Sources', + }, + + validation: { + email: 'Should look email-like', + required: 'This field is required', + sameAs: 'Incorrect password', + gatewayHostValidator: 'Should look like IPv4 or FQDN', + ipValidator: 'Should look like IPv4', + macValidator: 'Should look like MAC', + minValue: 'Value should be at least', + maxValue: 'Value should be not much', + numeric: 'Should be numeric', + requiredArrayValue: 'Array should not be empty', + isPositiveValue: 'Value should be positive number', + cron: 'Invalid cron expression', + }, + + objects: { + all: 'All {entity}', + administration: 'Administration', + general: 'General', + new: 'New', + add: 'Add', + create: 'Create', + read: 'Read', + edit: 'Edit', + delete: 'Delete', + save: 'Save', + saved: 'Saved', + saveAs: 'Save as', + close: 'Close', + next: 'Next', + back: 'Back', + change: 'Change', + name: 'Name', + title: 'Title', + description: 'Description', + user: 'User', + users: 'Users', + action: 'Action', + allow: 'Allow', + password: 'Password', + history: 'History', + copy: 'Copy', + copied: 'Copied to clipboard!', + createdAt: 'Created', + createdBy: 'Created by', + importCSV: 'Import CSV', + online: 'Online', + offline: 'Offline', + on: 'On', + off: 'Off', + ok: 'Ok', + enabled: 'Enabled', + status: 'Status', + from: 'From', + to: 'To', + importJSON: 'Import JSON', + addNew: 'Add new', + provider: 'Provider', + default: 'Default', + service: 'Service', + tts: 'Text-to-Speech', + stt: 'Speech-to-Text', + key: 'Key', + ID: 'ID', + email: 'Email address', + updatedAt: 'Modified', + emptyWorkspace: 'There are no records yet', + emptyResultSearch: 'Your search yielded no results', + deleteConfirmation: { + title: 'Confirm deletion', + askingAlert: + 'Are you sure you want to delete {count} item? | Are you sure you want to delete {count} items?', + undoneActionAlert: 'This action cannot be undone.', + deleteAll: 'ALL', + }, + generalInfo: 'General info', + objectHeader: {}, + permissions: { + permissions: 'Permissions', + permissionsRole: 'Role | Roles', + allRoles: 'All roles', + searchPlaceholder: 'role ..', + roles: { + permissions: { + permissions: 'Role permission | Role permissions', + add: 'Add', + delete: 'Delete', + read: 'Select', + write: 'Update', + eavesdropCall: 'Eavesdrop call', + playbackRecordFile: 'Playback record file', + exportDataGrid: 'Export data grid', + viewCdrPhoneNumbers: 'View CDR phone numbers', + manageUserRoles: 'Manage user roles', + manageUserLicense: 'Manage user license', + changeUserPassword: 'Change user password', + systemSetting: 'Manage system configurations', + addDescription: 'Grants permission to create any objects', + deleteDescription: 'Grants permission to remove any objects', + readDescription: 'Grants permission to select any objects', + writeDescription: 'Grants permission to modify any objects', + eavesdropCallDescription: 'Grants permission to eavesdrop on an active conversation', + playbackRecordFileDescription: 'Grants permission to playback call-record files', + exportDataGridDescription: 'Grants permission to export data grid to a file', + viewCdrPhoneNumbersDescription: 'View CDR phone numbers', + manageUserRolesDescription: 'Grants permission to manage a set of user roles', + manageUserLicenseDescription: 'Grants permission to manage a set of user license', + changeUserPasswordDescription: 'Grants permission to change the users password', + systemSettingDescription: + 'Grants permission to access and manage the Configuration section', + schemeVariables: 'Manage global variables', + schemeVariablesDescription: + 'Grants permission to access and manage the Global variables section', + }, + addPermission: 'Add role permission', + usage: 'Usage', + applicationsAccess: { + applicationsAccess: 'Application access | Applications access', + access: 'Access', + }, + }, + object: { + object: 'Objects', + allObjects: 'All objects', + ObAC: 'Managed by operations', + RbAC: 'Managed by records', + operations: 'Operations', + searchPlaceholder: 'object ..', + newPermissionRole: 'New grantee', + rbacDefault: 'Default Record based Access', + grantor: 'Grantor', + grantee: 'Grantee', + create: 'Create', + delete: 'Delete', + accessMode: { + 1: 'Forbidden', + 2: 'Allow', + 3: 'Allow with delegation', + }, + }, + }, + routing: { + routing: 'Routing', + ip: 'IP', + protocol: 'Protocol', + port: 'Port', + configuration: 'Configuration', + schema: 'Flow schema', + json: 'JSON', + + flow: { + flow: 'Flow schema | Flow schemas', + allFlowSchemas: 'All flow schemas', + createFlowSelectionPopup: 'Create new flow', + createNew: 'Create new?', + editor: 'Editor', + diagram: { + diagram: 'Diagram', + description: 'Create new flow using Webitel Flow Diagram tool', + }, + code: { + code: 'Code', + description: 'Create new flow using JSON-schema in code editor', + }, + askingAlert: 'Do you want to save the changes you made to "{name}" ?', + }, + + dialplan: { + dialplan: 'Dialplans', + dialplanRules: 'Dialplan rules', + pattern: 'Destination number', + dialplanRule: 'Dialplan rule', + position: 'Position', + }, + + chatplan: { + chatplan: 'Chatplan | Chatplans', + allChatplans: 'All chatplans', + }, + + gateways: { + gateways: 'Gateway | Gateways', + allGateways: 'All gateways', + trunkingGateway: 'Trunking gateway', + registerGateway: 'Register gateway', + stateSuccess: 'Success', + stateFailed: 'Failed', + stateProgress: 'In progress', + stateNonreg: 'Not registered', + proxy: 'Proxy', + searchPlaceholder: 'gateway search...', + host: 'Host', + trunkingACLTitle: 'Access Control', + trunkingACL: 'Trunking access control list', + hostnameTrunking: 'Server/Gateway Hostname or IP', + hostnameRegister: 'Registrar/Server/Gateway Hostname or IP', + expire: 'Expire', + authID: 'Username', + account: 'Account', + outboundProxy: 'Outbound Proxy Hostname or IP', + newGateway: 'New gateway', + newGatewayDescription: 'New gateway description', + SIPregistrations: 'SIP Registration', + SIPregistrationsDescription: 'SIP registration description', + SIPtrunking: 'SIP Trunking', + SIPtrunkingDescription: 'SIP trunking description', + }, + chatGateways: { + templates: { + templates: 'Templates', + title: "Workspace member's name", + close: 'Chat complete message', + join: 'Agent joining message', + left: 'Agent disconnection message', + }, + chatGateways: 'Chat gateway | Chat gateways', + allChatGateways: 'All chat gateways', + telegramBot: { + telegramBot: 'Telegram Bot', + }, + telegramApp: { + telegramApp: 'Telegram App', + signedAs: "You're signed as", + joinTelegram: 'Sign in to Telegram', + metadata: { + apiId: 'API id', + apiHash: 'API hash', + }, + }, + infobip: { + infobip: 'Infobip', + }, + messenger: { + meta: 'Meta', + addOrRemovePages: 'Add or remove pages', + accounts: 'Accounts', + metadata: { + clientId: 'App ID', + clientSecret: 'App Secret', + }, + facebook: { + pages: 'Facebook pages', + subscription: 'Webhook subscription', + }, + instagram: { + instagram: 'Instagram', + comments: 'Track comments', + mentions: 'Track mentions', + }, + whatsapp: { + whatsapp: 'Whatsapp', + token: 'Token', + status: 'Status', + number: 'Phone number', + review: 'Review', + }, + }, + viber: { + viber: 'Viber', + style: { + style: 'Style', + btnBackColor: 'Button background color', + btnFontColor: 'Button font color', + }, + }, + webchat: { + webchat: 'Web chat', + copyCode: 'Copy code for site', + copyCodeHint: + 'You must regenerate and reinsert Widget code to website each time after Widget settings modification', + metadata: { + mediaMaxSize: 'Max media size (Mb)', + }, + view: { + view: 'View', + borderRadius: 'Button Shape', + language: 'Language', + position: 'Position', + btnColor: 'Button Color', + logoUrl: 'Logo URL', + logoHint: "Supported logo format is 'JPEG' or 'PNG', 24x24px", + rounded: 'Rounded', + square: 'Square', + right: 'Right', + left: 'Left', + static: 'Static', + }, + recaptcha: { + recaptcha: 'reCAPTCHA', + sitekey: 'Site key', + secret: 'Secret key', + threshold: 'Threshold', + showFlag: 'Show reCAPTCHA badge', + }, + chat: { + chat: 'Chat', + openTimeout: 'Open Timeout', + openTimeoutSec: 'Open Timeout Sec', + }, + appointment: { + appointment: 'Appointment', + days: 'Days', + availableAgents: 'Available agents', + showEmailField: 'Show email field', + showMessageField: 'Show message field', + resultPageText: 'Result page text', + headingText: 'Heading text', + subheadingText: 'Subheading text', + showDefaultHeading: 'Show default heading and subheading on result page', + }, + alternativeChannels: { + alternativeChannels: 'Alternative Channels', + title: 'Messaging channels', + email: 'Email', + whatsapp: 'WhatsApp', + telegram: 'Telegram', + messenger: 'Messenger', + }, + call: { + title: 'Online call', + url: 'WebSocket Endpoint', + }, + }, + customChat: { + customChat: 'Custom Chat', + customChatGateway: 'Custom Chat Gateway', + appSecretHint: 'Altering this field will interrupt the integration', + metadata: { + appSecret: 'App Secret', + callback: 'Callback', + }, + }, + uri: 'URI', + newChatGateway: 'New chat gateway', + metadata: { + apiKey: 'Api Key', + number: 'Number', + baseUrl: 'Base URL', + sendApi: 'Send API', + allowOrigin: 'Allow Origin', + readTimeout: 'Read Timeout (sec)', + writeTimeout: 'Write Timeout (sec)', + handshakeTimeout: 'Handshake Timeout (sec)', + messageSize: 'Message Size max (bytes)', + botName: 'Bot Name', + eventTypes: 'Event Types', + telegramToken: 'Telegram BOT API Token', + messengerApiUrl: 'Messenger API URL', + }, + }, + + callflow: { + callflow: 'Callflow', + }, + }, + pagination: { + rowsPerPage: 'Rows per page', + }, + }, + + lookups: { + lookups: 'Lookups', + sources: { + caseSources: 'Case sources', + type:{ + type: 'Type', + call: 'Call', + chat: 'Chat', + socialMedia: 'Social media', + email: 'Email', + manual: 'Manual', + } + + + }, + statuses: 'Statuses', + + contactGroups: { + contactGroups: 'Contact groups', + groups: 'Groups', + crm: 'CRM', + configurations: 'Configurations', + }, + }, + + errorPages: { + goToHome: 'Go to Home page', + page403: { + title: 'Access denied', + text: 'Sorry, you have not enough privileges to see this page.', + }, + page404: { + title: "Looks like you're lost", + text: "Sorry, we can't find the page you want.", + }, + }, + + iconHints: { + upload: 'Upload', + reload: 'Refresh table', + edit: 'Edit', + delete: 'Delete', + deleteAll: 'Delete all items', + deleteSelected: 'Delete {count} selected items', + deleteFiltered: 'Delete all filtered items', + generate: 'Generate', + add: 'Add', + history: 'History', + download: 'Download', + downloadAll: 'Download all', + draggable: 'Draggable', + play: 'Play', + pause: 'Pause', + resume: 'Resume', + close: 'Close', + change: 'Change', + volume: 'Volume', + stop: 'Stop', + members: 'Members', + moveUp: 'Move up', + moveDown: 'Move down', + nextPage: 'Next page', + prevPage: 'Previous page', + expand: 'Expand', + collapse: 'Collapse', + }, + + errors: { + invalidJson: 'JSON is invalid', + }, + + reusable: { + }, }; diff --git a/src/app/locale/i18n.js b/src/app/locale/i18n.js index 7a99ca30..b0b835ce 100644 --- a/src/app/locale/i18n.js +++ b/src/app/locale/i18n.js @@ -13,9 +13,9 @@ const messages = { }; export default createI18n({ - legacy: false, locale: 'en', fallbackLocale: 'en', + allowComposition: true, messages, datetimeFormats, }); diff --git a/src/app/locale/ru/ru.js b/src/app/locale/ru/ru.js index 9f99eebd..cd91b278 100644 --- a/src/app/locale/ru/ru.js +++ b/src/app/locale/ru/ru.js @@ -6,6 +6,9 @@ import AccessMode import TimelineTaskStatusEnum from '../../../modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js'; +import CrmSections from '@webitel/ui-sdk/src/enums/WebitelApplications/CrmSections.enum'; +import CrmConfigurationSections from '@webitel/ui-sdk/src/enums/WebitelApplications/CrmConfigurationSections.enum'; + export default { crm: 'CRM', contacts: { @@ -85,4 +88,448 @@ export default { [AccessMode.MANAGE]: 'Управление', }, }, + startPage: { + [CrmSections.CONTACTS]: { + name: 'Контакты', + text: 'В этом разделе вы можете работать с Контактами: клиентами, партнерами и т.д.', + }, + [CrmSections.CONFIGURATION]: { + name: 'Конфигурация', + text: 'Здесь вы можете просматривать Обращения, зарегистрированные в системе.', + }, + }, + configuration: { + [CrmConfigurationSections.CONTACT_GROUPS]: 'Группы контактов', + }, + + validation: { + email: 'Введите адрес электронной почты', + required: 'Обязательное поле для заполнения', + sameAs: 'Неверный пароль', + gatewayHostValidator: 'Should look like IPv4 or FQDN', + ipValidator: 'Should look like IPv4', + macValidator: 'Should look like MAC', + minValue: 'Значение должно быть не менее', + maxValue: 'Значение должно быть не слишком большим', + numeric: 'Должны быть цифры', + requiredArrayValue: 'Поле не должно быть пустым', + isPositiveValue: 'Значение должно быть больше нуля', + cron: 'Некорректное cron-выражение', + }, + + objects: { + all: 'Все {entity}', + administration: 'Управление', + general: 'Общее', + new: 'Новый объект', + add: 'Добавить', + create: 'Создать', + read: 'Читать', + edit: 'Редактировать', + delete: 'Удалить', + save: 'Сохранить', + saved: 'Сохранено', + saveAs: 'Сохранить как нового', + close: 'Закрыть', + next: 'Далее', + back: 'Назад', + change: 'Заменить', + name: 'Имя', + title: 'Название', + description: 'Описание', + user: 'Пользователь', + users: 'Пользователи', + action: 'Action', + allow: 'Allow', + password: 'Пароль', + history: 'История', + copy: 'Копировать', + copied: 'Скопировано!', + createdAt: 'Создано', + createdBy: 'Кем создан', + importCSV: 'Импортировать CSV', + online: 'Онлайн', + offline: 'Оффлайн', + on: 'On', + off: 'Off', + ok: 'Ok', + enabled: 'Включено', + status: 'Статус', + from: 'От', + to: 'До', + importJSON: 'Импортировать JSON', + addNew: 'Добавить', + provider: 'Провайдер', + default: 'По умолчанию', + service: 'Сервис', + tts: 'Text-to-Speech', + stt: 'Speech-to-Text', + key: 'Ключ', + ID: 'ID', + email: 'Адрес электронной почты', + updatedAt: 'Изменено', + emptyWorkspace: 'Записи в разделе еще не созданы', + emptyResultSearch: 'Поиск не дал результатов', + + deleteConfirmation: { + title: 'Подтвердите удаление', + askingAlert: + 'Вы уверенны, что хотите удалить {count} запись? | Вы уверенны, что хотите удалить {count} записей?', + undoneActionAlert: 'Это действие не может быть отменено.', + deleteAll: 'ВСЕ', + }, + generalInfo: 'Общая информация', + objectHeader: {}, + permissions: { + permissions: 'Дозволи', + permissionsRole: 'Роль | Ролі', + allRoles: 'Всі ролі', + searchPlaceholder: 'роль ..', + roles: { + permissions: { + permissions: 'Право доступа роли | Права доступа ролей', + add: 'Создавать', + delete: 'Удалять', + read: 'Выбирать', + write: 'Редактировать', + eavesdropCall: 'Прослушивать активный звонок', + playbackRecordFile: 'Воспроизводить записи разговоров', + exportDataGrid: 'Экспортировать данные', + viewCdrPhoneNumbers: 'Просмотр незашифрованных номеров телефонов', + manageUserRoles: 'Управление ролями пользователей', + manageUserLicense: 'Управление лицензиями пользователей', + changeUserPassword: 'Изменять пароли пользователей', + systemSetting: 'Управление системными конфигурациями', + addDescription: 'Предоставляет разрешение на создание объектов', + deleteDescription: 'Предоставляет разрешение на удаление объектов', + readDescription: 'Предоставляет разрешение на выбор объектов', + writeDescription: 'Предоставляет разрешение на изменение объектов', + eavesdropCallDescription: 'Предоставляет разрешение на прослушивание активного разговора', + playbackRecordFileDescription: + 'Предоставляет разрешение на воспроизведение файлов с записями разговоров', + exportDataGridDescription: 'Предоставляет разрешение на экспорт данных', + viewCdrPhoneNumbersDescription: + 'Предоставляет разрешение на отображение незашифрованных телефонных номеров', + manageUserRolesDescription: + 'Предоставляет разрешение на управление набором ролей пользователей', + manageUserLicenseDescription: + 'Предоставляет разрешение на управление набором пользовательских лицензий', + changeUserPasswordDescription: + 'Предоставляет разрешение на изменение пароля пользователя', + systemSettingDescription: 'Предоставляет разрешение на управление разделом Конфигурация', + schemeVariables: 'Управление глобальными переменными', + schemeVariablesDescription: + 'Предоставляет разрешение на управление разделом Глобальные переменные', + }, + addPermission: 'Добавить право доступа для роли', + usage: 'Использование', + applicationsAccess: { + applicationsAccess: 'Приложение | Приложения', + access: 'Доступ', + }, + }, + object: { + object: 'Разделы', + allObjects: 'Все разделы', + ObAC: 'Управление действиями', + RbAC: 'Управление записями', + operations: 'Действия', + searchPlaceholder: 'раздел ..', + newPermissionRole: 'Новый владелец прав', + rbacDefault: 'Права доступа по записям по умолчанию', + grantor: 'Праводатель', + grantee: 'Получатель', + create: 'Создавать', + delete: 'Удалять', + accessMode: { + 1: 'Запрещено', + 2: 'Разрешено', + 3: 'Управление', + }, + }, + }, + routing: { + routing: 'Маршрутизация', + ip: 'IP', + protocol: 'Протокол', + port: 'Порт', + configuration: 'Конфигурация', + schema: 'Схема звонка', + json: 'JSON', + + flow: { + flow: 'Схема | Схемы', + allFlowSchemas: 'Все схемы', + createFlowSelectionPopup: 'Создать новую схему', + createNew: 'Создать новую схему?', + editor: 'Редактор', + diagram: { + diagram: 'Диаграмма', + description: 'Создать новую схему используя Webitel Flow Diagram', + }, + code: { + code: 'Код', + description: 'Создать новую схему используя JSON-схему в редакторе кода', + }, + askingAlert: 'Вы хотите сохранить изменения, внесенные в "{name}" ?', + }, + + dialplan: { + dialplan: 'Исходящая маршрутизация', + dialplanRules: 'Правила исходящей маршрутизации', + pattern: 'Номер назначения', + dialplanRule: 'Правило исходящей маршрутизации', + position: 'Позиция', + }, + + chatplan: { + chatplan: + 'Правило маршрутизации текстовых сообщений | Правила маршрутизации текстовых сообщений', + allChatplans: 'Все правила маршрутизации текстовых сообщений', + }, + + gateways: { + gateways: 'Шлюз | Шлюзы', + allGateways: 'Все шлюзы', + trunkingGateway: 'Многоканальный шлюз', + registerGateway: 'Зарегистрировать шлюз', + stateSuccess: 'Успешно', + stateFailed: 'Неудачно', + stateProgress: 'В процессе', + stateNonreg: 'Не зарегистрирован', + proxy: 'Прокси', + searchPlaceholder: 'поиск шлюза...', + host: 'Хост', + trunkingACLTitle: 'Контроль доступа', + trunkingACL: 'Многоканальный список доступа', + hostnameTrunking: 'Сервер/Хост шлюза или IP', + hostnameRegister: 'Регистратор/Сервер/Хост шлюза или IP', + expire: 'Срок действия', + authID: 'Имя пользователя', + account: 'Аккаунт', + outboundProxy: 'Адрес исходящего SIP-прокси', + newGateway: 'Новый шлюз', + newGatewayDescription: 'Описание нового шлюза', + SIPregistrations: 'SIP-регистрация', + SIPregistrationsDescription: 'Описание SIP-регистрации', + SIPtrunking: 'SIP-транки', + SIPtrunkingDescription: 'Описание SIP-транков', + }, + + chatGateways: { + templates: { + templates: 'Шаблоны', + title: 'Анонимное имя абонента в Workspace', + close: 'Сообщение завершения чата', + join: 'Сообщение присоединения оператора', + left: 'Сообщение отключения оператора', + }, + chatGateways: 'Текстовый шлюз | Текстовые шлюзы', + allChatGateways: 'Все текстовые шлюзы', + telegramBot: { + telegramBot: 'Telegram Бот', + }, + telegramApp: { + telegramApp: 'Telegram Приложение', + signedAs: 'Вы авторизированы как', + joinTelegram: 'Sign in to Telegram', + metadata: { + apiId: 'API идентификатор', + apiHash: 'API хэш', + }, + }, + infobip: { + infobip: 'Infobip', + }, + messenger: { + meta: 'Meta', + addOrRemovePages: 'Добавить или удалить страницы', + accounts: 'Аккаунты', + metadata: { + clientId: 'App ID', + clientSecret: 'App Secret', + }, + facebook: { + pages: 'Facebook страницы', + subscription: 'Webhook подписки', + }, + instagram: { + instagram: 'Instagram', + comments: 'Отслеживать комментарии', + mentions: 'Отслеживать упоминания', + }, + whatsapp: { + whatsapp: 'Whatsapp', + token: 'Токен', + status: 'Статус', + number: 'Номер телефона', + review: 'Рассмотрение', + }, + }, + viber: { + viber: 'Viber', + style: { + style: 'Стиль', + btnBackColor: 'Цвет фона кнопки', + btnFontColor: 'Цвет текста кнопки', + }, + }, + webchat: { + webchat: 'Web chat', + copyCode: 'Скопировать код', + copyCodeHint: + 'Необходимо перегенерировать и вставить код Виджета на сайт после каждой модификации настроек', + metadata: { + mediaMaxSize: 'Максимальный размер файла (Мб)', + }, + view: { + borderRadius: 'Вид кнопки', + language: 'Язык', + view: 'Вид', + position: 'Размещение', + btnColor: 'Цвет кнопки', + logoUrl: 'URL логотипа', + logoHint: "Поддерживаемый формат логотипа - 'JPEG' or 'PNG', 24x24px", + rounded: 'Круглая', + square: 'Квадратная', + right: 'Справа', + left: 'Слева', + static: 'Статическая', + }, + recaptcha: { + recaptcha: 'reCAPTCHA', + sitekey: 'Site key', + secret: 'Secret key', + threshold: 'Порог', + showFlag: 'Показывать значок reCAPTCHA', + }, + chat: { + chat: 'Чат', + openTimeout: 'Включить задержку открытия', + openTimeoutSec: 'Время задержки открытия', + }, + appointment: { + appointment: 'Заказ звонка', + days: 'Количество дней', + availableAgents: 'Свободные агенты', + showEmailField: 'Показать поле ввода почты', + showMessageField: 'Показать поле ввода сообщения', + resultPageText: 'Текст та странице результата', + headingText: 'Заголовок', + subheadingText: 'Подзаголовок', + showDefaultHeading: + 'Показать стандартный заголовок и подзаголовок на странице результата', + }, + call: { + title: 'Онлайн-звонок', + url: 'WebSocket Endpoint', + }, + alternativeChannels: { + alternativeChannels: 'Альтернативные каналы', + title: 'Текстовые каналы', + email: 'Электронная почта', + whatsapp: 'WhatsApp', + telegram: 'Telegram', + messenger: 'Messenger', + }, + }, + customChat: { + customChat: 'Custom Chat', + customChatGateway: 'Custom Chat Gateway', + appSecretHint: 'Изменение этого поля прервет интеграцию', + metadata: { + appSecret: 'App Secret', + callback: 'Callback', + }, + }, + uri: 'URI', + newChatGateway: 'Новый текстовый шлюз', + metadata: { + apiKey: 'Api Key', + number: 'Number', + baseUrl: 'Base URL', + sendApi: 'Send API', + allowOrigin: 'Allow Origin', + readTimeout: 'Read Timeout (sec)', + writeTimeout: 'Write Timeout (sec)', + handshakeTimeout: 'Handshake Timeout (sec)', + messageSize: 'Message Size max (bytes)', + botName: 'Bot Name', + eventTypes: 'Event Types', + telegramToken: 'Telegram BOT API Token', + messengerApiUrl: 'Messenger API URL', + }, + }, + + callflow: { + callflow: 'Конструктор звонка', + }, + }, + pagination: { + rowsPerPage: 'Количество строк на странице', + }, + }, + + lookups: { + lookups: 'Справочники', + sources: { + caseSources: 'Источники обращений', + type: 'Тип' + }, + statuses: 'Statuses', + + contactGroups: { + contactGroups: 'Группы контактов', + groups: 'Группы', + crm: 'CRM', + configurations: 'Конфигурация', + } + }, + + errorPages: { + goToHome: 'Вернуться Домой', + page403: { + title: 'Нет доступа', + text: 'Извините, у вас недостаточно прав доступа для просмотра этой страницы.', + }, + page404: { + title: 'Похоже, вы потерялись', + text: 'Извините, мы не можем найти то, что вы ищете', + }, + }, + + iconHints: { + upload: 'Загрузить', + reload: 'Обновить', + edit: 'Редактировать', + delete: 'Удалить', + deleteAll: 'Удалить все объекты', + deleteSelected: 'Удалить {count} выбранных объектов', + deleteFiltered: 'Удалить все отфильтрованные объекты', + generate: 'Создать', + add: 'Добавить', + history: 'История', + download: 'Скачать', + downloadAll: 'Скачать все', + draggable: 'Перетащить', + play: 'Играть', + pause: 'Пауза', + resume: 'Возобновить', + close: 'Закрыть', + volume: 'Громкость', + stop: 'Остановить', + members: 'Абоненты', + moveUp: 'Передвинуть вверх', + moveDown: 'Передвинуть вниз', + nextPage: 'Следующая страница', + prevPage: 'Предыдущая страница', + expand: 'Развернуть', + collapse: 'Свернуть', + }, + + errors: { + invalidJson: 'Некорректный JSON', + }, + reusable: { + }, }; diff --git a/src/app/locale/ua/ua.js b/src/app/locale/ua/ua.js index 5218ac51..f90e4069 100644 --- a/src/app/locale/ua/ua.js +++ b/src/app/locale/ua/ua.js @@ -6,6 +6,9 @@ import AccessMode import TimelineTaskStatusEnum from '../../../modules/contacts/modules/timeline/enums/TimelineTaskStatus.enum.js'; +import CrmSections from '@webitel/ui-sdk/src/enums/WebitelApplications/CrmSections.enum'; +import CrmConfigurationSections from '@webitel/ui-sdk/src/enums/WebitelApplications/CrmConfigurationSections.enum'; + export default { crm: 'CRM', contacts: { @@ -85,4 +88,442 @@ export default { [AccessMode.MANAGE]: 'Управління', }, }, + startPage: { + [CrmSections.CONTACTS]: { + name: 'Контакти', + text: 'У цьому розділі ви можете працювати з Контактами: клієнтами, партнерами тощо.', + }, + [CrmSections.CONFIGURATION]: { + name: 'Конфігурація', + text: 'Тут ви можете переглядати Звернення, зареєстровані у системі.', + }, + }, + configuration: { + [CrmConfigurationSections.LOOKUPS]: 'Довідники', + [CrmConfigurationSections.CONTACT_GROUPS]: 'Групи контактів', + }, + + validation: { + email: 'Введіть адресу електронної пошти', + required: "Поле обов'язкове для заповнення", + sameAs: 'Невірний пароль', + gatewayHostValidator: 'Має виглядати як IPv4 або FQDN', + ipValidator: 'Має виглядати як IPv4', + macValidator: 'Має виглядати як MAC', + minValue: 'Значення має бути не менше', + maxValue: 'Значення має бути не надто велкиим', + numeric: 'Мають бути цифри', + requiredArrayValue: 'Поле не може бути пустим', + isPositiveValue: 'Значення має бути додатнім числом', + cron: 'Некорректний cron-вираз', + }, + + objects: { + all: 'Всі {entity}', + administration: 'Управління', + general: 'Загальне', + new: 'Новий', + add: 'Додати', + create: 'Створити', + read: 'Читати', + edit: 'Редагувати', + delete: 'Видалити', + save: 'Зберегти', + saved: 'Збережено', + saveAs: 'Зберігти як нового', + close: 'Закрити', + next: 'Далі', + back: 'Назад', + change: 'Замінити', + name: "Ім'я", + title: 'Назва', + description: 'Опис', + user: 'Користувач', + users: 'Користувачі', + action: 'Дія', + allow: 'Дозволити', + password: 'Пароль', + history: 'Історія', + copy: 'Копіювати', + copied: 'Скопійовано!', + createdAt: 'Створено', + createdBy: 'Ким створено', + importCSV: 'Імпортувати CSV', + online: 'Онлайн', + offline: 'Офлайн', + on: 'On', + off: 'Off', + ok: 'Ok', + enabled: 'Ввімкнено', + status: 'Статус', + from: 'Від', + to: 'До', + importJSON: 'Імпортувати JSON', + addNew: 'Додати', + provider: 'Провайдер', + default: 'За замовчуванням', + service: 'Сервіс', + tts: 'Text-to-Speech', + stt: 'Speech-to-Text', + key: 'Ключ', + ID: 'ID', + email: 'Адреса електронної пошти', + updatedAt: 'Змінено', + emptyWorkspace: 'Записи у розділі ще не створені', + emptyResultSearch: 'Пошук не дав результатів', + + deleteConfirmation: { + title: 'Підтвердіть видалення', + askingAlert: + 'Ви впевнені, що хочете видалити {count} запис? | Ви впевнені, що хочете видалити {count} записів?', + undoneActionAlert: 'Дана дія не може бути скасована.', + deleteAll: 'ВСІ', + }, + generalInfo: 'Загальна інформація', + objectHeader: {}, + permissions: { + permissions: 'Дозволи', + permissionsRole: 'Роль | Ролі', + allRoles: 'Всі ролі', + searchPlaceholder: 'роль ..', + roles: { + permissions: { + permissions: 'Дозвіл ролі | Дозволи ролей', + add: 'Створювати', + delete: 'Видаляти', + read: 'Вибирати', + write: 'Редагувати', + eavesdropCall: 'Прослуховувати активний дзвінок', + playbackRecordFile: 'Відтворювати записи розмов', + exportDataGrid: 'Експортувати дані', + viewCdrPhoneNumbers: 'Перегляд незашифрованих номерів телефонів', + manageUserRoles: 'Управління ролями користувачів', + manageUserLicense: 'Управління ліцензіями користувачів', + changeUserPassword: 'Змінювати паролі користувачів', + systemSetting: 'Управління системними конфігураціями', + addDescription: 'Надає дозвіл на створення об’єктів', + deleteDescription: 'Надає дозвіл на видалення об’єктів', + readDescription: 'Надає дозвіл на вибір об’єктів', + writeDescription: 'Надає дозвіл змінювати об’єкти', + eavesdropCallDescription: 'Надає дозвіл прослуховувати активну розмову', + playbackRecordFileDescription: 'Надає дозвіл на відтворення файлів записів дзвінків', + exportDataGridDescription: 'Надає дозвіл на експорт даних', + viewCdrPhoneNumbersDescription: + 'Надає дозвіл на відображення незашифрованих телефонних номерів', + manageUserRolesDescription: 'Надає дозвіл на керування набором ролей користувачів', + manageUserLicenseDescription: 'Надає дозвіл на керування набором ліцензій користувача', + changeUserPasswordDescription: 'Надає дозвіл на зміну пароля користувача', + systemSettingDescription: 'Надає дозвіл на керування розділом Конфігурація', + schemeVariables: 'Управління глобальними змінними', + schemeVariablesDescription: 'Надає дозвіл на керування розділом Глобальні змінні', + }, + addPermission: 'Надати дозвіл', + usage: 'Використання', + applicationsAccess: { + applicationsAccess: 'Застосунок | Застосунки', + access: 'Доступ', + }, + }, + object: { + object: 'Розділи', + allObjects: 'Всі розділи', + ObAC: 'Управління діями', + RbAC: 'Управління записами', + operations: 'Дії', + searchPlaceholder: 'розділ ..', + newPermissionRole: 'Новий власник прав', + rbacDefault: 'Права доступу на записи за замовчуванням', + grantor: 'Праводатель', + grantee: 'Отримувач', + create: 'Створювати', + delete: 'Видаляти', + accessMode: { + 1: 'Заборонено', + 2: 'Дозволено', + 3: 'Управління', + }, + }, + }, + routing: { + routing: 'Routing', + ip: 'IP', + protocol: 'Protocol', + port: 'Port', + configuration: 'Configuration', + schema: 'Flow schema', + json: 'JSON', + + flow: { + flow: 'Flow schema | Flow schemas', + allFlowSchemas: 'All flow schemas', + createFlowSelectionPopup: 'Create new flow', + createNew: 'Create new?', + editor: 'Editor', + diagram: { + diagram: 'Diagram', + description: 'Create new flow using Webitel Flow Diagram tool', + }, + code: { + code: 'Code', + description: 'Create new flow using JSON-schema in code editor', + }, + askingAlert: 'Do you want to save the changes you made to "{name}" ?', + }, + + dialplan: { + dialplan: 'Dialplans', + dialplanRules: 'Dialplan rules', + pattern: 'Destination number', + dialplanRule: 'Dialplan rule', + position: 'Position', + }, + + chatplan: { + chatplan: 'Chatplan | Chatplans', + allChatplans: 'All chatplans', + }, + + gateways: { + gateways: 'Gateway | Gateways', + allGateways: 'All gateways', + trunkingGateway: 'Trunking gateway', + registerGateway: 'Register gateway', + stateSuccess: 'Success', + stateFailed: 'Failed', + stateProgress: 'In progress', + stateNonreg: 'Not registered', + proxy: 'Proxy', + searchPlaceholder: 'gateway search...', + host: 'Host', + trunkingACLTitle: 'Access Control', + trunkingACL: 'Trunking access control list', + hostnameTrunking: 'Server/Gateway Hostname or IP', + hostnameRegister: 'Registrar/Server/Gateway Hostname or IP', + expire: 'Expire', + authID: 'Username', + account: 'Account', + outboundProxy: 'Outbound Proxy Hostname or IP', + newGateway: 'New gateway', + newGatewayDescription: 'New gateway description', + SIPregistrations: 'SIP Registration', + SIPregistrationsDescription: 'SIP registration description', + SIPtrunking: 'SIP Trunking', + SIPtrunkingDescription: 'SIP trunking description', + }, + chatGateways: { + templates: { + templates: 'Templates', + title: "Workspace member's name", + close: 'Chat complete message', + join: 'Agent joining message', + left: 'Agent disconnection message', + }, + chatGateways: 'Chat gateway | Chat gateways', + allChatGateways: 'All chat gateways', + telegramBot: { + telegramBot: 'Telegram Bot', + }, + telegramApp: { + telegramApp: 'Telegram App', + signedAs: "You're signed as", + joinTelegram: 'Sign in to Telegram', + metadata: { + apiId: 'API id', + apiHash: 'API hash', + }, + }, + infobip: { + infobip: 'Infobip', + }, + messenger: { + meta: 'Meta', + addOrRemovePages: 'Add or remove pages', + accounts: 'Accounts', + metadata: { + clientId: 'App ID', + clientSecret: 'App Secret', + }, + facebook: { + pages: 'Facebook pages', + subscription: 'Webhook subscription', + }, + instagram: { + instagram: 'Instagram', + comments: 'Track comments', + mentions: 'Track mentions', + }, + whatsapp: { + whatsapp: 'Whatsapp', + token: 'Token', + status: 'Status', + number: 'Phone number', + review: 'Review', + }, + }, + viber: { + viber: 'Viber', + style: { + style: 'Style', + btnBackColor: 'Button background color', + btnFontColor: 'Button font color', + }, + }, + webchat: { + webchat: 'Web chat', + copyCode: 'Copy code for site', + copyCodeHint: + 'You must regenerate and reinsert Widget code to website each time after Widget settings modification', + metadata: { + mediaMaxSize: 'Max media size (Mb)', + }, + view: { + view: 'View', + borderRadius: 'Button Shape', + language: 'Language', + position: 'Position', + btnColor: 'Button Color', + logoUrl: 'Logo URL', + logoHint: "Supported logo format is 'JPEG' or 'PNG', 24x24px", + rounded: 'Rounded', + square: 'Square', + right: 'Right', + left: 'Left', + static: 'Static', + }, + recaptcha: { + recaptcha: 'reCAPTCHA', + sitekey: 'Site key', + secret: 'Secret key', + threshold: 'Threshold', + showFlag: 'Show reCAPTCHA badge', + }, + chat: { + chat: 'Chat', + openTimeout: 'Open Timeout', + openTimeoutSec: 'Open Timeout Sec', + }, + appointment: { + appointment: 'Appointment', + days: 'Days', + availableAgents: 'Available agents', + showEmailField: 'Show email field', + showMessageField: 'Show message field', + resultPageText: 'Result page text', + headingText: 'Heading text', + subheadingText: 'Subheading text', + showDefaultHeading: 'Show default heading and subheading on result page', + }, + alternativeChannels: { + alternativeChannels: 'Alternative Channels', + title: 'Messaging channels', + email: 'Email', + whatsapp: 'WhatsApp', + telegram: 'Telegram', + messenger: 'Messenger', + }, + call: { + title: 'Online call', + url: 'WebSocket Endpoint', + }, + }, + customChat: { + customChat: 'Custom Chat', + customChatGateway: 'Custom Chat Gateway', + appSecretHint: 'Altering this field will interrupt the integration', + metadata: { + appSecret: 'App Secret', + callback: 'Callback', + }, + }, + uri: 'URI', + newChatGateway: 'New chat gateway', + metadata: { + apiKey: 'Api Key', + number: 'Number', + baseUrl: 'Base URL', + sendApi: 'Send API', + allowOrigin: 'Allow Origin', + readTimeout: 'Read Timeout (sec)', + writeTimeout: 'Write Timeout (sec)', + handshakeTimeout: 'Handshake Timeout (sec)', + messageSize: 'Message Size max (bytes)', + botName: 'Bot Name', + eventTypes: 'Event Types', + telegramToken: 'Telegram BOT API Token', + messengerApiUrl: 'Messenger API URL', + }, + }, + + callflow: { + callflow: 'Callflow', + }, + }, + pagination: { + rowsPerPage: 'Rows per page', + }, + }, + + lookups: { + lookups: 'Довідники', + sources: { + caseSources: 'Джерела звернень', + type: 'Тип' + }, + statuses: 'Statuses', + contactGroups: { + contactGroups: 'Групи контактів', + groups: 'Групи', + crm: 'CRM', + configurations: 'Конфігурація', + } + }, + + errorPages: { + goToHome: 'Повернутись додому', + page403: { + title: 'Немає доступу', + text: 'Вибачте, у Вас недостатньо прав доступу для перегляду цієї сторінки', + }, + page404: { + title: 'Здається, Ви загубились', + text: 'Вибачте, ми не можемо знайти те, що Ви шукаєте', + }, + }, + + iconHints: { + upload: 'Завантажити', + reload: 'Оновити', + edit: 'Редагувати', + delete: 'Видалити', + deleteAll: "Видалити всі об'єкти", + deleteSelected: "Видалити {count} обраних об'єктів", + deleteFiltered: "Видалити всі відфільтровані об'єкти", + generate: 'Створити', + add: 'Додати', + history: 'Історія', + download: 'Скачати', + downloadAll: 'Скачати все', + draggable: 'Перетягнути', + play: 'Програти', + pause: 'Пауза', + resume: 'Продовжити', + close: 'Зкрити', + change: 'Замінити', + volume: 'Гучність', + stop: 'Зупинити', + members: 'Абоненти', + moveUp: 'Пересунути вгору', + moveDown: 'Пересунути вниз', + nextPage: 'Наступна сторінка', + prevPage: 'Попередня сторінка', + expand: 'Розгорнути', + collapse: 'Згорнути', + }, + + errors: { + invalidJson: 'Некоректний JSON', + }, + + reusable: { + }, }; diff --git a/src/app/plugins/webitel-ui.js b/src/app/plugins/webitel-ui.js index f7c1ef7b..ac974655 100644 --- a/src/app/plugins/webitel-ui.js +++ b/src/app/plugins/webitel-ui.js @@ -1,19 +1,24 @@ +// import styles +import '@webitel/ui-sdk/dist/ui-sdk.css'; import WebitelUI from '@webitel/ui-sdk/dist/ui-sdk.js'; + +// import locale import WebitelUIEn from '@webitel/ui-sdk/src/locale/en/en.js'; import WebitelUIKz from '@webitel/ui-sdk/src/locale/kz/kz.js'; import WebitelUIRu from '@webitel/ui-sdk/src/locale/ru/ru.js'; import WebitelUIUa from '@webitel/ui-sdk/src/locale/ua/ua.js'; import eventBus from '@webitel/ui-sdk/src/scripts/eventBus.js'; import i18n from '../locale/i18n.js'; -import '@webitel/ui-sdk/dist/ui-sdk.css'; const globals = { $baseURL: import.meta.env.BASE_URL, }; +// init plugin +export default [WebitelUI, { eventBus, globals }]; +// add plugin locales to main i18n + i18n.global.mergeLocaleMessage('en', WebitelUIEn); i18n.global.mergeLocaleMessage('ru', WebitelUIRu); i18n.global.mergeLocaleMessage('ua', WebitelUIUa); i18n.global.mergeLocaleMessage('kz', WebitelUIKz); - -export default [WebitelUI, { eventBus, globals }]; diff --git a/src/app/router/_internals/RouteNames.enum.js b/src/app/router/_internals/RouteNames.enum.js new file mode 100644 index 00000000..e18bbac1 --- /dev/null +++ b/src/app/router/_internals/RouteNames.enum.js @@ -0,0 +1,23 @@ +export default Object.freeze({ + AUTH: 'auth', + APPLICATION_HUB: 'application-hub', + HOME: 'home', + START: 'start', + + + // LOOKUPS + SKILLS: 'skills', + BUCKETS: 'buckets', + BLACKLIST: 'blacklists', + REGIONS: 'regions', + CALENDARS: 'calendars', + COMMUNICATIONS: 'communications', + PAUSE_CAUSE: 'agent-pause-cause', + MEDIA: 'media', + CONTACT_GROUPS: 'contact-groups', + + + SETTINGS_PAGE: 'settings', + PAGE_403: 'access-denied', + PAGE_404: '', +}); diff --git a/src/app/router/_internals/guards.js b/src/app/router/_internals/guards.js new file mode 100644 index 00000000..7f4dec26 --- /dev/null +++ b/src/app/router/_internals/guards.js @@ -0,0 +1,25 @@ +import store from "../../store/index.js"; + +export const checkAppAccess = (to, from, next) => { + // check for === false because it can be undefined + if (to.meta.requiresAccess === false) next(); + + const hasReadAccess = store.getters['userinfo/CHECK_APP_ACCESS'](store.getters['userinfo/THIS_APP']); + if (hasReadAccess) { + next(); + } else { + next(); + // next('/access-denied'); + } +}; + +export const checkRouteAccess = (to, from, next) => { + const hasReadAccess = store.getters['userinfo/HAS_READ_ACCESS']({ route: to }); + if (hasReadAccess) { + next(); + } else { + next(); + console.log('error?') + // next('/access-denied'); + } +}; diff --git a/src/app/router/index.js b/src/app/router/index.js index 37ab7ffa..4e049e94 100644 --- a/src/app/router/index.js +++ b/src/app/router/index.js @@ -5,7 +5,6 @@ import ContactCommunications from '../../modules/contacts/components/opened-contact-communications.vue'; import OpenedContact from '../../modules/contacts/components/opened-contact.vue'; -import TheContacts from '../../modules/contacts/components/the-contacts.vue'; import ContactPermissions from '../../modules/contacts/modules/permissions/components/the-permissions.vue'; import ContactTimeline @@ -14,6 +13,14 @@ import ContactVariables from '../../modules/contacts/modules/variables/components/the-variables.vue'; import TheCrmWorkspace from '../components/the-crm-workspace.vue'; import AccessDenied from '../components/utils/access-denied-component.vue'; +import TheStartPage + from '../../modules/start-page/components/the-start-page.vue'; +import TheContacts from '../../modules/contacts/components/the-contacts.vue'; +import TheConfiguration from '../../modules/configuration/components/the-configuration.vue'; + +import SourcesRoutes from "../../modules/lookups/modules/sources/modules/sources/router/sources.js"; + + import store from '../store'; const checkAppAccess = (to, from, next) => { @@ -40,16 +47,30 @@ const routes = [ { path: '/', name: 'crm-workspace', - redirect: { name: CrmSections.CONTACTS }, + redirect: { name: 'the-start-page' }, component: TheCrmWorkspace, beforeEnter: checkAppAccess, children: [ + { + path: 'start-page', + name: 'the-start-page', + component: TheStartPage, + }, { path: 'contacts', name: CrmSections.CONTACTS, component: TheContacts, beforeEnter: checkRouteAccess, + // redirect: { name: `the-start-page` }, }, + { + path: 'configuration', + name: CrmSections.CONFIGURATION, + component: TheConfiguration, + // beforeEnter: checkRouteAccess, + // redirect: { name: `the-start-page` }, + }, + { path: 'contacts/:id', name: `${CrmSections.CONTACTS}-card`, @@ -99,6 +120,7 @@ const routes = [ }, ], }, + ...SourcesRoutes, ], }, { @@ -106,6 +128,7 @@ const routes = [ name: 'access-denied', component: AccessDenied, }, + ]; const router = createRouter({ diff --git a/src/app/store/BaseStoreModules/StoreModuleMixins/BaseOpenedInstanceStoreModuleMixin.js b/src/app/store/BaseStoreModules/StoreModuleMixins/BaseOpenedInstanceStoreModuleMixin.js new file mode 100644 index 00000000..f012be2b --- /dev/null +++ b/src/app/store/BaseStoreModules/StoreModuleMixins/BaseOpenedInstanceStoreModuleMixin.js @@ -0,0 +1,59 @@ +import deepCopy from 'deep-copy'; +import set from 'lodash/set'; + +const state = { + itemId: 0, + itemInstance: {}, +}; + +const actions = { + SET_PARENT_ITEM_ID: (context, id) => { + context.commit('SET_PARENT_ITEM_ID', id); + }, + SET_ITEM_ID: (context, id) => { + if (id !== 'new') context.commit('SET_ITEM_ID', id); + else context.commit('SET_ITEM_ID', 0); + }, + LOAD_ITEM: async (context) => { + if (context.state.itemId) { + const item = await context.dispatch('GET_ITEM'); + context.commit('SET_ITEM', item); + } + }, + SET_ITEM_PROPERTY: (context, payload) => { + context.commit('SET_ITEM_PROPERTY', payload); + context.commit('SET_ITEM_PROPERTY', { + prop: '_dirty', + value: true, + }); + }, + RESET_ITEM_STATE: async (context) => { + context.commit('RESET_ITEM_STATE'); + }, +}; + +const mutations = { + SET_PARENT_ITEM_ID: (state, id) => { + state.parentId = id; + }, + SET_ITEM_ID: (state, id) => { + state.itemId = id; + }, + SET_ITEM_PROPERTY: (state, { prop, value, path }) => { + if (path) { + set(state.itemInstance, path, value); + } else { + // DEPRECATED, LEGACY CODE + state.itemInstance[prop] = value; + } + }, + SET_ITEM: (state, item) => { + state.itemInstance = item; + }, +}; + +export default { + getActions: () => actions, + getMutations: () => mutations, + generateState: () => deepCopy(state), +}; diff --git a/src/app/store/BaseStoreModules/StoreModuleMixins/BaseTableStoreModuleMixin.js b/src/app/store/BaseStoreModules/StoreModuleMixins/BaseTableStoreModuleMixin.js new file mode 100644 index 00000000..ad786ee2 --- /dev/null +++ b/src/app/store/BaseStoreModules/StoreModuleMixins/BaseTableStoreModuleMixin.js @@ -0,0 +1,212 @@ +import { SortSymbols, sortToQueryAdapter } from '@webitel/ui-sdk/src/scripts/sortQueryAdapters'; +import deepCopy from 'deep-copy'; + +const state = { + headers: [], + dataList: [], + aggs: {}, + size: 10, + search: '', + page: 1, + sort: '', + isNextPage: false, +}; + +const actions = { + // HOOKS TO BE OVERRIDEN, IF NEEDED + BEFORE_SET_DATA_LIST_HOOK: (context, { items, next, aggs }) => ({ + items, + next, + aggs, + }), + AFTER_SET_DATA_LIST_HOOK: (context, { items, next }) => ({ items, next }), + + LOAD_DATA_LIST: async (context, _query) => { + /* + https://my.webitel.com/browse/WTEL-3560 + preventively disable isNext to handle case when user is clicking + "next" faster than actual request is made + */ + context.commit('SET_IS_NEXT', false); + + const query = { + ...context.getters['filters/GET_FILTERS'], + ..._query, + }; + try { + let { items = [], next = false, aggs = {} } = await context.dispatch('GET_LIST', query); + + /* [https://my.webitel.com/browse/WTEL-3793] + * When deleting the last item from list, + * if there are other items on the previous page, you need to go back */ + if (!items.length && context.state.page > 1) return context.dispatch('PREV_PAGE'); + + /* we should set _isSelected property to all items in tables cause their checkbox selection + * is based on this property. Previously, this prop was set it api consumers, but now + * admin-specific were replaced by webitel-sdk consumers and i supposed it will be + * weird to set this property in each api file through defaultListObject */ + items = items.map((item) => ({ + ...item, + _isSelected: false, + })); + + const afterHook = await context.dispatch('BEFORE_SET_DATA_LIST_HOOK', { + items, + next, + aggs, + }); + context.commit('SET_DATA_LIST', afterHook.items); + context.commit('SET_IS_NEXT', afterHook.next); + context.commit('AGGS', afterHook.aggs); + context.dispatch('AFTER_SET_DATA_LIST_HOOK', afterHook); + + } catch (err) { + console.error(err); + } + }, + SET_SIZE: async (context, size) => { + context.commit('SET_SIZE', size); + await context.dispatch('RESET_PAGE'); + }, + SET_SEARCH: async (context, search) => { + context.commit('SET_SEARCH', search); + await context.dispatch('RESET_PAGE'); + }, + NEXT_PAGE: (context) => { + const page = context.state.page + 1; + context.commit('SET_PAGE', page); + context.dispatch('LOAD_DATA_LIST'); + }, + PREV_PAGE: (context) => { + if (context.state.page > 1) { + const page = context.state.page - 1; + context.commit('SET_PAGE', page); + context.dispatch('LOAD_DATA_LIST'); + } + }, + RESET_PAGE: (context) => { + const page = 1; + context.commit('SET_PAGE', page); + }, + SET_HEADERS: (context, headers) => context.commit('SET_HEADERS', headers), + SORT: async (context, { header, nextSortOrder }) => { + const sort = nextSortOrder + ? `${sortToQueryAdapter(nextSortOrder)}${header.field}` + : nextSortOrder; + context.commit('SET_SORT', sort); + context.dispatch('UPDATE_HEADER_SORT', { + header, + nextSortOrder, + }); + await context.dispatch('RESET_PAGE'); + return context.dispatch('LOAD_DATA_LIST'); + }, + UPDATE_HEADER_SORT: (context, { header, nextSortOrder }) => { + const headers = context.state.headers.map((oldHeader) => { + // eslint-disable-next-line no-prototype-builtins + if (oldHeader.sort !== undefined) { + return { + ...oldHeader, + sort: oldHeader.field === header.field ? nextSortOrder : SortSymbols.NONE, + }; + } + return oldHeader; + }); + context.commit('SET_HEADERS', headers); + }, + PATCH_ITEM_PROPERTY: async (context, { item, index, prop, value }) => { + await context.commit('PATCH_ITEM_PROPERTY', { + index, + prop, + value, + }); + const id = item?.id || context.state.dataList[index].id; + const changes = { [prop]: value }; + try { + await context.dispatch('PATCH_ITEM', { + id, + changes, + }); + context.commit('PATCH_ITEM_PROPERTY', { + item, + index, + prop, + value, + }); + } catch { + context.dispatch('LOAD_DATA_LIST'); + } + }, + DELETE: async (context, deleted) => { + let action = 'DELETE_SINGLE'; + if (Array.isArray(deleted)) { + if (deleted.length) action = 'DELETE_BULK'; + else action = 'DELETE_ALL'; + } + try { + await context.dispatch(action, deleted); + } catch (err) { + throw err; + } finally { + await context.dispatch('LOAD_DATA_LIST'); + } + }, + DELETE_SINGLE: async (context, { id }) => { + try { + await context.dispatch('DELETE_ITEM', id); + } catch (err) { + throw err; + } + }, + DELETE_BULK: async (context, deleted) => + Promise.allSettled(deleted.map((item) => context.dispatch('DELETE_SINGLE', item))), + // REMOVE_ITEM: async (context, index) => { + // const id = context.state.dataList[index].id; + // context.commit('REMOVE_ITEM', index); + // try { + // await context.dispatch('DELETE_ITEM', id); + // } catch (err) { + // throw err; + // } + // }, +}; + +const mutations = { + SET_DATA_LIST: (state, items) => { + state.dataList = items; + }, + SET_SIZE: (state, size) => { + state.size = size; + }, + SET_SEARCH: (state, search) => { + state.search = search; + }, + SET_PAGE: (state, page) => { + state.page = page; + }, + SET_SORT: (state, sort) => { + state.sort = sort; + }, + SET_IS_NEXT: (state, next) => { + state.isNextPage = next; + }, + AGGS: (state, aggs) => { + state.aggs = aggs; + }, + SET_HEADERS: (state, headers) => { + state.headers = headers; + }, + PATCH_ITEM_PROPERTY: (state, { index, prop, value }) => { + state.dataList[index][prop] = value; + }, + // REMOVE_ITEM: (state, index) => { + // state.dataList.splice(index, 1); + // }, +}; + + +export default { + getActions: () => actions, + getMutations: () => mutations, + generateState: () => deepCopy(state), +}; diff --git a/src/app/store/BaseStoreModules/StoreModules/NestedObjectStoreModule.js b/src/app/store/BaseStoreModules/StoreModules/NestedObjectStoreModule.js new file mode 100644 index 00000000..a6223418 --- /dev/null +++ b/src/app/store/BaseStoreModules/StoreModules/NestedObjectStoreModule.js @@ -0,0 +1,66 @@ +import BaseStoreModule from '@webitel/ui-sdk/src/store/BaseStoreModules/BaseStoreModule'; +import deepCopy from 'deep-copy'; +import BaseOpenedInstanceModule from '../StoreModuleMixins/BaseOpenedInstanceStoreModuleMixin'; + +const DEFAULT_ITEM_STATE = BaseOpenedInstanceModule.generateState(); + +export default class NestedObjectStoreModule extends BaseStoreModule { + getters = { + GET_ITEM_BY_ID: (state) => (itemId) => state.dataList.find((item) => item.id === itemId), + GET_ITEM_PROP_BY_ID: (state, getters) => (itemId, prop) => { + if (itemId) return getters.GET_ITEM_BY_ID(itemId)[prop]; + }, + }; + + actions = { + ...BaseOpenedInstanceModule.getActions(), + + ADD_ITEM: async (context) => { + if (!context.state.itemId) { + const { id } = await context.dispatch('POST_ITEM'); + context.dispatch('SET_ITEM_ID', id); + await context.dispatch('LOAD_DATA_LIST'); + } + }, + UPDATE_ITEM: async (context) => { + if (context.state.itemInstance._dirty) { + await context.dispatch('UPD_ITEM'); + await context.dispatch('LOAD_DATA_LIST'); + } + }, + RESET_STATE: (context) => { + context.commit('RESET_STATE'); + }, + }; + + mutations = { + ...BaseOpenedInstanceModule.getMutations(), + + RESET_STATE: (state) => { + Object.assign(state, this._resettableState(), this._resettableItemState()); + }, + RESET_ITEM_STATE: (state) => { + Object.assign(state, this._resettableItemState()); + }, + }; + + constructor({ resettableState, resettableItemState, headers } = {}) { + super(); + const state = { parentId: 0 }; + this._resettableState = () => + deepCopy({ + ...resettableState, + headers, + }); + this._resettableItemState = () => + deepCopy({ + ...DEFAULT_ITEM_STATE, + ...resettableItemState, + }); + this.state = { + ...state, + ...this._resettableState(), + ...this._resettableItemState(), + }; + } +} diff --git a/src/app/store/BaseStoreModules/StoreModules/ObjectStoreModule.js b/src/app/store/BaseStoreModules/StoreModules/ObjectStoreModule.js new file mode 100644 index 00000000..ba046988 --- /dev/null +++ b/src/app/store/BaseStoreModules/StoreModules/ObjectStoreModule.js @@ -0,0 +1,48 @@ +import BaseStoreModule from '@webitel/ui-sdk/src/store/BaseStoreModules/BaseStoreModule'; +import deepCopy from 'deep-copy'; +import BaseTableModule from '../StoreModuleMixins/BaseTableStoreModuleMixin'; + +export default class ObjectStoreModule extends BaseStoreModule { + getters = {}; + + actions = { + ...BaseTableModule.getActions(), + // https://webitel.atlassian.net/browse/WTEL-4195 + ADD_ITEM: async (context) => { + if (!context.state.itemId) { + const { id } = await context.dispatch('POST_ITEM'); + await context.dispatch('SET_ITEM_ID', id); + context.dispatch('LOAD_ITEM'); + } + }, + UPDATE_ITEM: async (context) => { + if (context.state.itemInstance._dirty) { + await context.dispatch('UPD_ITEM'); + context.dispatch('LOAD_ITEM'); + } + }, + }; + + mutations = { + ...BaseTableModule.getMutations(), + + RESET_ITEM_STATE: (state) => { + Object.assign(state, this._resettableState()); + }, + }; + + modules = {}; + + constructor({ resettableState, headers } = {}) { + super(); + this._resettableState = () => + deepCopy({ + ...resettableState, + }); + this.state = { + ...BaseTableModule.generateState(), + headers, + ...this._resettableState(), + }; + } +} diff --git a/src/app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/PermissionsStoreModule.js b/src/app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/PermissionsStoreModule.js new file mode 100644 index 00000000..9a6bcc61 --- /dev/null +++ b/src/app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/PermissionsStoreModule.js @@ -0,0 +1,122 @@ +import BaseStoreModule from '@webitel/ui-sdk/src/store/BaseStoreModules/BaseStoreModule'; +import PermissionsAPI from '../../../../../modules/_shared/permissions-tab/api/PermissionsAPI'; +// import AccessMode from '../../../../../modules/permissions/modules/objects/store/_internals/enums/AccessMode.enum'; +import BaseTableModule from '../../StoreModuleMixins/BaseTableStoreModuleMixin'; +import defaultHeaders from './_internals/headers'; + +export class PermissionsStoreModule extends BaseStoreModule { + state = {}; + + getters = {}; + + actions = { + ...BaseTableModule.getActions(), + + CHANGE_CREATE_ACCESS_MODE: (context, payload) => + context.dispatch('CHANGE_ACCESS_MODE', { + ruleName: 'x', + ...payload, + }), + CHANGE_READ_ACCESS_MODE: (context, payload) => + context.dispatch('CHANGE_ACCESS_MODE', { + ruleName: 'r', + ...payload, + }), + CHANGE_UPDATE_ACCESS_MODE: (context, payload) => + context.dispatch('CHANGE_ACCESS_MODE', { + ruleName: 'w', + ...payload, + }), + CHANGE_DELETE_ACCESS_MODE: (context, payload) => + context.dispatch('CHANGE_ACCESS_MODE', { + ruleName: 'd', + ...payload, + }), + CHANGE_ACCESS_MODE: async (context, { mode, ruleName, item }) => { + const have = item.access[ruleName]; + let want; + /* + has | patch | got + -----+-------+----- + - | w | w + w | w | - + - | ww | ww + w | ww | ww + ww | ww | w + ww | w | - + */ + // switch (mode.id) { + // case AccessMode.FORBIDDEN: + // want = ruleName; + // break; + // case AccessMode.ALLOW: + // want = have.rule || ruleName; + // break; + // case AccessMode.MANAGE: + // want = `${ruleName}${ruleName}`; + // break; + // default: + // return; + // } + const changes = { + grantee: +item.grantee.id, + grants: want, + }; + try { + await context.dispatch('PATCH_ACCESS_MODE', { + item, + changes, + }); + } catch (err) { + throw err; + } finally { + context.dispatch('LOAD_DATA_LIST'); + } + }, + ADD_ROLE_PERMISSIONS: async (context, role) => { + const changes = { + grantee: +role.id, + grants: 'r', + }; + try { + await context.dispatch('PATCH_ACCESS_MODE', { + changes, + }); + } catch { + } finally { + context.dispatch('LOAD_DATA_LIST'); + } + }, + RESET_ITEM_STATE: async (context) => { + context.commit('RESET_ITEM_STATE'); + }, + }; + + mutations = { + ...BaseTableModule.getMutations(), + + RESET_ITEM_STATE: (state) => { + Object.assign(state, this._resettableState()); + }, + }; + + constructor({ headers = defaultHeaders } = {}) { + super(); + this._resettableState = () => ({ + ...BaseTableModule.generateState(), + headers, + parentId: 0, + }); + this.state = this._resettableState(); + } + + generateAPIActions(url) { + const permissionsAPI = new PermissionsAPI(url); + this.actions.GET_LIST = (context) => permissionsAPI.getList(context.state); + this.actions.PATCH_ACCESS_MODE = (context, { changes }) => + permissionsAPI.patch(context.state.parentId, [changes]); + return this; + } +} + +export default PermissionsStoreModule; diff --git a/src/app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/_internals/headers.js b/src/app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/_internals/headers.js new file mode 100644 index 00000000..edd236cc --- /dev/null +++ b/src/app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/_internals/headers.js @@ -0,0 +1,28 @@ +import { SortSymbols } from '@webitel/ui-sdk/src/scripts/sortQueryAdapters'; + +export default [ + { + value: 'grantee', + locale: 'objects.name', + field: 'grantee', + sort: SortSymbols.NONE, + }, + { + value: 'read', + locale: 'objects.read', + field: 'r', + sort: SortSymbols.NONE, + }, + { + value: 'edit', + locale: 'objects.edit', + field: 'w', + sort: SortSymbols.NONE, + }, + { + value: 'delete', + locale: 'objects.permissions.object.delete', + field: 'd', + sort: SortSymbols.NONE, + }, +]; diff --git a/src/app/store/index.js b/src/app/store/index.js index cb1c56e2..28d14fa9 100644 --- a/src/app/store/index.js +++ b/src/app/store/index.js @@ -4,6 +4,10 @@ import userinfo from '../../modules/userinfo/store/userinfo'; import appearance from '../../modules/appearance/store/appearance'; import instance from '../api/instance'; +import sources from '../../modules/lookups/modules/sources/store/sources'; +import permissions from '../../modules/permissions/store/permissions'; +// import routing from '../../modules/routing/store/routing'; + export default createStore({ state: { router: null, @@ -22,5 +26,9 @@ export default createStore({ contacts, userinfo, appearance, + + sources, + permissions, + // routing }, }); diff --git a/src/main.js b/src/main.js index 579b4448..b5b3deaa 100644 --- a/src/main.js +++ b/src/main.js @@ -4,6 +4,7 @@ import router from './app/router'; import i18n from './app/locale/i18n'; import WebitelUi from './app/plugins/webitel-ui'; import store from './app/store'; +import ActionComponents from './app/components/actions'; const setTokenFromUrl = () => { try { @@ -28,11 +29,20 @@ const fetchConfig = async () => { return response.json(); }; -const initApp = () => createApp(App) -.use(store) -.use(router) -.use(i18n) -.use(...WebitelUi); +const initApp = () => { + const app = createApp(App) + .use(store) + .use(router) + .use(i18n) + .use(...WebitelUi) + + ActionComponents.forEach((component) => { + app.component(component.name, component); + }); + + return app; +}; + (async () => { let config; @@ -49,3 +59,4 @@ const initApp = () => createApp(App) app.mount('#app'); } })(); + diff --git a/src/modules/_shared/permissions-tab/api/PermissionsAPI.js b/src/modules/_shared/permissions-tab/api/PermissionsAPI.js new file mode 100644 index 00000000..038ed23f --- /dev/null +++ b/src/modules/_shared/permissions-tab/api/PermissionsAPI.js @@ -0,0 +1,35 @@ +import APIPermissionsGetter from '../../../../app/api/PermissionsAPIService/APIPermissionsGetter'; +import APIPermissionsPatcher from '../../../../app/api/PermissionsAPIService/APIPermissionsPatcher'; + +export default class PermissionsAPI { + constructor(url) { + this.url = url; + this._permissionsGetter = new APIPermissionsGetter(url); + this._permissionsPatcher = new APIPermissionsPatcher(url); + } + + static getListByUrl = (url) => { + const permissionsGetter = new APIPermissionsGetter(url); + return (params) => permissionsGetter.getList(params); + }; + + static patchByUrl = (url) => { + const permissionsPatcher = new APIPermissionsPatcher(url); + return (parentId, changes) => + permissionsPatcher.patchItem({ + id: parentId, + changes, + }); + }; + + getList(params) { + return this._permissionsGetter.getList(params); + } + + patch(parentId, changes) { + return this._permissionsPatcher.patchItem({ + id: parentId, + changes, + }); + } +} diff --git a/src/modules/_shared/permissions-tab/components/_internals/permissions-role-column.vue b/src/modules/_shared/permissions-tab/components/_internals/permissions-role-column.vue new file mode 100644 index 00000000..d9ee8d3b --- /dev/null +++ b/src/modules/_shared/permissions-tab/components/_internals/permissions-role-column.vue @@ -0,0 +1,30 @@ + + + + {{ role.name }} + + + + + + diff --git a/src/modules/_shared/permissions-tab/components/_internals/permissions-role-select.vue b/src/modules/_shared/permissions-tab/components/_internals/permissions-role-select.vue new file mode 100644 index 00000000..ad2c8b97 --- /dev/null +++ b/src/modules/_shared/permissions-tab/components/_internals/permissions-role-select.vue @@ -0,0 +1,46 @@ + + + + + + {{ option[optionLabel] || option }} + + + + + + + {{ option[optionLabel] || option }} + + + + + + + + diff --git a/src/modules/_shared/permissions-tab/components/permissions-tab-role-popup.vue b/src/modules/_shared/permissions-tab/components/permissions-tab-role-popup.vue new file mode 100644 index 00000000..c062b0f5 --- /dev/null +++ b/src/modules/_shared/permissions-tab/components/permissions-tab-role-popup.vue @@ -0,0 +1,46 @@ + + + + {{ $t('objects.permissions.object.newPermissionRole') }} + + + + + + + {{ $t('objects.add') }} + + + {{ $t('objects.close') }} + + + + + + + + diff --git a/src/modules/_shared/permissions-tab/components/permissions-tab.vue b/src/modules/_shared/permissions-tab/components/permissions-tab.vue new file mode 100644 index 00000000..7151d130 --- /dev/null +++ b/src/modules/_shared/permissions-tab/components/permissions-tab.vue @@ -0,0 +1,115 @@ + + + + + + + {{ $t('objects.permissions.object.operations') }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/configuration/components/_internals/config-category-lvl-1.vue b/src/modules/configuration/components/_internals/config-category-lvl-1.vue new file mode 100644 index 00000000..f8da112e --- /dev/null +++ b/src/modules/configuration/components/_internals/config-category-lvl-1.vue @@ -0,0 +1,63 @@ + + + + + + {{ category.name }} + + + + + + + + + + + diff --git a/src/modules/configuration/components/_internals/config-category-lvl-2.vue b/src/modules/configuration/components/_internals/config-category-lvl-2.vue new file mode 100644 index 00000000..958013f0 --- /dev/null +++ b/src/modules/configuration/components/_internals/config-category-lvl-2.vue @@ -0,0 +1,70 @@ + + + + + + {{ category.name }} + + + + + + + + diff --git a/src/modules/configuration/components/the-configuration.vue b/src/modules/configuration/components/the-configuration.vue new file mode 100644 index 00000000..76b4e15d --- /dev/null +++ b/src/modules/configuration/components/the-configuration.vue @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + diff --git a/src/modules/configuration/css/_configuration.scss b/src/modules/configuration/css/_configuration.scss new file mode 100644 index 00000000..ae98cf3c --- /dev/null +++ b/src/modules/configuration/css/_configuration.scss @@ -0,0 +1,30 @@ + +.config-nav__category { + box-sizing: border-box; + height: 100%; + border-radius: var(--border-radius); +} + +.config-nav__category-option__wrapper { + &:not(:last-child) { + margin-bottom: var(--spacing-2xs); + } +} + +.config-nav__category-option { + @extend %typo-body-1; + display: flex; + align-items: center; + box-sizing: border-box; + width: 100%; + min-height: var(--button-min-height); + padding: 18px 20px; + transition: var(--transition); + text-align: left; + color: var(--text-main-color); + border-radius: var(--border-radius); + + .wt-icon { + margin-right: var(--spacing-xs); + } +} diff --git a/src/modules/contacts/modules/timeline/modules/calls/components/task-row/actions/task-timeline-transcription-popup.vue b/src/modules/contacts/modules/timeline/modules/calls/components/task-row/actions/task-timeline-transcription-popup.vue index 710c3338..39504fac 100644 --- a/src/modules/contacts/modules/timeline/modules/calls/components/task-row/actions/task-timeline-transcription-popup.vue +++ b/src/modules/contacts/modules/timeline/modules/calls/components/task-row/actions/task-timeline-transcription-popup.vue @@ -40,7 +40,7 @@ + + diff --git a/src/modules/lookups/modules/sources/modules/sources/components/opened-sources.vue b/src/modules/lookups/modules/sources/modules/sources/components/opened-sources.vue new file mode 100644 index 00000000..01f628a6 --- /dev/null +++ b/src/modules/lookups/modules/sources/modules/sources/components/opened-sources.vue @@ -0,0 +1,205 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/lookups/modules/sources/modules/sources/components/the-sources.vue b/src/modules/lookups/modules/sources/modules/sources/components/the-sources.vue new file mode 100644 index 00000000..8b9bd5bf --- /dev/null +++ b/src/modules/lookups/modules/sources/modules/sources/components/the-sources.vue @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + {{ t('lookups.sources.caseSources') }} + + + + + + + + deleteData(selectedRows), + })" + class="delete" + /> + + + + + + + + + + + + {{ item.name }} + + + + {{ item.statusDuration }} + + + + + + deleteData(item), + })" + /> + + + + + + + + + + + + + diff --git a/src/modules/lookups/modules/sources/modules/sources/router/_internals/SourcesRouteNames.enum.js b/src/modules/lookups/modules/sources/modules/sources/router/_internals/SourcesRouteNames.enum.js new file mode 100644 index 00000000..338338cd --- /dev/null +++ b/src/modules/lookups/modules/sources/modules/sources/router/_internals/SourcesRouteNames.enum.js @@ -0,0 +1,7 @@ +import RouteNames from "../../../../../../../../app/router/_internals/RouteNames.enum.js"; + +export default Object.freeze({ + GENERAL: `${RouteNames.CONTACT_GROUPS}-general`, + PERMISSIONS: `${RouteNames.CONTACT_GROUPS}-permissions`, + SOURCES: `${RouteNames.CONTACT_GROUPS}-sources`, +}); diff --git a/src/modules/lookups/modules/sources/modules/sources/router/sources.js b/src/modules/lookups/modules/sources/modules/sources/router/sources.js new file mode 100644 index 00000000..08aa2b02 --- /dev/null +++ b/src/modules/lookups/modules/sources/modules/sources/router/sources.js @@ -0,0 +1,33 @@ +import RouteNames from "../../../../../../../app/router/_internals/RouteNames.enum.js"; +import ContactGroupsRouteNames from "./_internals/SourcesRouteNames.enum.js"; + +const Sources = () => import( '../components/the-sources.vue'); +const Agent = () => import('../components/opened-sources.vue'); +const General = () => import("../components/opened-sources-general.vue"); + +import {checkRouteAccess} from "../../../../../../../app/router/_internals/guards.js"; + +const ContactGroupsRoutes = [ + { + path: '/lookups/sources', + name: RouteNames.CONTACT_GROUPS, + component: Sources, + beforeEnter: checkRouteAccess, + }, + { + path: '/lookups/sources/:id', + name: `${RouteNames.CONTACT_GROUPS}-card`, + redirect: { name: ContactGroupsRouteNames.GENERAL }, + component: Agent, + beforeEnter: checkRouteAccess, + children: [ + { + path: 'general', + name: ContactGroupsRouteNames.GENERAL, + component: General, + } + ], + }, +] + +export default ContactGroupsRoutes; diff --git a/src/modules/lookups/modules/sources/modules/sources/store/_internals/headers.js b/src/modules/lookups/modules/sources/modules/sources/store/_internals/headers.js new file mode 100644 index 00000000..af559c8c --- /dev/null +++ b/src/modules/lookups/modules/sources/modules/sources/store/_internals/headers.js @@ -0,0 +1,22 @@ +import { SortSymbols } from '@webitel/ui-sdk/src/scripts/sortQueryAdapters'; + +export default [ + { + value: 'name', + locale: 'objects.name', + field: 'name', + sort: SortSymbols.NONE, + }, + { + value: 'description', + locale: 'objects.description', + field: 'description', + sort: SortSymbols.NONE, + }, + { + value: 'type', + locale: 'lookups.sources.type.type', + field: 'type', + sort: SortSymbols.NONE, + }, +]; diff --git a/src/modules/lookups/modules/sources/modules/sources/store/sources.js b/src/modules/lookups/modules/sources/modules/sources/store/sources.js new file mode 100644 index 00000000..996cc2c2 --- /dev/null +++ b/src/modules/lookups/modules/sources/modules/sources/store/sources.js @@ -0,0 +1,33 @@ +import ObjectStoreModule from '../../../../../../../app/store/BaseStoreModules/StoreModules/ObjectStoreModule'; +import PermissionsStoreModule from '../../../../../../../app/store/BaseStoreModules/StoreModules/PermissionsStoreModule/PermissionsStoreModule'; +import SourcesAPI from '../api/sources'; +import headers from './_internals/headers'; + +const resettableState = { + itemInstance: { + name: '', + description: '', + type: '' + }, +}; + +const actions = { + RESET_ITEM_STATE: async (context) => { + context.commit('RESET_ITEM_STATE'); + }, +}; + +const PERMISSIONS_API_URL = '/contacts/groups'; +const permissions = new PermissionsStoreModule() + .generateAPIActions(PERMISSIONS_API_URL) + .getModule(); + +const sources = new ObjectStoreModule({ resettableState, headers }) + .attachAPIModule(SourcesAPI) + .generateAPIActions() + .setChildModules({ + permissions, + }) + .getModule({ actions }); + +export default sources; diff --git a/src/modules/lookups/modules/sources/store/_internals/headers.js b/src/modules/lookups/modules/sources/store/_internals/headers.js new file mode 100644 index 00000000..c3eb17d5 --- /dev/null +++ b/src/modules/lookups/modules/sources/store/_internals/headers.js @@ -0,0 +1,25 @@ +import { SortSymbols } from '@webitel/ui-sdk/src/scripts/sortQueryAdapters'; + +export default [ + { + value: 'name', + locale: 'reusable.name', + show: true, + field: 'name', + sort: SortSymbols.NONE, + }, + { + value: 'type', + locale: 'lookups.sources.type.type', + show: true, + field: 'type', + sort: SortSymbols.NONE, + }, + { + value: 'description', + locale: 'vocabulary.description', + show: true, + field: 'description', + sort: SortSymbols.NONE, + }, +]; diff --git a/src/modules/lookups/modules/sources/store/sources.js b/src/modules/lookups/modules/sources/store/sources.js new file mode 100644 index 00000000..1e9eb293 --- /dev/null +++ b/src/modules/lookups/modules/sources/store/sources.js @@ -0,0 +1,48 @@ +import TableStoreModule + from '@webitel/ui-sdk/src/modules/TableStoreModule/store/TableStoreModule'; +import CardStoreModule + from '@webitel/ui-sdk/src/modules/CardStoreModule/store/CardStoreModule'; +import BaseStoreModule + from '@webitel/ui-sdk/src/store/BaseStoreModules/BaseStoreModule'; +import ApiStoreModule + from '@webitel/ui-sdk/src/store/BaseStoreModules/ApiStoreModule'; + +import SourcesAPI from '../modules/sources/api/SourcesAPI'; +import headers from './_internals/headers'; +import filters from '../../../../contacts/modules/filters/store/filters'; +import timeline from '../../../../contacts/modules/timeline/store/timeline'; +import emails from '../../../../contacts/modules/emails/store/emails'; +import phones from '../../../../contacts/modules/phones/store/phones'; +import messaging from '../../../../contacts/modules/messaging/store/messaging'; +import permissions from '../../../../contacts/modules/permissions/store/permissions'; +import variables from '../../../../contacts/modules/variables/store/variables'; + +const cardState = { + itemInstance: { + id: '', + name: '', + description: '', + type: '', + }, +}; + +const tableGetters = { + REQUIRED_FIELDS: () => ['mode'], +}; + +const api = new ApiStoreModule() +.generateAPIActions(SourcesAPI) +.getModule(); + +const table = new TableStoreModule({ headers }) +.setChildModules({ api, filters }) +.getModule({ getters: tableGetters }); + +const card = new CardStoreModule() +.setChildModules({ api, timeline, emails, phones, messaging, variables, permissions }) +.getModule({ state: cardState }); + +const contacts = new BaseStoreModule() +.setChildModules({ table, card }) +.getModule(); +export default contacts; diff --git a/src/modules/permissions/modules/objects/api/objects.js b/src/modules/permissions/modules/objects/api/objects.js new file mode 100644 index 00000000..9af250ac --- /dev/null +++ b/src/modules/permissions/modules/objects/api/objects.js @@ -0,0 +1,78 @@ +import { getDefaultGetListResponse, getDefaultGetParams } from '@webitel/ui-sdk/src/api/defaults/index.js'; +import applyTransform, { + camelToSnake, + generateUrl, + merge, + mergeEach, + notify, + sanitize, + snakeToCamel, + starToSearch, +} from '@webitel/ui-sdk/src/api/transformers/index.js'; +import instance from '../../../../../app/api/instance'; + +const baseUrl = '/objclass'; + +const getObjectList = async (params) => { + const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id']; + + const defaultObject = { + // default object prototype, to merge response with it to get all fields + class: '', + obac: false, + rbac: false, + id: 0, + }; + + const url = applyTransform(params, [ + merge(getDefaultGetParams()), + starToSearch('search'), + (params) => ({ ...params, q: params.search }), + sanitize(fieldsToSend), + camelToSnake(), + generateUrl(baseUrl), + ]); + try { + const response = await instance.get(url); + const { items, next } = applyTransform(response.data, [ + snakeToCamel(), + merge(getDefaultGetListResponse()), + ]); + return { + items: applyTransform(items, [mergeEach(defaultObject)]), + next, + }; + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const getObject = async ({ itemId: id }) => { + const url = `${baseUrl}/${id}`; + + try { + const response = await instance.get(url); + return applyTransform(response.data, [snakeToCamel()]); + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const patchObject = async ({ changes, id }) => { + const body = applyTransform(changes, [camelToSnake()]); + const url = `${baseUrl}/${id}`; + try { + const response = await instance.patch(url, body); + return applyTransform(response.data, [snakeToCamel()]); + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const ObjectsAPI = { + getList: getObjectList, + get: getObject, + patch: patchObject, +}; + +export default ObjectsAPI; diff --git a/src/modules/permissions/modules/objects/store/_internals/enums/AccessMode.enum.js b/src/modules/permissions/modules/objects/store/_internals/enums/AccessMode.enum.js new file mode 100644 index 00000000..6b0e849a --- /dev/null +++ b/src/modules/permissions/modules/objects/store/_internals/enums/AccessMode.enum.js @@ -0,0 +1,5 @@ +export default Object.freeze({ + FORBIDDEN: 1, + ALLOW: 2, + MANAGE: 3, +}); diff --git a/src/modules/permissions/modules/objects/store/objects.js b/src/modules/permissions/modules/objects/store/objects.js new file mode 100644 index 00000000..b9da4dd4 --- /dev/null +++ b/src/modules/permissions/modules/objects/store/objects.js @@ -0,0 +1,15 @@ +import ObjectStoreModule from '../../../../../app/store/BaseStoreModules/StoreModules/ObjectStoreModule'; +import ObjectsAPI from '../api/objects'; + +const actions = { + RESET_ITEM_STATE: (context) => { + context.commit('RESET_ITEM_STATE'); + }, +}; + +const objects = new ObjectStoreModule() + .attachAPIModule(ObjectsAPI) + .generateAPIActions() + .getModule({ actions }); + +export default objects; diff --git a/src/modules/permissions/modules/roles/api/roles.js b/src/modules/permissions/modules/roles/api/roles.js new file mode 100644 index 00000000..9a742e48 --- /dev/null +++ b/src/modules/permissions/modules/roles/api/roles.js @@ -0,0 +1,192 @@ +import { getDefaultGetListResponse, getDefaultGetParams } from '@webitel/ui-sdk/src/api/defaults/index.js'; +import applyTransform, { + camelToSnake, + generateUrl, + merge, + notify, + sanitize, + snakeToCamel, + starToSearch, +} from '@webitel/ui-sdk/src/api/transformers/index.js'; +import ApplicationsAccess from '@webitel/ui-sdk/src/modules/Userinfo/classes/ApplicationsAccess'; +import deepCopy from 'deep-copy'; +import instance from '../../../../../app/api/instance'; + +const baseUrl = '/roles'; +const fieldsToSend = ['name', 'description', 'permissions', 'metadata']; + +const preRequestHandler = (item) => { + const copy = deepCopy(item); + copy.metadata.access = ApplicationsAccess.minify(copy.metadata.access); + return copy; +}; + +const getRoleList = async (params) => { + const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id']; + + const url = applyTransform(params, [ + merge(getDefaultGetParams()), + starToSearch('search'), + (params) => ({ ...params, q: params.search }), + sanitize(fieldsToSend), + camelToSnake(), + generateUrl(baseUrl), + ]); + try { + const response = await instance.get(url); + const { items, next } = applyTransform(response.data, [ + snakeToCamel(), + merge(getDefaultGetListResponse()), + ]); + return { + items, + next, + }; + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const getRole = async ({ itemId: id }) => { + const defaultObject = { + name: '', + description: '', + permissions: [], + metadata: {}, + }; + + const itemResponseHandler = (response) => { + const copy = deepCopy(response); + copy.metadata.access = new ApplicationsAccess({ + access: copy.metadata.access, + }).getAccess(); + return copy; + }; + + const url = `${baseUrl}/${id}?fields=metadata&fields=permissions&fields=name&fields=description`; + + try { + const response = await instance.get(url); + return applyTransform(response.data, [ + snakeToCamel(), + merge(defaultObject), + itemResponseHandler, + ]); + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const getExtendedRoles = async (params) => { + const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id']; + + const url = applyTransform(params, [ + merge(getDefaultGetParams()), + starToSearch('search'), + (params) => ({ ...params, q: params.search }), + sanitize(fieldsToSend), + camelToSnake(), + generateUrl(baseUrl), + ]); + try { + const response = await instance.get(url); + const { items, next } = applyTransform(response.data, [ + snakeToCamel(), + merge(getDefaultGetListResponse()), + ]); + return { + items, + next, + }; + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const addRole = async ({ itemInstance }) => { + const item = applyTransform(itemInstance, [ + preRequestHandler, + sanitize(fieldsToSend), + camelToSnake(), + ]); + try { + const response = await instance.post(baseUrl, item); + return applyTransform(response.data, [snakeToCamel()]); + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const updateRole = async ({ itemInstance, itemId: id }) => { + const item = applyTransform(itemInstance, [ + preRequestHandler, + sanitize(fieldsToSend), + camelToSnake(), + ]); + + const url = `${baseUrl}/${id}`; + try { + const response = await instance.put(url, item); + return applyTransform(response.data, [snakeToCamel()]); + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const deleteRole = async ({ id }) => { + const url = `${baseUrl}/${id}`; + try { + const response = await instance.delete(url); + return applyTransform(response.data, []); + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const getRolesLookup = (params) => + getRoleList({ + ...params, + fields: params.fields || ['id', 'name'], + }); + +const PERMISSIONS_LIST_URL = '/permissions'; + +const getPermissionsOptions = async (params) => { + const fieldsToSend = ['page', 'size', 'q', 'sort', 'fields', 'id']; + + const url = applyTransform(params, [ + merge(getDefaultGetParams()), + starToSearch('search'), + (params) => ({ ...params, q: params.search }), + sanitize(fieldsToSend), + camelToSnake(), + generateUrl(PERMISSIONS_LIST_URL), + ]); + try { + const response = await instance.get(url); + const { items, next } = applyTransform(response.data, [ + snakeToCamel(), + merge(getDefaultGetListResponse()), + ]); + return { + items, + next, + }; + } catch (err) { + throw applyTransform(err, [notify]); + } +}; + +const RolesAPI = { + getList: getRoleList, + get: getRole, + add: addRole, + update: updateRole, + delete: deleteRole, + getLookup: getRolesLookup, + + getExtendedRoles, + getPermissionsOptions, +}; + +export default RolesAPI; diff --git a/src/modules/permissions/modules/roles/store/_internals/headers.js b/src/modules/permissions/modules/roles/store/_internals/headers.js new file mode 100644 index 00000000..ff2ea4fd --- /dev/null +++ b/src/modules/permissions/modules/roles/store/_internals/headers.js @@ -0,0 +1,16 @@ +import { SortSymbols } from '@webitel/ui-sdk/src/scripts/sortQueryAdapters'; + +export default [ + { + value: 'name', + locale: 'objects.name', + field: 'name', + sort: SortSymbols.NONE, + }, + { + value: 'description', + locale: 'objects.description', + field: 'description', + sort: SortSymbols.NONE, + }, +]; diff --git a/src/modules/permissions/modules/roles/store/roles.js b/src/modules/permissions/modules/roles/store/roles.js new file mode 100644 index 00000000..30c8672b --- /dev/null +++ b/src/modules/permissions/modules/roles/store/roles.js @@ -0,0 +1,113 @@ +import ApplicationsAccess from '@webitel/ui-sdk/src/modules/Userinfo/classes/ApplicationsAccess'; +import deepCopy from 'deep-copy'; +import ObjectStoreModule from '../../../../../app/store/BaseStoreModules/StoreModules/ObjectStoreModule'; +import RolesAPI from '../api/roles'; +import headers from './_internals/headers'; + +const resettableState = { + itemInstance: { + name: '', + description: '', + permissions: [], + metadata: { + access: new ApplicationsAccess().getAccess(), + }, + }, +}; + +const actions = { + GET_ITEM: (context) => + RolesAPI.get({ + ...context.state, + query: { + fields: '*,metadata.access', + }, + }), + ADD_ROLE_PERMISSION: (context, permission) => { + const value = context.state.itemInstance.permissions.concat(permission); + return context.dispatch('SET_ITEM_PROPERTY', { + prop: 'permissions', + value, + }); + }, + UPDATE_ROLE_PERMISSION: (context, { index, permission }) => { + const value = [...context.state.itemInstance.permissions]; + value.splice(index, 1, permission); + return context.dispatch('SET_ITEM_PROPERTY', { + prop: 'permissions', + value, + }); + }, + DELETE_ROLE_PERMISSION: (context, deleted) => { + let action = 'DELETE_SINGLE_PERMISSION'; + if (Array.isArray(deleted)) { + if (deleted.length) action = 'DELETE_BULK_PERMISSIONS'; + else action = 'DELETE_ALL_PERMISSIONS'; + } + return context.dispatch(action, deleted); + }, + DELETE_SINGLE_PERMISSION: (context, deleted) => { + const permissions = [...context.state.itemInstance.permissions]; + permissions.splice( + permissions.findIndex(({ id }) => id === deleted.id), + 1, + ); + return context.dispatch('SET_ITEM_PROPERTY', { + prop: 'permissions', + value: permissions, + }); + }, + DELETE_BULK_PERMISSIONS: (context, deleted) => { + const permissions = context.state.itemInstance.permissions.filter(({ id: permId }) => { + return !deleted.some(({ id: deletedPermId }) => { + return deletedPermId === permId; + }); + }); + return context.dispatch('SET_ITEM_PROPERTY', { + prop: 'permissions', + value: permissions, + }); + }, + DELETE_ALL_PERMISSIONS: (context) => { + const permissions = []; + return context.dispatch('SET_ITEM_PROPERTY', { + prop: 'permissions', + value: permissions, + }); + }, + UPDATE_APPLICATION_ACCESS: async (context, { app, value }) => { + const metadata = deepCopy(context.state.itemInstance.metadata); + metadata.access[app]._enabled = value; + await context.dispatch('SET_ITEM_PROPERTY', { + prop: 'metadata', + value: metadata, + }); + const appSections = Object.keys(metadata.access[app]).filter( + (section) => section.at(0) !== '_', + ); + return Promise.allSettled( + appSections.map((section) => + context.dispatch('UPDATE_APPLICATION_SECTION_ACCESS', { + app, + section, + value, + }), + ), + ); + }, + UPDATE_APPLICATION_SECTION_ACCESS: (context, { app, section, value }) => { + const metadata = deepCopy(context.state.itemInstance.metadata); + metadata.access[app][section]._enabled = value; + return context.dispatch('SET_ITEM_PROPERTY', { + prop: 'metadata', + value: metadata, + }); + }, +}; + +const roles = new ObjectStoreModule({ resettableState, headers }) + .attachAPIModule(RolesAPI) + .generateAPIActions() + .getModule({ actions }); + +export default roles; diff --git a/src/modules/permissions/store/permissions.js b/src/modules/permissions/store/permissions.js new file mode 100644 index 00000000..1970efbd --- /dev/null +++ b/src/modules/permissions/store/permissions.js @@ -0,0 +1,10 @@ +import objects from '../modules/objects/store/objects'; + +const modules = { + objects, +}; + +export default { + namespaced: true, + modules, +}; diff --git a/src/modules/start-page/assets/configuration-section-dark.svg b/src/modules/start-page/assets/configuration-section-dark.svg new file mode 100644 index 00000000..44292c41 --- /dev/null +++ b/src/modules/start-page/assets/configuration-section-dark.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/start-page/assets/configuration-section-light.svg b/src/modules/start-page/assets/configuration-section-light.svg new file mode 100644 index 00000000..55df89e3 --- /dev/null +++ b/src/modules/start-page/assets/configuration-section-light.svg @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/start-page/assets/contacts-section-dark.svg b/src/modules/start-page/assets/contacts-section-dark.svg new file mode 100644 index 00000000..a913b4c3 --- /dev/null +++ b/src/modules/start-page/assets/contacts-section-dark.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/start-page/assets/contacts-section-light.svg b/src/modules/start-page/assets/contacts-section-light.svg new file mode 100644 index 00000000..a3c53817 --- /dev/null +++ b/src/modules/start-page/assets/contacts-section-light.svg @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/modules/start-page/assets/start-page-logo-dark.svg b/src/modules/start-page/assets/start-page-logo-dark.svg new file mode 100644 index 00000000..eb66c86e --- /dev/null +++ b/src/modules/start-page/assets/start-page-logo-dark.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/start-page/assets/start-page-logo-light.svg b/src/modules/start-page/assets/start-page-logo-light.svg new file mode 100644 index 00000000..5ccdf1a1 --- /dev/null +++ b/src/modules/start-page/assets/start-page-logo-light.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/modules/start-page/components/start-page-card.vue b/src/modules/start-page/components/start-page-card.vue new file mode 100644 index 00000000..dda740aa --- /dev/null +++ b/src/modules/start-page/components/start-page-card.vue @@ -0,0 +1,80 @@ + + + + + {{ card.name }} + + + + + {{ card.text }} + + + + + + + + + diff --git a/src/modules/start-page/components/start-page-logo.vue b/src/modules/start-page/components/start-page-logo.vue new file mode 100644 index 00000000..1d9a36bc --- /dev/null +++ b/src/modules/start-page/components/start-page-logo.vue @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/src/modules/start-page/components/the-start-page.vue b/src/modules/start-page/components/the-start-page.vue new file mode 100644 index 00000000..3fc3c393 --- /dev/null +++ b/src/modules/start-page/components/the-start-page.vue @@ -0,0 +1,87 @@ + + + + + + + + + + diff --git a/src/modules/userinfo/store/userinfo.js b/src/modules/userinfo/store/userinfo.js index 5e748af6..aa9b3bca 100644 --- a/src/modules/userinfo/store/userinfo.js +++ b/src/modules/userinfo/store/userinfo.js @@ -9,6 +9,12 @@ const getters = { GET_OBJECT_SCOPE_BY_NAME: (state) => (name) => ( Object.values(state.scope).find((object) => name === object.class) ), + GET_OBJECT_SCOPE_BY_CLASS: (state) => (scopeClass) => { + return Object.values(state.scope).find((object) => object.class === scopeClass) + }, + ALLOW_SECTION_ACCESS: (state, getters) => ({ scopeClass, name, route }) => { + return getters.GET_OBJECT_SCOPE_BY_CLASS(scopeClass) && getters.CHECK_OBJECT_ACCESS({ name, route }); + }, }; const userinfo = new UserinfoStoreModule().getModule({ state, getters }); diff --git a/vite.config.js b/vite.config.js index e2cfdcba..23ccf8ea 100644 --- a/vite.config.js +++ b/vite.config.js @@ -3,6 +3,7 @@ import { defineConfig, loadEnv } from 'vite'; import { nodePolyfills } from 'vite-plugin-node-polyfills'; import createSvgSpritePlugin from 'vite-plugin-svg-sprite'; +import vueDevTools from 'vite-plugin-vue-devtools' // https://vitejs.dev/config/ export default ({ mode }) => { const env = loadEnv(mode, process.cwd(), ''); @@ -24,11 +25,11 @@ export default ({ mode }) => { }, }, }, - resolve: { - alias: { - vue: '@vue/compat/dist/vue.esm-browser.prod.js', - }, - }, + // resolve: { + // alias: { + // vue: '@vue/compat/dist/vue.esm-browser.prod.js', + // }, + // }, plugins: [ vue({ template: { @@ -50,6 +51,7 @@ export default ({ mode }) => { createSvgSpritePlugin({ include: '**/sprite/*.svg', }), + vueDevTools(), ], test: { globals: true, diff --git a/vite.config.js.timestamp-1723576858370-a3c09f7b4cb88.mjs b/vite.config.js.timestamp-1723576858370-a3c09f7b4cb88.mjs deleted file mode 100644 index e69de29b..00000000
+ {{ card.text }} +