diff --git a/.eslintrc.js b/.eslintrc.js index c9cab273..48c71527 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -36,5 +36,6 @@ module.exports = { "@typescript-eslint/ban-ts-comment": "off", "@typescript-eslint/no-var-requires": "off", "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-this-alias": "off", }, }; diff --git a/package.json b/package.json index cabb85ea..d743bef4 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,7 @@ "@typescript-eslint/eslint-plugin": "^6.7.4", "@typescript-eslint/parser": "^6.7.4", "@vitejs/plugin-vue": "^4.0.0", + "@vitest/coverage-v8": "^2.1.5", "@vue/compiler-dom": "^3.3.8", "@vue/compiler-sfc": "^3.2.45", "@vue/test-utils": "^2.2.7", @@ -104,7 +105,7 @@ "vite": "^3.2.10", "vite-plugin-css-injected-by-js": "^2.2.0", "vite-svg-loader": "^4.0.0", - "vitest": "^0.26.1" + "vitest": "^2.1.5" }, "postcss": { "plugins": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 187f71d1..cec1f412 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -104,6 +104,9 @@ importers: "@vitejs/plugin-vue": specifier: ^4.0.0 version: 4.0.0(vite@3.2.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0))(vue@3.2.45) + "@vitest/coverage-v8": + specifier: ^2.1.5 + version: 2.1.5(vitest@2.1.5(@types/node@20.14.9)(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0)) "@vue/compiler-dom": specifier: ^3.3.8 version: 3.3.8 @@ -189,8 +192,8 @@ importers: specifier: ^4.0.0 version: 4.0.0 vitest: - specifier: ^0.26.1 - version: 0.26.1(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + specifier: ^2.1.5 + version: 2.1.5(@types/node@20.14.9)(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) packages: "@ampproject/remapping@2.3.0": @@ -515,10 +518,10 @@ packages: } engines: { node: ">=6.9.0" } - "@babel/helper-string-parser@7.24.6": + "@babel/helper-string-parser@7.25.9": resolution: { - integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==, + integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==, } engines: { node: ">=6.9.0" } @@ -543,6 +546,13 @@ packages: } engines: { node: ">=6.9.0" } + "@babel/helper-validator-identifier@7.25.9": + resolution: + { + integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==, + } + engines: { node: ">=6.9.0" } + "@babel/helper-validator-option@7.18.6": resolution: { @@ -616,10 +626,10 @@ packages: engines: { node: ">=6.0.0" } hasBin: true - "@babel/parser@7.24.6": + "@babel/parser@7.26.2": resolution: { - integrity: sha512-eNZXdfU35nJC2h24RznROuOpO94h6x8sg9ju0tT9biNtLZ2vuP8SduLqqV+/8+cebSLV9SJEAN5Z3zQbJG/M+Q==, + integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==, } engines: { node: ">=6.0.0" } hasBin: true @@ -1269,13 +1279,19 @@ packages: } engines: { node: ">=6.9.0" } - "@babel/types@7.24.6": + "@babel/types@7.26.0": resolution: { - integrity: sha512-WaMsgi6Q8zMgMth93GvWPXkhAIEobfsIkLTacoVZoK1J0CevIPGYY2Vo5YvJGqyHqXM6P4ppOYGsIRU8MM9pFQ==, + integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==, } engines: { node: ">=6.9.0" } + "@bcoe/v8-coverage@0.2.3": + resolution: + { + integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==, + } + "@colors/colors@1.5.0": resolution: { @@ -1303,6 +1319,24 @@ packages: integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==, } + "@esbuild/aix-ppc64@0.21.5": + resolution: + { + integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.21.5": + resolution: + { + integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [android] + "@esbuild/android-arm@0.15.18": resolution: { @@ -1312,6 +1346,87 @@ packages: cpu: [arm] os: [android] + "@esbuild/android-arm@0.21.5": + resolution: + { + integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [android] + + "@esbuild/android-x64@0.21.5": + resolution: + { + integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [android] + + "@esbuild/darwin-arm64@0.21.5": + resolution: + { + integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-x64@0.21.5": + resolution: + { + integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [darwin] + + "@esbuild/freebsd-arm64@0.21.5": + resolution: + { + integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.21.5": + resolution: + { + integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [freebsd] + + "@esbuild/linux-arm64@0.21.5": + resolution: + { + integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm@0.21.5": + resolution: + { + integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==, + } + engines: { node: ">=12" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-ia32@0.21.5": + resolution: + { + integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [linux] + "@esbuild/linux-loong64@0.15.18": resolution: { @@ -1321,6 +1436,114 @@ packages: cpu: [loong64] os: [linux] + "@esbuild/linux-loong64@0.21.5": + resolution: + { + integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==, + } + engines: { node: ">=12" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-mips64el@0.21.5": + resolution: + { + integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==, + } + engines: { node: ">=12" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-ppc64@0.21.5": + resolution: + { + integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==, + } + engines: { node: ">=12" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-riscv64@0.21.5": + resolution: + { + integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==, + } + engines: { node: ">=12" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-s390x@0.21.5": + resolution: + { + integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==, + } + engines: { node: ">=12" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-x64@0.21.5": + resolution: + { + integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [linux] + + "@esbuild/netbsd-x64@0.21.5": + resolution: + { + integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-x64@0.21.5": + resolution: + { + integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [openbsd] + + "@esbuild/sunos-x64@0.21.5": + resolution: + { + integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.21.5": + resolution: + { + integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==, + } + engines: { node: ">=12" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-ia32@0.21.5": + resolution: + { + integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==, + } + engines: { node: ">=12" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-x64@0.21.5": + resolution: + { + integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==, + } + engines: { node: ">=12" } + cpu: [x64] + os: [win32] + "@eslint-community/eslint-utils@4.4.0": resolution: { @@ -1427,6 +1650,20 @@ packages: integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, } + "@isaacs/cliui@8.0.2": + resolution: + { + integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==, + } + engines: { node: ">=12" } + + "@istanbuljs/schema@0.1.3": + resolution: + { + integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==, + } + engines: { node: ">=8" } + "@jest/expect-utils@29.7.0": resolution: { @@ -1760,10 +1997,10 @@ packages: integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, } - "@jridgewell/sourcemap-codec@1.4.15": + "@jridgewell/sourcemap-codec@1.5.0": resolution: { - integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==, + integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==, } "@jridgewell/trace-mapping@0.3.17": @@ -1820,17 +2057,168 @@ packages: "@npmcli/move-file@1.1.2": resolution: { - integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==, + integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==, + } + engines: { node: ">=10" } + deprecated: This functionality has been moved to @npmcli/fs + + "@pkgjs/parseargs@0.11.0": + resolution: + { + integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==, + } + engines: { node: ">=14" } + + "@pkgr/utils@2.4.2": + resolution: + { + integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, + } + engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + + "@rollup/rollup-android-arm-eabi@4.27.3": + resolution: + { + integrity: sha512-EzxVSkIvCFxUd4Mgm4xR9YXrcp976qVaHnqom/Tgm+vU79k4vV4eYTjmRvGfeoW8m9LVcsAy/lGjcgVegKEhLQ==, + } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm64@4.27.3": + resolution: + { + integrity: sha512-LJc5pDf1wjlt9o/Giaw9Ofl+k/vLUaYsE2zeQGH85giX2F+wn/Cg8b3c5CDP3qmVmeO5NzwVUzQQxwZvC2eQKw==, + } + cpu: [arm64] + os: [android] + + "@rollup/rollup-darwin-arm64@4.27.3": + resolution: + { + integrity: sha512-OuRysZ1Mt7wpWJ+aYKblVbJWtVn3Cy52h8nLuNSzTqSesYw1EuN6wKp5NW/4eSre3mp12gqFRXOKTcN3AI3LqA==, + } + cpu: [arm64] + os: [darwin] + + "@rollup/rollup-darwin-x64@4.27.3": + resolution: + { + integrity: sha512-xW//zjJMlJs2sOrCmXdB4d0uiilZsOdlGQIC/jjmMWT47lkLLoB1nsNhPUcnoqyi5YR6I4h+FjBpILxbEy8JRg==, + } + cpu: [x64] + os: [darwin] + + "@rollup/rollup-freebsd-arm64@4.27.3": + resolution: + { + integrity: sha512-58E0tIcwZ+12nK1WiLzHOD8I0d0kdrY/+o7yFVPRHuVGY3twBwzwDdTIBGRxLmyjciMYl1B/U515GJy+yn46qw==, + } + cpu: [arm64] + os: [freebsd] + + "@rollup/rollup-freebsd-x64@4.27.3": + resolution: + { + integrity: sha512-78fohrpcVwTLxg1ZzBMlwEimoAJmY6B+5TsyAZ3Vok7YabRBUvjYTsRXPTjGEvv/mfgVBepbW28OlMEz4w8wGA==, + } + cpu: [x64] + os: [freebsd] + + "@rollup/rollup-linux-arm-gnueabihf@4.27.3": + resolution: + { + integrity: sha512-h2Ay79YFXyQi+QZKo3ISZDyKaVD7uUvukEHTOft7kh00WF9mxAaxZsNs3o/eukbeKuH35jBvQqrT61fzKfAB/Q==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm-musleabihf@4.27.3": + resolution: + { + integrity: sha512-Sv2GWmrJfRY57urktVLQ0VKZjNZGogVtASAgosDZ1aUB+ykPxSi3X1nWORL5Jk0sTIIwQiPH7iE3BMi9zGWfkg==, + } + cpu: [arm] + os: [linux] + + "@rollup/rollup-linux-arm64-gnu@4.27.3": + resolution: + { + integrity: sha512-FPoJBLsPW2bDNWjSrwNuTPUt30VnfM8GPGRoLCYKZpPx0xiIEdFip3dH6CqgoT0RnoGXptaNziM0WlKgBc+OWQ==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-arm64-musl@4.27.3": + resolution: + { + integrity: sha512-TKxiOvBorYq4sUpA0JT+Fkh+l+G9DScnG5Dqx7wiiqVMiRSkzTclP35pE6eQQYjP4Gc8yEkJGea6rz4qyWhp3g==, + } + cpu: [arm64] + os: [linux] + + "@rollup/rollup-linux-powerpc64le-gnu@4.27.3": + resolution: + { + integrity: sha512-v2M/mPvVUKVOKITa0oCFksnQQ/TqGrT+yD0184/cWHIu0LoIuYHwox0Pm3ccXEz8cEQDLk6FPKd1CCm+PlsISw==, + } + cpu: [ppc64] + os: [linux] + + "@rollup/rollup-linux-riscv64-gnu@4.27.3": + resolution: + { + integrity: sha512-LdrI4Yocb1a/tFVkzmOE5WyYRgEBOyEhWYJe4gsDWDiwnjYKjNs7PS6SGlTDB7maOHF4kxevsuNBl2iOcj3b4A==, + } + cpu: [riscv64] + os: [linux] + + "@rollup/rollup-linux-s390x-gnu@4.27.3": + resolution: + { + integrity: sha512-d4wVu6SXij/jyiwPvI6C4KxdGzuZOvJ6y9VfrcleHTwo68fl8vZC5ZYHsCVPUi4tndCfMlFniWgwonQ5CUpQcA==, + } + cpu: [s390x] + os: [linux] + + "@rollup/rollup-linux-x64-gnu@4.27.3": + resolution: + { + integrity: sha512-/6bn6pp1fsCGEY5n3yajmzZQAh+mW4QPItbiWxs69zskBzJuheb3tNynEjL+mKOsUSFK11X4LYF2BwwXnzWleA==, + } + cpu: [x64] + os: [linux] + + "@rollup/rollup-linux-x64-musl@4.27.3": + resolution: + { + integrity: sha512-nBXOfJds8OzUT1qUreT/en3eyOXd2EH5b0wr2bVB5999qHdGKkzGzIyKYaKj02lXk6wpN71ltLIaQpu58YFBoQ==, + } + cpu: [x64] + os: [linux] + + "@rollup/rollup-win32-arm64-msvc@4.27.3": + resolution: + { + integrity: sha512-ogfbEVQgIZOz5WPWXF2HVb6En+kWzScuxJo/WdQTqEgeyGkaa2ui5sQav9Zkr7bnNCLK48uxmmK0TySm22eiuw==, + } + cpu: [arm64] + os: [win32] + + "@rollup/rollup-win32-ia32-msvc@4.27.3": + resolution: + { + integrity: sha512-ecE36ZBMLINqiTtSNQ1vzWc5pXLQHlf/oqGp/bSbi7iedcjcNb6QbCBNG73Euyy2C+l/fn8qKWEwxr+0SSfs3w==, } - engines: { node: ">=10" } - deprecated: This functionality has been moved to @npmcli/fs + cpu: [ia32] + os: [win32] - "@pkgr/utils@2.4.2": + "@rollup/rollup-win32-x64-msvc@4.27.3": resolution: { - integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==, + integrity: sha512-vliZLrDmYKyaUoMzEbMTg2JkerfBjn03KmAw9CykO0Zzkzoyd7o3iZNam/TpyWNjNT+Cz2iO3P9Smv2wgrR+Eg==, } - engines: { node: ^12.20.0 || ^14.18.0 || >=16.0.0 } + cpu: [x64] + os: [win32] "@sinclair/typebox@0.27.8": resolution: @@ -1888,18 +2276,6 @@ packages: integrity: sha512-Y7gDJiIqb9qKUHfBQYOWGngUpLORtirAVPuj/CWJrU2C6ZM4/y3XLwuwfGMF8s7QzW746LQZx23m0+1FSgjfug==, } - "@types/chai-subset@1.3.3": - resolution: - { - integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==, - } - - "@types/chai@4.3.4": - resolution: - { - integrity: sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==, - } - "@types/color-string@1.5.2": resolution: { @@ -1924,6 +2300,12 @@ packages: integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==, } + "@types/estree@1.0.6": + resolution: + { + integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==, + } + "@types/istanbul-lib-coverage@2.0.6": resolution: { @@ -1990,6 +2372,12 @@ packages: integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==, } + "@types/node@22.9.1": + resolution: + { + integrity: sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==, + } + "@types/ramda@0.28.20": resolution: { @@ -2130,6 +2518,68 @@ packages: vite: ^4.0.0 vue: ^3.2.25 + "@vitest/coverage-v8@2.1.5": + resolution: + { + integrity: sha512-/RoopB7XGW7UEkUndRXF87A9CwkoZAJW01pj8/3pgmDVsjMH2IKy6H1A38po9tmUlwhSyYs0az82rbKd9Yaynw==, + } + peerDependencies: + "@vitest/browser": 2.1.5 + vitest: 2.1.5 + peerDependenciesMeta: + "@vitest/browser": + optional: true + + "@vitest/expect@2.1.5": + resolution: + { + integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==, + } + + "@vitest/mocker@2.1.5": + resolution: + { + integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==, + } + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + "@vitest/pretty-format@2.1.5": + resolution: + { + integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==, + } + + "@vitest/runner@2.1.5": + resolution: + { + integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==, + } + + "@vitest/snapshot@2.1.5": + resolution: + { + integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==, + } + + "@vitest/spy@2.1.5": + resolution: + { + integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==, + } + + "@vitest/utils@2.1.5": + resolution: + { + integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==, + } + "@vue/compat@3.2.45": resolution: { @@ -2602,11 +3052,12 @@ packages: } engines: { node: ">=0.8" } - assertion-error@1.1.0: + assertion-error@2.0.1: resolution: { - integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, + integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==, } + engines: { node: ">=12" } astral-regex@2.0.0: resolution: @@ -2788,6 +3239,12 @@ packages: integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, } + brace-expansion@2.0.1: + resolution: + { + integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==, + } + braces@3.0.3: resolution: { @@ -2849,6 +3306,13 @@ packages: } engines: { node: ">=12" } + cac@6.7.14: + resolution: + { + integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==, + } + engines: { node: ">=8" } + cacache@15.3.0: resolution: { @@ -2896,12 +3360,12 @@ packages: integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, } - chai@4.3.7: + chai@5.1.2: resolution: { - integrity: sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==, + integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==, } - engines: { node: ">=4" } + engines: { node: ">=12" } chalk@2.4.2: resolution: @@ -2924,11 +3388,12 @@ packages: } engines: { node: ^12.17.0 || ^14.13 || >=16.0.0 } - check-error@1.0.2: + check-error@2.1.1: resolution: { - integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==, + integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==, } + engines: { node: ">= 16" } check-more-types@2.24.0: resolution: @@ -3349,16 +3814,28 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: + { + integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==, + } + engines: { node: ">=6.0" } + peerDependencies: + supports-color: "*" + peerDependenciesMeta: + supports-color: + optional: true + decimal.js@10.4.3: resolution: { integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, } - deep-eql@4.1.3: + deep-eql@5.0.2: resolution: { - integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==, + integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==, } engines: { node: ">=6" } @@ -3631,10 +4108,10 @@ packages: } engines: { node: ">= 0.4" } - es-module-lexer@1.5.3: + es-module-lexer@1.5.4: resolution: { - integrity: sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==, + integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==, } esbuild-android-64@0.15.18: @@ -3825,6 +4302,14 @@ packages: engines: { node: ">=12" } hasBin: true + esbuild@0.21.5: + resolution: + { + integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==, + } + engines: { node: ">=12" } + hasBin: true + escalade@3.1.1: resolution: { @@ -4010,6 +4495,12 @@ packages: integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, } + estree-walker@3.0.3: + resolution: + { + integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==, + } + esutils@2.0.3: resolution: { @@ -4077,6 +4568,13 @@ packages: integrity: sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==, } + expect-type@1.1.0: + resolution: + { + integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==, + } + engines: { node: ">=12.0.0" } + expect@29.7.0: resolution: { @@ -4239,6 +4737,13 @@ packages: integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==, } + foreground-child@3.3.0: + resolution: + { + integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==, + } + engines: { node: ">=14" } + forever-agent@0.6.1: resolution: { @@ -4326,12 +4831,6 @@ packages: } engines: { node: 6.* || 8.* || >= 10.* } - get-func-name@2.0.2: - resolution: - { - integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==, - } - get-intrinsic@1.2.4: resolution: { @@ -4385,6 +4884,13 @@ packages: integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, } + glob@10.4.5: + resolution: + { + integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==, + } + hasBin: true + glob@7.2.3: resolution: { @@ -4544,6 +5050,12 @@ packages: } engines: { node: ">=12" } + html-escaper@2.0.2: + resolution: + { + integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==, + } + html-to-image@1.11.3: resolution: { @@ -4876,6 +5388,40 @@ packages: integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==, } + istanbul-lib-coverage@3.2.2: + resolution: + { + integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==, + } + engines: { node: ">=8" } + + istanbul-lib-report@3.0.1: + resolution: + { + integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==, + } + engines: { node: ">=10" } + + istanbul-lib-source-maps@5.0.6: + resolution: + { + integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==, + } + engines: { node: ">=10" } + + istanbul-reports@3.1.7: + resolution: + { + integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==, + } + engines: { node: ">=8" } + + jackspeak@3.4.3: + resolution: + { + integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==, + } + jest-diff@29.7.0: resolution: { @@ -5041,12 +5587,6 @@ packages: engines: { node: ">=6" } hasBin: true - jsonc-parser@3.2.0: - resolution: - { - integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==, - } - jsonfile@4.0.0: resolution: { @@ -5171,13 +5711,6 @@ packages: } engines: { node: ">=8.9.0" } - local-pkg@0.4.2: - resolution: - { - integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==, - } - engines: { node: ">=14" } - locate-path@5.0.0: resolution: { @@ -5237,10 +5770,16 @@ packages: } engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } - loupe@2.3.6: + loupe@3.1.2: + resolution: + { + integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==, + } + + lru-cache@10.4.3: resolution: { - integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==, + integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==, } lru-cache@5.1.1: @@ -5262,6 +5801,18 @@ packages: integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==, } + magic-string@0.30.13: + resolution: + { + integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==, + } + + magicast@0.3.5: + resolution: + { + integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==, + } + make-dir@2.1.0: resolution: { @@ -5276,6 +5827,13 @@ packages: } engines: { node: ">=8" } + make-dir@4.0.0: + resolution: + { + integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==, + } + engines: { node: ">=10" } + make-error@1.3.6: resolution: { @@ -5383,6 +5941,13 @@ packages: integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, } + minimatch@9.0.5: + resolution: + { + integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==, + } + engines: { node: ">=16 || 14 >=14.17" } + minimist@1.2.7: resolution: { @@ -5424,6 +5989,13 @@ packages: } engines: { node: ">=8" } + minipass@7.1.2: + resolution: + { + integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==, + } + engines: { node: ">=16 || 14 >=14.17" } + minizlib@2.1.2: resolution: { @@ -5453,12 +6025,6 @@ packages: engines: { node: ">=10" } hasBin: true - mlly@1.0.0: - resolution: - { - integrity: sha512-QL108Hwt+u9bXdWgOI0dhzZfACovn5Aen4Xvc8Jasd9ouRH4NjnrXEiyP3nVvJo91zPlYjVRckta0Nt2zfoR6g==, - } - ms@2.0.0: resolution: { @@ -5694,6 +6260,12 @@ packages: } engines: { node: ">=6" } + package-json-from-dist@1.0.1: + resolution: + { + integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==, + } + pako@1.0.11: resolution: { @@ -5790,30 +6362,32 @@ packages: integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, } - path-type@4.0.0: + path-scurry@1.11.1: resolution: { - integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, + integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==, } - engines: { node: ">=8" } + engines: { node: ">=16 || 14 >=14.18" } - pathe@0.2.0: + path-type@4.0.0: resolution: { - integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==, + integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==, } + engines: { node: ">=8" } - pathe@1.0.0: + pathe@1.1.2: resolution: { - integrity: sha512-nPdMG0Pd09HuSsr7QOKUXO2Jr9eqaDiZvDwdyIhNG5SHYujkQHYKDfGQkulBxvbDHz8oHLsTgKN86LSwYzSHAg==, + integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==, } - pathval@1.1.1: + pathval@2.0.0: resolution: { - integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, + integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==, } + engines: { node: ">= 14.16" } pend@1.2.0: resolution: @@ -5908,12 +6482,6 @@ packages: } engines: { node: ">=8" } - pkg-types@1.0.1: - resolution: - { - integrity: sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g==, - } - pngjs@3.4.0: resolution: { @@ -6314,6 +6882,14 @@ packages: engines: { node: ">=10.0.0" } hasBin: true + rollup@4.27.3: + resolution: + { + integrity: sha512-SLsCOnlmGt9VoZ9Ek8yBK8tAdmPHeppkw+Xa7yDlCEhDTvwYei03JlWo1fdc7YTfLZ4tD8riJCUyAgTbszk1fQ==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + run-applescript@5.0.0: resolution: { @@ -6461,12 +7037,25 @@ packages: } engines: { node: ">= 0.4" } + siginfo@2.0.0: + resolution: + { + integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==, + } + signal-exit@3.0.7: resolution: { integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, } + signal-exit@4.1.0: + resolution: + { + integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==, + } + engines: { node: ">=14" } + simple-swizzle@0.2.2: resolution: { @@ -6613,6 +7202,18 @@ packages: } engines: { node: ">=10" } + stackback@0.0.2: + resolution: + { + integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==, + } + + std-env@3.8.0: + resolution: + { + integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==, + } + string-argv@0.3.2: resolution: { @@ -6669,12 +7270,6 @@ packages: } engines: { node: ">=8" } - strip-literal@1.0.0: - resolution: - { - integrity: sha512-5o4LsH1lzBzO9UFH63AJ2ad2/S2AVx6NtjOcaz+VTT2h1RiRvbipW72z8M/lxEhcPHDBQwpDrnTF7sXy/7OwCQ==, - } - supports-color@5.5.0: resolution: { @@ -6800,6 +7395,13 @@ packages: engines: { node: ">=10" } hasBin: true + test-exclude@7.0.1: + resolution: + { + integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==, + } + engines: { node: ">=18" } + text-table@0.2.0: resolution: { @@ -6830,10 +7432,10 @@ packages: integrity: sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==, } - tinybench@2.3.1: + tinybench@2.9.0: resolution: { - integrity: sha512-hGYWYBMPr7p4g5IarQE7XhlyWveh1EKhy4wUBS1LrHXCKYgvz+4/jCqgmJqZxxldesn05vccrtME2RLLZNW7iA==, + integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==, } tinycolor2@1.4.2: @@ -6842,17 +7444,30 @@ packages: integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==, } - tinypool@0.3.0: + tinyexec@0.3.1: + resolution: + { + integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==, + } + + tinypool@1.0.2: resolution: { - integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==, + integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==, + } + engines: { node: ^18.0.0 || >=20.0.0 } + + tinyrainbow@1.2.0: + resolution: + { + integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==, } engines: { node: ">=14.0.0" } - tinyspy@1.0.2: + tinyspy@3.0.2: resolution: { - integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==, + integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==, } engines: { node: ">=14.0.0" } @@ -6987,13 +7602,6 @@ packages: } engines: { node: ">= 0.8.0" } - type-detect@4.0.8: - resolution: - { - integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, - } - engines: { node: ">=4" } - type-fest@0.20.2: resolution: { @@ -7023,12 +7631,6 @@ packages: engines: { node: ">=14.17" } hasBin: true - ufo@1.0.1: - resolution: - { - integrity: sha512-boAm74ubXHY7KJQZLlXrtMz52qFvpsbOxDcZOnw/Wf+LS4Mmyu7JxmzD4tDLtUQtmZECypJ0FrCz4QIe6dvKRA==, - } - undici-types@5.26.5: resolution: { @@ -7183,12 +7785,12 @@ packages: } engines: { "0": node >=0.6.0 } - vite-node@0.26.1: + vite-node@2.1.5: resolution: { - integrity: sha512-5FJSKZZJz48zFRKHE55WyevZe61hLMQEsqGn+ungfd60kxEztFybZ3yG9ToGFtOWNCCy7Vn5EVuXD8bdeHOSdw==, + integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==, } - engines: { node: ">=v14.16.0" } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true vite-plugin-css-injected-by-js@2.2.0: @@ -7205,17 +7807,47 @@ packages: integrity: sha512-0MMf1yzzSYlV4MGePsLVAOqXsbF5IVxbn4EEzqRnWxTQl8BJg/cfwIzfQNmNQxZp5XXwd4kyRKF1LytuHZTnqA==, } - vite@3.2.11: + vite@3.2.11: + resolution: + { + integrity: sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==, + } + engines: { node: ^14.18.0 || >=16.0.0 } + hasBin: true + peerDependencies: + "@types/node": ">= 14" + less: "*" + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vite@5.4.11: resolution: { - integrity: sha512-K/jGKL/PgbIgKCiJo5QbASQhFiV02X9Jh+Qq0AKCRCRKZtOTVi4t6wh75FDpGf2N9rYOnzH87OEFQNaFy6pdxQ==, + integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==, } - engines: { node: ^14.18.0 || >=16.0.0 } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: - "@types/node": ">= 14" + "@types/node": ^18.0.0 || >=20.0.0 less: "*" + lightningcss: ^1.21.0 sass: "*" + sass-embedded: "*" stylus: "*" sugarss: "*" terser: ^5.4.0 @@ -7224,8 +7856,12 @@ packages: optional: true less: optional: true + lightningcss: + optional: true sass: optional: true + sass-embedded: + optional: true stylus: optional: true sugarss: @@ -7233,22 +7869,25 @@ packages: terser: optional: true - vitest@0.26.1: + vitest@2.1.5: resolution: { - integrity: sha512-qTLRnjYmjmJpHlLUtErxtlRqGCe8WItFhGXKklpWivu7CLP9KXN9iTezROe+vf51Kb+BB/fzxK6fUG9DvFGL5Q==, + integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==, } - engines: { node: ">=v14.16.0" } + engines: { node: ^18.0.0 || >=20.0.0 } hasBin: true peerDependencies: "@edge-runtime/vm": "*" - "@vitest/browser": "*" - "@vitest/ui": "*" + "@types/node": ^18.0.0 || >=20.0.0 + "@vitest/browser": 2.1.5 + "@vitest/ui": 2.1.5 happy-dom: "*" jsdom: "*" peerDependenciesMeta: "@edge-runtime/vm": optional: true + "@types/node": + optional: true "@vitest/browser": optional: true "@vitest/ui": @@ -7394,6 +8033,14 @@ packages: engines: { node: ">= 8" } hasBin: true + why-is-node-running@2.3.0: + resolution: + { + integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==, + } + engines: { node: ">=8" } + hasBin: true + word-wrap@1.2.5: resolution: { @@ -7616,12 +8263,12 @@ snapshots: "@babel/helper-compilation-targets": 7.24.6 "@babel/helper-module-transforms": 7.24.6(@babel/core@7.24.6) "@babel/helpers": 7.24.6 - "@babel/parser": 7.24.6 + "@babel/parser": 7.26.2 "@babel/template": 7.24.6 "@babel/traverse": 7.24.6 - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -7645,7 +8292,7 @@ snapshots: "@babel/generator@7.24.6": dependencies: - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@jridgewell/gen-mapping": 0.3.5 "@jridgewell/trace-mapping": 0.3.25 jsesc: 2.5.2 @@ -7729,7 +8376,7 @@ snapshots: "@babel/helper-function-name@7.24.6": dependencies: "@babel/template": 7.24.6 - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/helper-hoist-variables@7.18.6": dependencies: @@ -7741,7 +8388,7 @@ snapshots: "@babel/helper-hoist-variables@7.24.6": dependencies: - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/helper-member-expression-to-functions@7.18.9": dependencies: @@ -7753,7 +8400,7 @@ snapshots: "@babel/helper-module-imports@7.24.6": dependencies: - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/helper-module-transforms@7.20.2": dependencies: @@ -7775,7 +8422,7 @@ snapshots: "@babel/helper-module-imports": 7.24.6 "@babel/helper-simple-access": 7.24.6 "@babel/helper-split-export-declaration": 7.24.6 - "@babel/helper-validator-identifier": 7.24.6 + "@babel/helper-validator-identifier": 7.25.9 "@babel/helper-optimise-call-expression@7.18.6": dependencies: @@ -7809,7 +8456,7 @@ snapshots: "@babel/helper-simple-access@7.24.6": dependencies: - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/helper-skip-transparent-expression-wrappers@7.20.0": dependencies: @@ -7825,13 +8472,13 @@ snapshots: "@babel/helper-split-export-declaration@7.24.6": dependencies: - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/helper-string-parser@7.21.5": {} "@babel/helper-string-parser@7.22.5": {} - "@babel/helper-string-parser@7.24.6": {} + "@babel/helper-string-parser@7.25.9": {} "@babel/helper-validator-identifier@7.19.1": {} @@ -7839,6 +8486,8 @@ snapshots: "@babel/helper-validator-identifier@7.24.6": {} + "@babel/helper-validator-identifier@7.25.9": {} + "@babel/helper-validator-option@7.18.6": {} "@babel/helper-validator-option@7.24.6": {} @@ -7855,7 +8504,7 @@ snapshots: "@babel/helpers@7.24.6": dependencies: "@babel/template": 7.24.6 - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/highlight@7.18.6": dependencies: @@ -7888,9 +8537,9 @@ snapshots: dependencies: "@babel/types": 7.23.0 - "@babel/parser@7.24.6": + "@babel/parser@7.26.2": dependencies: - "@babel/types": 7.24.6 + "@babel/types": 7.26.0 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.24.6)": dependencies: @@ -8397,8 +9046,8 @@ snapshots: "@babel/template@7.24.6": dependencies: "@babel/code-frame": 7.24.6 - "@babel/parser": 7.24.6 - "@babel/types": 7.24.6 + "@babel/parser": 7.26.2 + "@babel/types": 7.26.0 "@babel/traverse@7.23.2": dependencies: @@ -8410,7 +9059,7 @@ snapshots: "@babel/helper-split-export-declaration": 7.22.6 "@babel/parser": 7.23.0 "@babel/types": 7.23.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8423,9 +9072,9 @@ snapshots: "@babel/helper-function-name": 7.24.6 "@babel/helper-hoist-variables": 7.24.6 "@babel/helper-split-export-declaration": 7.24.6 - "@babel/parser": 7.24.6 - "@babel/types": 7.24.6 - debug: 4.3.4(supports-color@8.1.1) + "@babel/parser": 7.26.2 + "@babel/types": 7.26.0 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -8448,11 +9097,12 @@ snapshots: "@babel/helper-validator-identifier": 7.22.20 to-fast-properties: 2.0.0 - "@babel/types@7.24.6": + "@babel/types@7.26.0": dependencies: - "@babel/helper-string-parser": 7.24.6 - "@babel/helper-validator-identifier": 7.24.6 - to-fast-properties: 2.0.0 + "@babel/helper-string-parser": 7.25.9 + "@babel/helper-validator-identifier": 7.25.9 + + "@bcoe/v8-coverage@0.2.3": {} "@colors/colors@1.5.0": optional: true @@ -8489,12 +9139,81 @@ snapshots: transitivePeerDependencies: - supports-color + "@esbuild/aix-ppc64@0.21.5": + optional: true + + "@esbuild/android-arm64@0.21.5": + optional: true + "@esbuild/android-arm@0.15.18": optional: true + "@esbuild/android-arm@0.21.5": + optional: true + + "@esbuild/android-x64@0.21.5": + optional: true + + "@esbuild/darwin-arm64@0.21.5": + optional: true + + "@esbuild/darwin-x64@0.21.5": + optional: true + + "@esbuild/freebsd-arm64@0.21.5": + optional: true + + "@esbuild/freebsd-x64@0.21.5": + optional: true + + "@esbuild/linux-arm64@0.21.5": + optional: true + + "@esbuild/linux-arm@0.21.5": + optional: true + + "@esbuild/linux-ia32@0.21.5": + optional: true + "@esbuild/linux-loong64@0.15.18": optional: true + "@esbuild/linux-loong64@0.21.5": + optional: true + + "@esbuild/linux-mips64el@0.21.5": + optional: true + + "@esbuild/linux-ppc64@0.21.5": + optional: true + + "@esbuild/linux-riscv64@0.21.5": + optional: true + + "@esbuild/linux-s390x@0.21.5": + optional: true + + "@esbuild/linux-x64@0.21.5": + optional: true + + "@esbuild/netbsd-x64@0.21.5": + optional: true + + "@esbuild/openbsd-x64@0.21.5": + optional: true + + "@esbuild/sunos-x64@0.21.5": + optional: true + + "@esbuild/win32-arm64@0.21.5": + optional: true + + "@esbuild/win32-ia32@0.21.5": + optional: true + + "@esbuild/win32-x64@0.21.5": + optional: true + "@eslint-community/eslint-utils@4.4.0(eslint@8.30.0)": dependencies: eslint: 8.30.0 @@ -8570,6 +9289,17 @@ snapshots: "@humanwhocodes/object-schema@1.2.1": {} + "@isaacs/cliui@8.0.2": + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + "@istanbuljs/schema@0.1.3": {} + "@jest/expect-utils@29.7.0": dependencies: jest-get-type: 29.6.3 @@ -8867,7 +9597,7 @@ snapshots: "@jridgewell/gen-mapping@0.3.5": dependencies: "@jridgewell/set-array": 1.2.1 - "@jridgewell/sourcemap-codec": 1.4.15 + "@jridgewell/sourcemap-codec": 1.5.0 "@jridgewell/trace-mapping": 0.3.25 "@jridgewell/resolve-uri@3.1.0": {} @@ -8885,7 +9615,7 @@ snapshots: "@jridgewell/sourcemap-codec@1.4.14": {} - "@jridgewell/sourcemap-codec@1.4.15": {} + "@jridgewell/sourcemap-codec@1.5.0": {} "@jridgewell/trace-mapping@0.3.17": dependencies: @@ -8895,7 +9625,7 @@ snapshots: "@jridgewell/trace-mapping@0.3.25": dependencies: "@jridgewell/resolve-uri": 3.1.2 - "@jridgewell/sourcemap-codec": 1.4.15 + "@jridgewell/sourcemap-codec": 1.5.0 "@jridgewell/trace-mapping@0.3.9": dependencies: @@ -8928,6 +9658,9 @@ snapshots: mkdirp: 1.0.4 rimraf: 3.0.2 + "@pkgjs/parseargs@0.11.0": + optional: true + "@pkgr/utils@2.4.2": dependencies: cross-spawn: 7.0.3 @@ -8937,6 +9670,60 @@ snapshots: picocolors: 1.0.0 tslib: 2.6.2 + "@rollup/rollup-android-arm-eabi@4.27.3": + optional: true + + "@rollup/rollup-android-arm64@4.27.3": + optional: true + + "@rollup/rollup-darwin-arm64@4.27.3": + optional: true + + "@rollup/rollup-darwin-x64@4.27.3": + optional: true + + "@rollup/rollup-freebsd-arm64@4.27.3": + optional: true + + "@rollup/rollup-freebsd-x64@4.27.3": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.27.3": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.27.3": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.27.3": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.27.3": + optional: true + + "@rollup/rollup-linux-powerpc64le-gnu@4.27.3": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.27.3": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.27.3": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.27.3": + optional: true + + "@rollup/rollup-linux-x64-musl@4.27.3": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.27.3": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.27.3": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.27.3": + optional: true + "@sinclair/typebox@0.27.8": {} "@tootallnate/once@2.0.0": {} @@ -8955,26 +9742,22 @@ snapshots: "@types/assert@1.5.6": {} - "@types/chai-subset@1.3.3": - dependencies: - "@types/chai": 4.3.4 - - "@types/chai@4.3.4": {} - "@types/color-string@1.5.2": {} "@types/eslint-scope@3.7.7": dependencies: "@types/eslint": 8.56.10 - "@types/estree": 1.0.5 + "@types/estree": 1.0.6 "@types/eslint@8.56.10": dependencies: - "@types/estree": 1.0.5 + "@types/estree": 1.0.6 "@types/json-schema": 7.0.15 "@types/estree@1.0.5": {} + "@types/estree@1.0.6": {} + "@types/istanbul-lib-coverage@2.0.6": {} "@types/istanbul-lib-report@3.0.3": @@ -9008,6 +9791,10 @@ snapshots: dependencies: undici-types: 6.19.8 + "@types/node@22.9.1": + dependencies: + undici-types: 6.19.8 + "@types/ramda@0.28.20": dependencies: ts-toolbelt: 6.15.5 @@ -9121,6 +9908,64 @@ snapshots: vite: 3.2.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) vue: 3.2.45 + "@vitest/coverage-v8@2.1.5(vitest@2.1.5(@types/node@20.14.9)(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0))": + dependencies: + "@ampproject/remapping": 2.3.0 + "@bcoe/v8-coverage": 0.2.3 + debug: 4.3.7 + 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.13 + magicast: 0.3.5 + std-env: 3.8.0 + test-exclude: 7.0.1 + tinyrainbow: 1.2.0 + vitest: 2.1.5(@types/node@20.14.9)(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + transitivePeerDependencies: + - supports-color + + "@vitest/expect@2.1.5": + dependencies: + "@vitest/spy": 2.1.5 + "@vitest/utils": 2.1.5 + chai: 5.1.2 + tinyrainbow: 1.2.0 + + "@vitest/mocker@2.1.5(vite@5.4.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0))": + dependencies: + "@vitest/spy": 2.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.13 + optionalDependencies: + vite: 5.4.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + + "@vitest/pretty-format@2.1.5": + dependencies: + tinyrainbow: 1.2.0 + + "@vitest/runner@2.1.5": + dependencies: + "@vitest/utils": 2.1.5 + pathe: 1.1.2 + + "@vitest/snapshot@2.1.5": + dependencies: + "@vitest/pretty-format": 2.1.5 + magic-string: 0.30.13 + pathe: 1.1.2 + + "@vitest/spy@2.1.5": + dependencies: + tinyspy: 3.0.2 + + "@vitest/utils@2.1.5": + dependencies: + "@vitest/pretty-format": 2.1.5 + loupe: 3.1.2 + tinyrainbow: 1.2.0 + "@vue/compat@3.2.45(vue@3.2.45)": dependencies: "@babel/parser": 7.20.5 @@ -9337,7 +10182,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -9410,7 +10255,7 @@ snapshots: assert-plus@1.0.0: {} - assertion-error@1.1.0: {} + assertion-error@2.0.1: {} astral-regex@2.0.0: {} @@ -9499,6 +10344,10 @@ snapshots: balanced-match: 1.0.2 concat-map: 0.0.1 + brace-expansion@2.0.1: + dependencies: + balanced-match: 1.0.2 + braces@3.0.3: dependencies: fill-range: 7.1.1 @@ -9537,6 +10386,8 @@ snapshots: dependencies: run-applescript: 5.0.0 + cac@6.7.14: {} + cacache@15.3.0: dependencies: "@npmcli/fs": 1.1.1 @@ -9578,15 +10429,13 @@ snapshots: caseless@0.12.0: {} - chai@4.3.7: + chai@5.1.2: dependencies: - assertion-error: 1.1.0 - check-error: 1.0.2 - deep-eql: 4.1.3 - get-func-name: 2.0.2 - loupe: 2.3.6 - pathval: 1.1.1 - type-detect: 4.0.8 + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 chalk@2.4.2: dependencies: @@ -9601,7 +10450,7 @@ snapshots: chalk@5.3.0: {} - check-error@1.0.2: {} + check-error@2.1.1: {} check-more-types@2.24.0: {} @@ -9876,11 +10725,13 @@ snapshots: optionalDependencies: supports-color: 8.1.1 + debug@4.3.7: + dependencies: + ms: 2.1.3 + decimal.js@10.4.3: {} - deep-eql@4.1.3: - dependencies: - type-detect: 4.0.8 + deep-eql@5.0.2: {} deep-is@0.1.4: {} @@ -10049,7 +10900,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.5.3: {} + es-module-lexer@1.5.4: {} esbuild-android-64@0.15.18: optional: true @@ -10136,6 +10987,32 @@ snapshots: esbuild-windows-64: 0.15.18 esbuild-windows-arm64: 0.15.18 + esbuild@0.21.5: + optionalDependencies: + "@esbuild/aix-ppc64": 0.21.5 + "@esbuild/android-arm": 0.21.5 + "@esbuild/android-arm64": 0.21.5 + "@esbuild/android-x64": 0.21.5 + "@esbuild/darwin-arm64": 0.21.5 + "@esbuild/darwin-x64": 0.21.5 + "@esbuild/freebsd-arm64": 0.21.5 + "@esbuild/freebsd-x64": 0.21.5 + "@esbuild/linux-arm": 0.21.5 + "@esbuild/linux-arm64": 0.21.5 + "@esbuild/linux-ia32": 0.21.5 + "@esbuild/linux-loong64": 0.21.5 + "@esbuild/linux-mips64el": 0.21.5 + "@esbuild/linux-ppc64": 0.21.5 + "@esbuild/linux-riscv64": 0.21.5 + "@esbuild/linux-s390x": 0.21.5 + "@esbuild/linux-x64": 0.21.5 + "@esbuild/netbsd-x64": 0.21.5 + "@esbuild/openbsd-x64": 0.21.5 + "@esbuild/sunos-x64": 0.21.5 + "@esbuild/win32-arm64": 0.21.5 + "@esbuild/win32-ia32": 0.21.5 + "@esbuild/win32-x64": 0.21.5 + escalade@3.1.1: {} escalade@3.1.2: {} @@ -10273,6 +11150,10 @@ snapshots: estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + "@types/estree": 1.0.5 + esutils@2.0.3: {} event-target-shim@5.0.1: {} @@ -10325,6 +11206,8 @@ snapshots: exif-parser@0.1.12: {} + expect-type@1.1.0: {} + expect@29.7.0: dependencies: "@jest/expect-utils": 29.7.0 @@ -10426,6 +11309,11 @@ snapshots: flatted@3.2.7: {} + foreground-child@3.3.0: + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + forever-agent@0.6.1: {} form-data@2.3.3: @@ -10472,8 +11360,6 @@ snapshots: get-caller-file@2.0.5: {} - get-func-name@2.0.2: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -10506,6 +11392,15 @@ snapshots: glob-to-regexp@0.4.1: {} + glob@10.4.5: + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -10592,6 +11487,8 @@ snapshots: dependencies: whatwg-encoding: 2.0.0 + html-escaper@2.0.2: {} + html-to-image@1.11.3: {} htmlparser2@8.0.2: @@ -10734,6 +11631,33 @@ snapshots: isstream@0.1.2: {} + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@5.0.6: + dependencies: + "@jridgewell/trace-mapping": 0.3.25 + debug: 4.3.7 + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@3.4.3: + dependencies: + "@isaacs/cliui": 8.0.2 + optionalDependencies: + "@pkgjs/parseargs": 0.11.0 + jest-diff@29.7.0: dependencies: chalk: 4.1.2 @@ -10779,7 +11703,7 @@ snapshots: jest-worker@27.5.1: dependencies: - "@types/node": 22.9.0 + "@types/node": 22.9.1 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -10857,8 +11781,6 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.2.0: {} - jsonfile@4.0.0: optionalDependencies: graceful-fs: 4.2.11 @@ -10970,8 +11892,6 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.2 - local-pkg@0.4.2: {} - locate-path@5.0.0: dependencies: p-locate: 4.1.0 @@ -11008,9 +11928,9 @@ snapshots: strip-ansi: 7.1.0 wrap-ansi: 8.1.0 - loupe@2.3.6: - dependencies: - get-func-name: 2.0.2 + loupe@3.1.2: {} + + lru-cache@10.4.3: {} lru-cache@5.1.1: dependencies: @@ -11024,6 +11944,16 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 + magic-string@0.30.13: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.0 + + magicast@0.3.5: + dependencies: + "@babel/parser": 7.26.2 + "@babel/types": 7.26.0 + source-map-js: 1.2.1 + make-dir@2.1.0: dependencies: pify: 4.0.1 @@ -11034,6 +11964,10 @@ snapshots: dependencies: semver: 6.3.1 + make-dir@4.0.0: + dependencies: + semver: 7.5.4 + make-error@1.3.6: {} marked@4.0.10: {} @@ -11078,6 +12012,10 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.7: {} minipass-collect@1.0.2: @@ -11098,6 +12036,8 @@ snapshots: minipass@5.0.0: {} + minipass@7.1.2: {} + minizlib@2.1.2: dependencies: minipass: 3.3.6 @@ -11111,13 +12051,6 @@ snapshots: mkdirp@1.0.4: {} - mlly@1.0.0: - dependencies: - acorn: 8.8.2 - pathe: 1.0.0 - pkg-types: 1.0.1 - ufo: 1.0.1 - ms@2.0.0: {} ms@2.1.2: {} @@ -11235,6 +12168,8 @@ snapshots: p-try@2.2.0: {} + package-json-from-dist@1.0.1: {} + pako@1.0.11: {} parent-module@1.0.1: @@ -11272,13 +12207,16 @@ snapshots: path-parse@1.0.7: {} - path-type@4.0.0: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 - pathe@0.2.0: {} + path-type@4.0.0: {} - pathe@1.0.0: {} + pathe@1.1.2: {} - pathval@1.1.1: {} + pathval@2.0.0: {} pend@1.2.0: {} @@ -11328,12 +12266,6 @@ snapshots: dependencies: find-up: 4.1.0 - pkg-types@1.0.1: - dependencies: - jsonc-parser: 3.2.0 - mlly: 1.0.0 - pathe: 1.0.0 - pngjs@3.4.0: {} postcss-import@14.1.0(postcss@8.4.31): @@ -11533,6 +12465,30 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + rollup@4.27.3: + dependencies: + "@types/estree": 1.0.6 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.27.3 + "@rollup/rollup-android-arm64": 4.27.3 + "@rollup/rollup-darwin-arm64": 4.27.3 + "@rollup/rollup-darwin-x64": 4.27.3 + "@rollup/rollup-freebsd-arm64": 4.27.3 + "@rollup/rollup-freebsd-x64": 4.27.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.27.3 + "@rollup/rollup-linux-arm-musleabihf": 4.27.3 + "@rollup/rollup-linux-arm64-gnu": 4.27.3 + "@rollup/rollup-linux-arm64-musl": 4.27.3 + "@rollup/rollup-linux-powerpc64le-gnu": 4.27.3 + "@rollup/rollup-linux-riscv64-gnu": 4.27.3 + "@rollup/rollup-linux-s390x-gnu": 4.27.3 + "@rollup/rollup-linux-x64-gnu": 4.27.3 + "@rollup/rollup-linux-x64-musl": 4.27.3 + "@rollup/rollup-win32-arm64-msvc": 4.27.3 + "@rollup/rollup-win32-ia32-msvc": 4.27.3 + "@rollup/rollup-win32-x64-msvc": 4.27.3 + fsevents: 2.3.3 + run-applescript@5.0.0: dependencies: execa: 5.1.1 @@ -11620,8 +12576,12 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} + simple-swizzle@0.2.2: dependencies: is-arrayish: 0.3.2 @@ -11737,6 +12697,10 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + + std-env@3.8.0: {} + string-argv@0.3.2: {} string-width@4.2.3: @@ -11765,10 +12729,6 @@ snapshots: strip-json-comments@3.1.1: {} - strip-literal@1.0.0: - dependencies: - acorn: 8.8.2 - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -11882,6 +12842,12 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + test-exclude@7.0.1: + dependencies: + "@istanbuljs/schema": 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + text-table@0.2.0: {} thread-stream@2.2.0: @@ -11894,13 +12860,17 @@ snapshots: timm@1.7.1: {} - tinybench@2.3.1: {} + tinybench@2.9.0: {} tinycolor2@1.4.2: {} - tinypool@0.3.0: {} + tinyexec@0.3.1: {} - tinyspy@1.0.2: {} + tinypool@1.0.2: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} titleize@3.0.0: {} @@ -11975,8 +12945,6 @@ snapshots: dependencies: prelude-ls: 1.2.1 - type-detect@4.0.8: {} - type-fest@0.20.2: {} type-fest@0.21.3: {} @@ -11985,8 +12953,6 @@ snapshots: typescript@5.6.3: {} - ufo@1.0.1: {} - undici-types@5.26.5: {} undici-types@6.19.8: {} @@ -12061,18 +13027,19 @@ snapshots: core-util-is: 1.0.2 extsprintf: 1.3.0 - vite-node@0.26.1(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0): + vite-node@2.1.5(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0): dependencies: - debug: 4.3.4(supports-color@8.1.1) - mlly: 1.0.0 - pathe: 0.2.0 - source-map: 0.6.1 - source-map-support: 0.5.21 - vite: 3.2.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + cac: 6.7.14 + debug: 4.3.7 + es-module-lexer: 1.5.4 + pathe: 1.1.2 + vite: 5.4.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) transitivePeerDependencies: - "@types/node" - less + - lightningcss - sass + - sass-embedded - stylus - sugarss - supports-color @@ -12100,28 +13067,49 @@ snapshots: sass: 1.57.0 terser: 5.31.0 - vitest@0.26.1(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0): + vite@5.4.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0): dependencies: - "@types/chai": 4.3.4 - "@types/chai-subset": 1.3.3 + esbuild: 0.21.5 + postcss: 8.4.47 + rollup: 4.27.3 + optionalDependencies: "@types/node": 20.14.9 - acorn: 8.8.1 - acorn-walk: 8.2.0 - chai: 4.3.7 - debug: 4.3.4(supports-color@8.1.1) - local-pkg: 0.4.2 - source-map: 0.6.1 - strip-literal: 1.0.0 - tinybench: 2.3.1 - tinypool: 0.3.0 - tinyspy: 1.0.2 - vite: 3.2.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) - vite-node: 0.26.1(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + fsevents: 2.3.3 + less: 4.1.3 + sass: 1.57.0 + terser: 5.31.0 + + vitest@2.1.5(@types/node@20.14.9)(jsdom@20.0.3)(less@4.1.3)(sass@1.57.0)(terser@5.31.0): + dependencies: + "@vitest/expect": 2.1.5 + "@vitest/mocker": 2.1.5(vite@5.4.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0)) + "@vitest/pretty-format": 2.1.5 + "@vitest/runner": 2.1.5 + "@vitest/snapshot": 2.1.5 + "@vitest/spy": 2.1.5 + "@vitest/utils": 2.1.5 + chai: 5.1.2 + debug: 4.3.7 + expect-type: 1.1.0 + magic-string: 0.30.13 + pathe: 1.1.2 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.1 + tinypool: 1.0.2 + tinyrainbow: 1.2.0 + vite: 5.4.11(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + vite-node: 2.1.5(@types/node@20.14.9)(less@4.1.3)(sass@1.57.0)(terser@5.31.0) + why-is-node-running: 2.3.0 optionalDependencies: + "@types/node": 20.14.9 jsdom: 20.0.3 transitivePeerDependencies: - less + - lightningcss + - msw - sass + - sass-embedded - stylus - sugarss - supports-color @@ -12187,7 +13175,7 @@ snapshots: webpack@5.91.0: dependencies: "@types/eslint-scope": 3.7.7 - "@types/estree": 1.0.5 + "@types/estree": 1.0.6 "@webassemblyjs/ast": 1.12.1 "@webassemblyjs/wasm-edit": 1.12.1 "@webassemblyjs/wasm-parser": 1.12.1 @@ -12196,7 +13184,7 @@ snapshots: browserslist: 4.23.0 chrome-trace-event: 1.0.4 enhanced-resolve: 5.16.1 - es-module-lexer: 1.5.3 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -12232,6 +13220,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + word-wrap@1.2.5: {} wrap-ansi@6.2.0: diff --git a/src/assets/tailwind.css b/src/assets/tailwind.css index 444f7438..16c3e342 100644 --- a/src/assets/tailwind.css +++ b/src/assets/tailwind.css @@ -373,6 +373,7 @@ .theme-nab { --color-bg-base: 242, 244, 246; --color-bg-canvas: 242, 244, 246; + --color-text-base: #ffffff; /* Participant */ --color-bg-participant: 195, 0, 0; diff --git a/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/LifeLine.vue b/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/LifeLine.vue index 4c63bc0e..2550103c 100644 --- a/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/LifeLine.vue +++ b/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/LifeLine.vue @@ -90,7 +90,7 @@ export default { const isVisible = firstMessage?.offsetParent != null; if ( firstMessage && - firstMessage.attributes["data-type"].value === "creation" && + firstMessage.attributes["data-type"]?.value === "creation" && isVisible ) { logger.debug(`First message to ${this.entity.name} is creation`); diff --git a/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/Participant.vue b/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/Participant.vue index 1e635bb7..b47c4715 100644 --- a/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/Participant.vue +++ b/src/components/DiagramFrame/SeqDiagram/LifeLineLayer/Participant.vue @@ -11,7 +11,7 @@ >
@@ -30,7 +30,7 @@
diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Block.vue b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Block.vue index 7f96c657..19683ea5 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Block.vue +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Block.vue @@ -11,7 +11,6 @@ :inheritFromOccurrence="inheritFromOccurrence" :context="stat" :collapsed="collapsed" - :selfCallIndent="selfCallIndent" :number="getNumber(index)" /> @@ -26,7 +25,6 @@ import { increaseNumber } from "@/utils/Numbering"; const props = defineProps<{ origin?: string; context?: any; - selfCallIndent?: number; number?: string; incremental?: boolean; collapsed?: boolean; diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.spec.ts b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.spec.ts new file mode 100644 index 00000000..1b5c89ae --- /dev/null +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.spec.ts @@ -0,0 +1,71 @@ +import { shallowMount } from "@vue/test-utils"; +import { createStore } from "vuex"; +import { VueSequence } from "@/index"; +// @ts-ignore +import Interaction from "./Interaction/Interaction.vue"; +import { Fixture } from "../../../../../../../test/unit/parser/fixture/Fixture"; +import { configureCompat } from "vue"; +import { _STARTER_ } from "@/parser/OrderedParticipants"; +import { expect } from "vitest"; +import Anchor2 from "@/positioning/Anchor2"; + +function mountInteractionWithCode( + code: string, + contextLocator: (code: string) => any, + origin = "", +) { + const storeConfig = VueSequence.Store(); + // @ts-ignore + storeConfig.state.code = code; + const store = createStore(storeConfig); + + const context = contextLocator(code); + const props = { + context, + origin, + fragmentOffset: 100, + }; + + return shallowMount(Interaction, { global: { plugins: [store] }, props }); +} +beforeEach(() => { + configureCompat({ + RENDER_FUNCTION: false, + }); +}); +describe("ArrowMixin", () => { + it("self message 1", async () => { + const interaction = mountInteractionWithCode( + "self()", + Fixture.firstStatement, + _STARTER_, + ); + + const vm = interaction.vm as any; + expect(vm.anchor2Origin).toStrictEqual(new Anchor2(50, 0)); + }); + + it("sync message 1", async () => { + const interaction = mountInteractionWithCode( + "A.m()", + Fixture.firstStatement, + _STARTER_, + ); + + const vm = interaction.vm as any; + expect(vm.anchor2Origin).toStrictEqual(new Anchor2(50, 0)); + }); + + it("creation message 1", async () => { + const interaction = mountInteractionWithCode( + "A.m() { new B }", + Fixture.firstChild, + _STARTER_, + ); + + const vm = interaction.vm as any; + expect(vm.anchor2Origin).toStrictEqual(new Anchor2(50, 0)); + expect(vm.anchor2Source).toStrictEqual(new Anchor2(50, 0)); + expect(vm.anchor2Target).toStrictEqual(new Anchor2(50, 0)); + }); +}); diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.ts b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.ts index 15d30c98..b5954f73 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.ts +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/ArrowMixin.ts @@ -1,79 +1,80 @@ +import { defineComponent } from "vue"; import sequenceParser from "@/generated-parser/sequenceParser"; -import { _STARTER_ } from "@/parser/OrderedParticipants"; +import { mapGetters } from "vuex"; +import Anchor2 from "@/positioning/Anchor2"; + +export default defineComponent({ + props: { + origin: { + type: null, + required: true, + }, + context: { + type: null, + required: true, + }, + }, -export default { - props: ["origin"], computed: { - borderWidth: function () { - const border = { - borderLeftWidth: "7px", - borderRightWidth: "7px", - }; - const endSide = this.rightToLeft ? "Left" : "Right"; - const startSide = this.rightToLeft ? "Right" : "Left"; + ...mapGetters(["centerOf"]), + isSelf: function (): boolean { + return this.source === this.target; + }, + originLayers: function (): number { + return this.depthOnParticipant(this.context, this.origin); + }, + sourceLayers: function (): number { + return this.depthOnParticipant(this.context, this.source); + }, + targetLayers: function (): number { + return this.depthOnParticipant4Stat(this.target); + }, - if (!this.isJointOccurrence(this.source)) { - border[`border${startSide}Width`] = "0px"; - } - if (!this.isJointOccurrence(this.target)) { - border[`border${endSide}Width`] = "0px"; - } - return border; + anchor2Origin: function (): Anchor2 { + return new Anchor2(this.centerOf(this.origin), this.originLayers); + }, + anchor2Source: function (): Anchor2 { + return new Anchor2(this.centerOf(this.source), this.sourceLayers); + }, + anchor2Target: function (): Anchor2 { + return new Anchor2(this.centerOf(this.target), this.targetLayers); + }, + + interactionWidth: function (): number { + return Math.abs(this.anchor2Source.edgeOffset(this.anchor2Target)); + }, + translateX: function () { + const destination = !this.rightToLeft + ? this.anchor2Source + : this.anchor2Target; + return this.anchor2Origin.centerToEdge(destination); }, }, + methods: { - isJointOccurrence(participant) { - const ancestorContextForParticipant = - this.findContextForReceiver(participant); - // If no owning context found, it means this is a bare connection - if (!ancestorContextForParticipant) { + depthOnParticipant(context: any, participant: any): number { + return context?.getAncestors((ctx) => { + if (this.isSync(ctx)) { + return ctx.Owner() === participant; + } return false; - } - - // Check if the owning context creates an occurrence point - return ( - ancestorContextForParticipant instanceof - sequenceParser.MessageContext || - ancestorContextForParticipant instanceof sequenceParser.CreationContext - ); + }).length; }, - // Input `participant` is the receiver. This method - findContextForReceiver(participant) { - if (!this.context) { - return null; + depthOnParticipant4Stat(participant: any): number { + if (!(this.context instanceof sequenceParser.StatContext)) { + return 0; } - let currentContext = this.context; - /** - * Case 1: a() - * Case 2: A.method() { C->C.method } - */ - if (this.source !== this.target) { - const messageContext = this.context.message && this.context.message(); - if (messageContext && messageContext.Owner() === participant) { - return messageContext; - } - const creationContext = - this.context.creation && this.context.creation(); - if (creationContext && creationContext.Owner() === participant) { - return creationContext; - } - } - while (currentContext) { - if (!currentContext.Owner) { - currentContext = currentContext.parentCtx; - continue; - } - if ( - currentContext.Owner() === participant || - (!currentContext.Owner() && participant === _STARTER_) - ) { - return currentContext; - } - - currentContext = currentContext.parentCtx; + const child = this.context?.children?.[0]; + if (!child) { + return 0; } - return null; + return this.depthOnParticipant(child, participant); + }, + isSync(ctx: any) { + const isMessageContext = ctx instanceof sequenceParser.MessageContext; + const isCreationContext = ctx instanceof sequenceParser.CreationContext; + return isMessageContext || isCreationContext; }, }, -}; +}); diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.spec.ts b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.spec.ts index e49c2bf4..a2cdd8c7 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.spec.ts +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.spec.ts @@ -5,12 +5,8 @@ import { VueSequence } from "@/index"; import Creation from "./Creation.vue"; import { Fixture } from "../../../../../../../../test/unit/parser/fixture/Fixture"; import { configureCompat } from "vue"; -import { - LIFELINE_WIDTH, - MARGIN, - MIN_PARTICIPANT_WIDTH, -} from "@/positioning/Constants"; import { _STARTER_ } from "@/parser/OrderedParticipants"; +import Anchor2 from "@/positioning/Anchor2"; function mountCreationWithCode( code: string, @@ -57,12 +53,9 @@ describe("Creation", () => { // `-` is for margin and `=` is for participant width. // `---xxx--->` is for message arrow and `[]` is for occurrence. // TODO: add a test case where the width is caused by the message - const gapCausedByParticipant = - MIN_PARTICIPANT_WIDTH / 2 + - MARGIN / 2 + - MIN_PARTICIPANT_WIDTH / 2 + - MARGIN / 2; // 100 - const expected = gapCausedByParticipant - LIFELINE_WIDTH; // 99 + const anchorStarter = new Anchor2(100, 0); + const anchorA = new Anchor2(200, 1); + const expected = anchorStarter.edgeOffset(anchorA); expect(vm.interactionWidth).toBe(expected); expect(vm.rightToLeft).toBeFalsy(); }); @@ -76,15 +69,11 @@ describe("Creation", () => { const vm = creationWrapper.vm as any; expect(vm.rightToLeft).toBeTruthy(); // -====A====--====B====- - // []<--<>-- + // []]<--<>-- // There is enough space for the message arrow and occurrence. - const gapCausedByParticipant = - MIN_PARTICIPANT_WIDTH / 2 + - MARGIN / 2 + - MIN_PARTICIPANT_WIDTH / 2 + - MARGIN / 2; // 100 - const expected = gapCausedByParticipant - LIFELINE_WIDTH; // 99 - + const anchorA = new Anchor2(100, 2); + const anchorB = new Anchor2(200, 1); + const expected = anchorA.edgeOffset(anchorB); expect(vm.interactionWidth).toBe(expected); }); @@ -105,14 +94,11 @@ describe("Creation", () => { const vm = creationWrapper.vm as any; expect(vm.rightToLeft).toBeTruthy(); // -====A====--====B====- - // --<>-->[] + // []]--<>-- // There is enough space for the message and occurrence. - const gapCausedByParticipant = - MIN_PARTICIPANT_WIDTH / 2 + - MARGIN / 2 + - MIN_PARTICIPANT_WIDTH / 2 + - MARGIN / 2; // 100 - const expected = gapCausedByParticipant - LIFELINE_WIDTH; // 99 + const anchorA = new Anchor2(100, 2); + const anchorB = new Anchor2(200, 1); + const expected = anchorA.edgeOffset(anchorB); expect(vm.interactionWidth).toBe(expected); }); }); diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.vue b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.vue index 354de656..8a0882d9 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.vue +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Creation/Creation.vue @@ -11,7 +11,11 @@ '-translate-x-full-minus-1': rightToLeft, highlight: isCurrent, }" - :style="{ ...borderWidth, width: interactionWidth + 'px' }" + :style="{ + transform: 'translateX(' + translateX + 'px)', + + width: interactionWidth + 'px', + }" > B - [1, 10, 25, 14], - [1, 25, 10, 14], - ])( - "If selfCallIndent is %s and distance is %s, interactionWidth should be %s", - (selfCallIndent, a, b, width) => { - Interaction.computed.target = () => "B"; - const storeConfig = Store(); - storeConfig.getters.centerOf = () => (participant) => { - if (participant === "A") return a; - if (participant === "B") return b; - }; - const store = createStore(storeConfig); - const wrapper = shallowMount(Interaction, { - global: { - plugins: [store], - }, - props: { - selfCallIndent: selfCallIndent, - context: ProgContextFixture("A->B.method()").block().stat()[0], - }, - }); - expect(wrapper.vm.interactionWidth).toBe(width); - }, - ); -}); - -describe("Translate X", () => { - // A B C - // provided inherited to - it("when left to right", function () { + [100, 200, 92], + [200, 100, 92], + ])("If A %s, B %s, interactionWidth should be %s", (a, b, width) => { + Interaction.computed.target = () => "B"; const storeConfig = Store(); storeConfig.getters.centerOf = () => (participant) => { - if (participant === "A") return 10; - if (participant === "B") return 25; - if (participant === "C") return 35; + if (participant === "A") return a; + if (participant === "B") return b; }; - const store = createStore(storeConfig); + const wrapper = shallowMount(Interaction, { + global: { + plugins: [store], + }, + props: { + context: ProgContextFixture("A->B.method()").block().stat()[0], + }, + }); + expect(wrapper.vm.interactionWidth).toBe(width); + }); +}); + +/** + * TranslateX is decided by the following factors: + * + */ +describe("Translate X", () => { + // Prepare participants + const storeConfig = Store(); + let A = 10; + let B = 25; + let C = 35; + storeConfig.getters.centerOf = () => (participant) => { + if (participant === "A") return A; + if (participant === "B") return B; + if (participant === "C") return C; + }; + + const store = createStore(storeConfig); + + /** + * A B C + * B.m { + * self { + * A->C.method + * } + * } + */ + it("Left to Right", function () { Interaction.computed.source = () => "A"; Interaction.computed.target = () => "C"; + Interaction.computed.anchor2Origin = () => new Anchor2(25, 0); + Interaction.computed.anchor2Source = () => new Anchor2(10, 0); + Interaction.computed.anchor2Target = () => new Anchor2(35, 0); const wrapper = shallowMount(Interaction, { props: { origin: "B", @@ -100,28 +115,25 @@ describe("Translate X", () => { plugins: [store], }, }); - expect(wrapper.vm.translateX).toBe(-15); + const expected = A - B; + expect(wrapper.vm.translateX).toBe(expected); expect(wrapper.find(".right-to-left").exists()).toBeFalsy(); }); - // A B C - // to real from - it("when right to left", function () { - const storeConfig = Store(); - storeConfig.getters.centerOf = () => (participant) => { - // A B C - // C.m { B->A.m } - // -====A====--====B====--====C====- - // - if (participant === "A") return 10; - if (participant === "B") return 25; - if (participant === "C") return 35; - }; - - const store = createStore(storeConfig); - + /** + * A B C + * C.m { + * self { + * B->A.met <---- this method + * } + * } + */ + it("Right to Left", function () { Interaction.computed.source = () => "B"; Interaction.computed.target = () => "A"; + Interaction.computed.anchor2Origin = () => new Anchor2(35, 0); + Interaction.computed.anchor2Source = () => new Anchor2(25, 0); + Interaction.computed.anchor2Target = () => new Anchor2(10, 0); const wrapper = shallowMount(Interaction, { props: { origin: "C", @@ -130,7 +142,8 @@ describe("Translate X", () => { plugins: [store], }, }); - expect(wrapper.vm.translateX).toBe(-25); + const expected = A - C; + expect(wrapper.vm.translateX).toBe(expected); expect(wrapper.find(".right-to-left").exists()).toBeTruthy(); }); }); diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Interaction.vue b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Interaction.vue index 2769278f..ca684f6b 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Interaction.vue +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Interaction.vue @@ -2,10 +2,13 @@
- -
@@ -81,17 +76,11 @@ import { DirectionMixin } from "@/components/DiagramFrame/SeqDiagram/MessageLaye export default { name: "interaction", - props: [ - "context", - "selfCallIndent", - "commentObj", - "number", - // "inheritFromOccurrence", - ], + props: ["context", "commentObj", "number"], mixins: [ArrowMixin, DirectionMixin], computed: { // add tracker to the mapGetters - ...mapGetters(["participants", "distance2", "cursor", "onElementClick"]), + ...mapGetters(["participants", "cursor", "onElementClick", "centerOf"]), hasComment() { return this.commentObj?.text !== ""; }, @@ -110,9 +99,6 @@ export default { target: function () { return this.context?.message()?.Owner() || _STARTER_; }, - outOfBand: function () { - return !!this.source && this.source !== this.origin; - }, assignee: function () { let assignment = this.message?.Assignment(); if (!assignment) return ""; @@ -121,50 +107,9 @@ export default { signature: function () { return this.message?.SignatureText(); }, - translateX: function () { - // Normal flow - if (!this.rightToLeft && !this.outOfBand) { - return 0; - } - - // ** Starting point is always the center of 'origin' ** - const moveTo = !this.rightToLeft ? this.source : this.target; - const dist = this.distance2(this.origin, moveTo); - const indent = this.selfCallIndent || 0; - return dist - indent; - }, isCurrent: function () { return this.message?.isCurrent(this.cursor); }, - showStarter() { - return this.participants.Starter()?.name !== _STARTER_; - }, - isRootBlock() { - // TODO: Add support for nested brace structures like { b { c.m() } }. - return this.target === _STARTER_; - }, - passOnOffset: function () { - // selfCallIndent is introduced for sync self interaction. Each time we enter a self sync interaction the selfCallIndent - // increases by 6px (half of the width of an execution bar). However, we set the selfCallIndent back to 0 when - // it enters a non-self sync interaction. - return this.isSelf && !this.isRootBlock - ? (this.selfCallIndent || 0) + 7 - : 0; - }, - interactionWidth: function () { - if (this.context && this.isSelf) { - return 0; - } - - let safeOffset = this.outOfBand ? 0 : this.selfCallIndent || 0; - return ( - Math.abs(this.distance2(this.source, this.target) - safeOffset) - 1 - ); - }, - isSelf: function () { - // this.to === undefined if it is a self interaction and root message. - return !this.target || this.target === this.source; - }, }, methods: { onClick() { diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Occurrence/Occurrence.vue b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Occurrence/Occurrence.vue index cf98116e..b63ec579 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Occurrence/Occurrence.vue +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/Occurrence/Occurrence.vue @@ -28,7 +28,6 @@ :origin="participant" v-if="this.context.braceBlock()" :context="context.braceBlock().block()" - :selfCallIndent="selfCallIndent" :number="number" :collapsed="collapsed" :inheritFromOccurrence="true" @@ -42,7 +41,7 @@ import CollapseButton from "./CollapseButton.vue"; import { EventBus } from "@/EventBus"; export default { name: "occurrence", - props: ["context", "selfCallIndent", "participant", "rtl", "number"], + props: ["context", "participant", "rtl", "number"], data: function () { return { center: 0, diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/SelfInvocation/SelfInvocation.spec.js b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/SelfInvocation/SelfInvocation.spec.js index 24d20b31..7297f6a1 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/SelfInvocation/SelfInvocation.spec.js +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/Interaction/SelfInvocation/SelfInvocation.spec.js @@ -15,7 +15,7 @@ describe("SelfInvocation", () => { }, }); - test("If selfCallIndent is %s and distance is %s, interactionWidth should be %s", () => { + test("assignment", () => { expect(selfInvocationWrapper.vm.assignee).toBe("ret"); expect(selfInvocationWrapper.vm.signature).toBe("method2()"); expect(selfInvocationWrapper.find(".self-invocation>label").text()).toBe( diff --git a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/InteractionAsync/Interaction-async.vue b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/InteractionAsync/Interaction-async.vue index fe07831e..bf31cd42 100644 --- a/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/InteractionAsync/Interaction-async.vue +++ b/src/components/DiagramFrame/SeqDiagram/MessageLayer/Block/Statement/InteractionAsync/Interaction-async.vue @@ -5,7 +5,9 @@