From 3ae2b52649e8303ae48b99d635de9547680194a8 Mon Sep 17 00:00:00 2001 From: Alexander Brown Date: Mon, 29 Dec 2025 19:24:35 -0800 Subject: [PATCH] Chore: Upgrade Vitest to v4 (#7797) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary https://vitest.dev/guide/migration.html#vitest-4 ## Changes - **What**: Update Vitest and some associated dependencies - **What**: Fix issue with our existing mocks and mock types ## Review Focus Double check the test updates. I tried to keep the changes minimal. ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-7797-Chore-Upgrade-Vitest-to-v4-2d96d73d3650810cbe3ac42d7bd6585a) by [Unito](https://www.unito.io) --------- Co-authored-by: GitHub Action --- pnpm-lock.yaml | 851 ++++++++++-------- pnpm-workspace.yaml | 22 +- .../queue/job/useJobErrorReporting.ts | 2 +- .../useMediaAssetGalleryStore.test.ts | 12 +- .../useNodePointerInteractions.test.ts | 2 +- src/utils/queueDisplay.ts | 2 +- tests-ui/tests/api.featureFlags.test.ts | 4 +- .../graph/ZoomControlsModal.test.ts | 2 +- .../queue/useJobErrorReporting.test.ts | 15 +- .../maskeditor/useCanvasHistory.test.ts | 2 +- .../nodePack/usePacksSelection.test.ts | 42 +- .../composables/useCachedRequest.test.ts | 7 +- tests-ui/tests/composables/useJobList.test.ts | 71 +- tests-ui/tests/composables/useLoad3d.test.ts | 6 +- .../tests/composables/useLoad3dDrag.test.ts | 4 +- .../tests/composables/useLoad3dViewer.test.ts | 8 +- .../litegraph/src/widgets/ComboWidget.test.ts | 87 +- .../core/LinkConnector.integration.test.ts | 19 +- .../litegraph/core/LinkConnector.test.ts | 23 +- .../composables/useMinimapGraph.test.ts | 2 +- .../composables/useMinimapInteraction.test.ts | 4 +- .../services/keybindingService.escape.test.ts | 4 +- 22 files changed, 615 insertions(+), 576 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2188bf0e4..a49721b47 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -43,8 +43,8 @@ catalogs: specifier: 22.2.6 version: 22.2.6 '@pinia/testing': - specifier: ^0.1.5 - version: 0.1.5 + specifier: ^1.0.3 + version: 1.0.3 '@playwright/test': specifier: ^1.57.0 version: 1.57.0 @@ -76,8 +76,8 @@ catalogs: specifier: ^4.6.0 version: 4.6.0 '@sentry/vue': - specifier: ^8.48.0 - version: 8.48.0 + specifier: ^10.32.1 + version: 10.32.1 '@sparkjsdev/spark': specifier: ^0.1.10 version: 0.1.10 @@ -115,11 +115,11 @@ catalogs: specifier: ^6.0.0 version: 6.0.3 '@vitest/coverage-v8': - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^4.0.16 + version: 4.0.16 '@vitest/ui': - specifier: ^3.2.0 - version: 3.2.4 + specifier: ^4.0.16 + version: 4.0.16 '@vue/test-utils': specifier: ^2.4.6 version: 2.4.6 @@ -175,11 +175,11 @@ catalogs: specifier: ^11.6.0 version: 11.6.0 globals: - specifier: ^15.9.0 - version: 15.15.0 + specifier: ^16.5.0 + version: 16.5.0 happy-dom: - specifier: ^15.11.0 - version: 15.11.0 + specifier: ^20.0.11 + version: 20.0.11 husky: specifier: ^9.1.7 version: 9.1.7 @@ -187,8 +187,8 @@ catalogs: specifier: 2.6.1 version: 2.6.1 jsdom: - specifier: ^26.1.0 - version: 26.1.0 + specifier: ^27.4.0 + version: 27.4.0 knip: specifier: ^5.75.1 version: 5.75.1 @@ -214,7 +214,7 @@ catalogs: specifier: ^1.1.1 version: 1.1.1 pinia: - specifier: ^2.1.7 + specifier: ^3.0.4 version: 2.2.2 postcss-html: specifier: ^1.8.0 @@ -286,14 +286,14 @@ catalogs: specifier: ^8.0.0 version: 8.0.5 vitest: - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^4.0.16 + version: 4.0.16 vue: specifier: ^3.5.13 version: 3.5.13 vue-component-type-helpers: - specifier: ^3.0.7 - version: 3.1.8 + specifier: ^3.2.1 + version: 3.2.1 vue-eslint-parser: specifier: ^10.2.0 version: 10.2.0 @@ -304,8 +304,8 @@ catalogs: specifier: ^4.4.3 version: 4.4.3 vue-tsc: - specifier: ^3.1.8 - version: 3.1.8 + specifier: ^3.2.1 + version: 3.2.1 vuefire: specifier: ^3.2.1 version: 3.2.1 @@ -376,7 +376,7 @@ importers: version: 4.2.5 '@sentry/vue': specifier: 'catalog:' - version: 8.48.0(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)) + version: 10.32.1(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)) '@sparkjsdev/spark': specifier: 'catalog:' version: 0.1.10 @@ -527,10 +527,10 @@ importers: version: 22.2.4(@babel/traverse@7.28.5)(@zkochan/js-yaml@0.0.7)(eslint@9.39.1(jiti@2.6.1))(nx@22.2.6)(storybook@10.1.9(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(typescript@5.9.3) '@nx/vite': specifier: 'catalog:' - version: 22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@3.2.4) + version: 22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16) '@pinia/testing': specifier: 'catalog:' - version: 0.1.5(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3)) + version: 1.0.3(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3))) '@playwright/test': specifier: 'catalog:' version: 1.57.0 @@ -575,10 +575,10 @@ importers: version: 6.0.3(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) '@vitest/coverage-v8': specifier: 'catalog:' - version: 3.2.4(vitest@3.2.4) + version: 4.0.16(vitest@4.0.16) '@vitest/ui': specifier: 'catalog:' - version: 3.2.4(vitest@3.2.4) + version: 4.0.16(vitest@4.0.16) '@vue/test-utils': specifier: 'catalog:' version: 2.4.6 @@ -617,10 +617,10 @@ importers: version: 11.3.2 globals: specifier: 'catalog:' - version: 15.15.0 + version: 16.5.0 happy-dom: specifier: 'catalog:' - version: 15.11.0 + version: 20.0.11 husky: specifier: 'catalog:' version: 9.1.7 @@ -629,7 +629,7 @@ importers: version: 2.6.1 jsdom: specifier: 'catalog:' - version: 26.1.0 + version: 27.4.0 knip: specifier: 'catalog:' version: 5.75.1(@types/node@24.10.4)(typescript@5.9.3) @@ -716,16 +716,16 @@ importers: version: 8.0.5(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) vitest: specifier: 'catalog:' - version: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(happy-dom@15.11.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + version: 4.0.16(@types/node@24.10.4)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) vue-component-type-helpers: specifier: 'catalog:' - version: 3.1.8 + version: 3.2.1 vue-eslint-parser: specifier: 'catalog:' version: 10.2.0(eslint@9.39.1(jiti@2.6.1)) vue-tsc: specifier: 'catalog:' - version: 3.1.8(typescript@5.9.3) + version: 3.2.1(typescript@5.9.3) zip-dir: specifier: ^2.0.0 version: 2.0.0 @@ -795,7 +795,7 @@ importers: version: 8.0.5(vite@7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3)) vue-tsc: specifier: 'catalog:' - version: 3.1.8(typescript@5.9.3) + version: 3.2.1(typescript@5.9.3) packages/design-system: dependencies: @@ -840,6 +840,9 @@ importers: packages: + '@acemir/cssom@0.9.30': + resolution: {integrity: sha512-9CnlMCI0LmCIq0olalQqdWrJHPzm0/tw3gzOA9zJSgvFX7Xau3D24mAGa4BtwxwY69nsuJW6kQqqCzf/mEcQgg==} + '@adobe/css-tools@4.4.4': resolution: {integrity: sha512-Elp+iwUx5rN5+Y8xLt5/GRoG20WGoDCQ/1Fb+1LiGtvwbDavuSk0jhD/eZdckHAuzcDzccnkv+rEjyWfRx18gg==} @@ -903,15 +906,17 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@ampproject/remapping@2.3.0': - resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} - engines: {node: '>=6.0.0'} - '@antfu/install-pkg@1.1.0': resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==} - '@asamuzakjp/css-color@3.2.0': - resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@asamuzakjp/css-color@4.1.1': + resolution: {integrity: sha512-B0Hv6G3gWGMn0xKJ0txEi/jM5iFpT3MfDxmhZFb4W047GvytCf1DHQ1D69W3zHI4yWe2aTZAA0JnbMZ7Xc8DuQ==} + + '@asamuzakjp/dom-selector@6.7.6': + resolution: {integrity: sha512-hBaJER6A9MpdG3WgdlOolHmbOYvSk46y7IQN/1+iqiCuUu6iWdQrs9DGKF8ocqsEqWujWf/V7b7vaDgiUmIvUg==} + + '@asamuzakjp/nwsapi@2.3.9': + resolution: {integrity: sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q==} '@atlaskit/pragmatic-drag-and-drop@1.3.1': resolution: {integrity: sha512-MptcLppK78B2eplL5fHk93kfCbZ6uCpt33YauBPrOwI5zcHYJhZGeaGEaAXoVAHnSJOdQUhy6kGVVC9qggz2Fg==} @@ -1499,8 +1504,8 @@ packages: peerDependencies: '@csstools/css-tokenizer': ^3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.20': - resolution: {integrity: sha512-8BHsjXfSciZxjmHQOuVdW2b8WLUPts9a+mfL13/PzEviufUEW2xnvQuOlKs9dRBHgRqJ53SF/DUoK9+MZk72oQ==} + '@csstools/css-syntax-patches-for-csstree@1.0.22': + resolution: {integrity: sha512-qBcx6zYlhleiFfdtzkRgwNC7VVoAwfK76Vmsw5t+PbvtdknO9StgRk7ROvq9so1iqbdW4uLIDAsXRsTfUrIoOw==} engines: {node: '>=18'} '@csstools/css-tokenizer@3.0.4': @@ -1879,6 +1884,15 @@ packages: resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + '@exodus/bytes@1.7.0': + resolution: {integrity: sha512-5i+BtvujK/vM07YCGDyz4C4AyDzLmhxHMtM5HpUyPRtJPBdFPsj290ffXW+UXY21/G7GtXeHD2nRmq0T1ShyQQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + peerDependencies: + '@exodus/crypto': ^1.0.0-rc.4 + peerDependenciesMeta: + '@exodus/crypto': + optional: true + '@firebase/analytics-compat@0.2.18': resolution: {integrity: sha512-Hw9mzsSMZaQu6wrTbi3kYYwGw9nBqOHr47pVLxfr5v8CalsdrG5gfs9XUlPOZjHRVISp3oQrh1j7d3E+ulHPjQ==} peerDependencies: @@ -2196,10 +2210,6 @@ packages: resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} engines: {node: '>=18.0.0'} - '@istanbuljs/schema@0.1.3': - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} - '@jest/diff-sequences@30.0.1': resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2765,10 +2775,10 @@ packages: peerDependencies: typescript: ^3 || ^4 || ^5 - '@pinia/testing@0.1.5': - resolution: {integrity: sha512-AcGzuotkzhRoF00htuxLfIPBBHVE6HjjB3YC5Y3os8vRgKu6ipknK5GBQq9+pduwYQhZ+BcCZDC9TyLAUlUpoQ==} + '@pinia/testing@1.0.3': + resolution: {integrity: sha512-g+qR49GNdI1Z8rZxKrQC3GN+LfnGTNf5Kk8Nz5Cz6mIGva5WRS+ffPXQfzhA0nu6TveWzPNYTjGl4nJqd3Cu9Q==} peerDependencies: - pinia: '>=2.2.1' + pinia: '>=3.0.4' '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -3017,29 +3027,29 @@ packages: '@rushstack/ts-command-line@5.0.3': resolution: {integrity: sha512-bgPhQEqLVv/2hwKLYv/XvsTWNZ9B/+X1zJ7WgQE9rO5oiLzrOZvkIW4pk13yOQBhHyjcND5qMOa6p83t+Z66iQ==} - '@sentry-internal/browser-utils@8.48.0': - resolution: {integrity: sha512-pLtu0Fa1Ou0v3M1OEO1MB1EONJVmXEGtoTwFRCO1RPQI2ulmkG6BikINClFG5IBpoYKZ33WkEXuM6U5xh+pdZg==} - engines: {node: '>=14.18'} + '@sentry-internal/browser-utils@10.32.1': + resolution: {integrity: sha512-sjLLep1es3rTkbtAdTtdpc/a6g7v7bK5YJiZJsUigoJ4NTiFeMI5uIDCxbH/tjJ1q23YE1LzVn7T96I+qBRjHA==} + engines: {node: '>=18'} - '@sentry-internal/feedback@8.48.0': - resolution: {integrity: sha512-6PwcJNHVPg0EfZxmN+XxVOClfQpv7MBAweV8t9i5l7VFr8sM/7wPNSeU/cG7iK19Ug9ZEkBpzMOe3G4GXJ5bpw==} - engines: {node: '>=14.18'} + '@sentry-internal/feedback@10.32.1': + resolution: {integrity: sha512-O24G8jxbfBY1RE/v2qFikPJISVMOrd/zk8FKyl+oUVYdOxU2Ucjk2cR3EQruBFlc7irnL6rT3GPfRZ/kBgLkmQ==} + engines: {node: '>=18'} - '@sentry-internal/replay-canvas@8.48.0': - resolution: {integrity: sha512-LdivLfBXXB9us1aAc6XaL7/L2Ob4vi3C/fEOXElehg3qHjX6q6pewiv5wBvVXGX1NfZTRvu+X11k6TZoxKsezw==} - engines: {node: '>=14.18'} + '@sentry-internal/replay-canvas@10.32.1': + resolution: {integrity: sha512-/XGTzWNWVc+B691fIVekV2KeoHFEDA5KftrLFAhEAW7uWOwk/xy3aQX4TYM0LcPm2PBKvoumlAD+Sd/aXk63oA==} + engines: {node: '>=18'} - '@sentry-internal/replay@8.48.0': - resolution: {integrity: sha512-csILVupc5RkrsTrncuUTGmlB56FQSFjXPYWG8I8yBTGlXEJ+o8oTuF6+55R4vbw3EIzBveXWi4kEBbnQlXW/eg==} - engines: {node: '>=14.18'} + '@sentry-internal/replay@10.32.1': + resolution: {integrity: sha512-KKmLUgIaLRM0VjrMA1ByQTawZyRDYSkG2evvEOVpEtR9F0sumidAQdi7UY71QEKE1RYe/Jcp/3WoaqsMh8tbnQ==} + engines: {node: '>=18'} '@sentry/babel-plugin-component-annotate@4.6.0': resolution: {integrity: sha512-3soTX50JPQQ51FSbb4qvNBf4z/yP7jTdn43vMTp9E4IxvJ9HKJR7OEuKkCMszrZmWsVABXl02msqO7QisePdiQ==} engines: {node: '>= 14'} - '@sentry/browser@8.48.0': - resolution: {integrity: sha512-fuuVULB5/1vI8NoIwXwR3xwhJJqk+y4RdSdajExGF7nnUDBpwUJyXsmYJnOkBO+oLeEs58xaCpotCKiPUNnE3g==} - engines: {node: '>=14.18'} + '@sentry/browser@10.32.1': + resolution: {integrity: sha512-NPNCXTZ05ZGTFyJdKNqjykpFm+urem0ebosILQiw3C4BxNVNGH4vfYZexyl6prRhmg91oB6GjVNiVDuJiap1gg==} + engines: {node: '>=18'} '@sentry/bundler-plugin-core@4.6.0': resolution: {integrity: sha512-Fub2XQqrS258jjS8qAxLLU1k1h5UCNJ76i8m4qZJJdogWWaF8t00KnnTyp9TEDJzrVD64tRXS8+HHENxmeUo3g==} @@ -3097,21 +3107,24 @@ packages: engines: {node: '>= 10'} hasBin: true - '@sentry/core@8.48.0': - resolution: {integrity: sha512-VGwYgTfLpvJ5LRO5A+qWo1gpo6SfqaGXL9TOzVgBucAdpzbrYHpZ87sEarDVq/4275uk1b0S293/mfsskFczyw==} - engines: {node: '>=14.18'} + '@sentry/core@10.32.1': + resolution: {integrity: sha512-PH2ldpSJlhqsMj2vCTyU0BI2Fx1oIDhm7Izo5xFALvjVCS0gmlqHt1udu6YlKn8BtpGH6bGzssvv5APrk+OdPQ==} + engines: {node: '>=18'} '@sentry/vite-plugin@4.6.0': resolution: {integrity: sha512-fMR2d+EHwbzBa0S1fp45SNUTProxmyFBp+DeBWWQOSP9IU6AH6ea2rqrpMAnp/skkcdW4z4LSRrOEpMZ5rWXLw==} engines: {node: '>= 14'} - '@sentry/vue@8.48.0': - resolution: {integrity: sha512-hqm9X7hz1vMQQB1HBYezrDBQihZk6e/MxWIG1wMJoClcBnD1Sh7y+D36UwaQlR4Gr/Ftiz+Bb0DxuAYHoUS4ow==} - engines: {node: '>=14.18'} + '@sentry/vue@10.32.1': + resolution: {integrity: sha512-3KVvjkBw18FgbYar87CevQNPRATtBrzi+xIRZf6uJG2Wnd9w+WH3+CQsjKwDvQiYyChiW4CYuFL2DuQ/VqOxfQ==} + engines: {node: '>=18'} peerDependencies: - pinia: 2.x + '@tanstack/vue-router': ^1.64.0 + pinia: 2.x || 3.x vue: 2.x || 3.x peerDependenciesMeta: + '@tanstack/vue-router': + optional: true pinia: optional: true @@ -3121,6 +3134,9 @@ packages: '@sparkjsdev/spark@0.1.10': resolution: {integrity: sha512-CiijdZQuj7KPDUqIZPiEqyUkJCYo1JqR05vq/V+ElxMwqR7L70ZuZDyIKcasjZHSiPB8pGRMH8HZGqUKO9aRPQ==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@storybook/addon-docs@10.1.9': resolution: {integrity: sha512-SvwEZ32lyk5p3PRmE3pmfAhs4HMiVo5zxjTBVmK9kgz9zGgWCTlikb56tJ998hVe52CFyCvt3I9rkHeYMCKPww==} peerDependencies: @@ -3528,6 +3544,9 @@ packages: '@types/node@18.19.130': resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@20.19.27': + resolution: {integrity: sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==} + '@types/node@24.10.4': resolution: {integrity: sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg==} @@ -3567,6 +3586,9 @@ packages: '@types/webxr@0.5.20': resolution: {integrity: sha512-JGpU6qiIJQKUuVSKx1GtQnHJGxRjtfGIhzO2ilq43VZZS//f1h1Sgexbdk+Lq+7569a6EYhOWrUpIruR/1Enmg==} + '@types/whatwg-mimetype@3.0.2': + resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + '@typescript-eslint/eslint-plugin@8.49.0': resolution: {integrity: sha512-JXij0vzIaTtCwu6SxTh8qBc66kmf1xs7pI4UOiMDFVct6q86G0Zs7KRcEoJgY3Cav3x5Tq0MF5jwgpgLqgKG3A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3765,11 +3787,11 @@ packages: vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.2.25 - '@vitest/coverage-v8@3.2.4': - resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + '@vitest/coverage-v8@4.0.16': + resolution: {integrity: sha512-2rNdjEIsPRzsdu6/9Eq0AYAzYdpP6Bx9cje9tL3FE5XzXRQF1fNU9pe/1yE8fCrS0HD+fBtt6gLPh6LI57tX7A==} peerDependencies: - '@vitest/browser': 3.2.4 - vitest: 3.2.4 + '@vitest/browser': 4.0.16 + vitest: 4.0.16 peerDependenciesMeta: '@vitest/browser': optional: true @@ -3777,6 +3799,9 @@ packages: '@vitest/expect@3.2.4': resolution: {integrity: sha512-Io0yyORnB6sikFlt8QW5K7slY4OjqNX9jmJQ02QDda8lyM6B5oNgVWoSoKPac8/kgnCUzuHQKrSLtu/uOqqrig==} + '@vitest/expect@4.0.16': + resolution: {integrity: sha512-eshqULT2It7McaJkQGLkPjPjNph+uevROGuIMJdG3V+0BSR2w9u6J9Lwu+E8cK5TETlfou8GRijhafIMhXsimA==} + '@vitest/mocker@3.2.4': resolution: {integrity: sha512-46ryTE9RZO/rfDd7pEqFl7etuyzekzEhUbTW3BvmeO/BcCMEgq59BKhek3dXDWgAj4oMK6OZi+vRr1wPW6qjEQ==} peerDependencies: @@ -3788,43 +3813,63 @@ packages: vite: optional: true + '@vitest/mocker@4.0.16': + resolution: {integrity: sha512-yb6k4AZxJTB+q9ycAvsoxGn+j/po0UaPgajllBgt1PzoMAAmJGYFdDk0uCcRcxb3BrME34I6u8gHZTQlkqSZpg==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + '@vitest/pretty-format@3.2.4': resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} - '@vitest/runner@3.2.4': - resolution: {integrity: sha512-oukfKT9Mk41LreEW09vt45f8wx7DordoWUZMYdY/cyAk7w5TWkTRCNZYF7sX7n2wB7jyGAl74OxgwhPgKaqDMQ==} + '@vitest/pretty-format@4.0.16': + resolution: {integrity: sha512-eNCYNsSty9xJKi/UdVD8Ou16alu7AYiS2fCPRs0b1OdhJiV89buAXQLpTbe+X8V9L6qrs9CqyvU7OaAopJYPsA==} - '@vitest/snapshot@3.2.4': - resolution: {integrity: sha512-dEYtS7qQP2CjU27QBC5oUOxLE/v5eLkGqPE0ZKEIDGMs4vKWe7IjgLOeauHsR0D5YuuycGRO5oSRXnwnmA78fQ==} + '@vitest/runner@4.0.16': + resolution: {integrity: sha512-VWEDm5Wv9xEo80ctjORcTQRJ539EGPB3Pb9ApvVRAY1U/WkHXmmYISqU5E79uCwcW7xYUV38gwZD+RV755fu3Q==} + + '@vitest/snapshot@4.0.16': + resolution: {integrity: sha512-sf6NcrYhYBsSYefxnry+DR8n3UV4xWZwWxYbCJUt2YdvtqzSPR7VfGrY0zsv090DAbjFZsi7ZaMi1KnSRyK1XA==} '@vitest/spy@3.2.4': resolution: {integrity: sha512-vAfasCOe6AIK70iP5UD11Ac4siNUNJ9i/9PZ3NKx07sG6sUxeag1LWdNrMWeKKYBLlzuK+Gn65Yd5nyL6ds+nw==} - '@vitest/ui@3.2.4': - resolution: {integrity: sha512-hGISOaP18plkzbWEcP/QvtRW1xDXF2+96HbEX6byqQhAUbiS5oH6/9JwW+QsQCIYON2bI6QZBF+2PvOmrRZ9wA==} + '@vitest/spy@4.0.16': + resolution: {integrity: sha512-4jIOWjKP0ZUaEmJm00E0cOBLU+5WE0BpeNr3XN6TEF05ltro6NJqHWxXD0kA8/Zc8Nh23AT8WQxwNG+WeROupw==} + + '@vitest/ui@4.0.16': + resolution: {integrity: sha512-rkoPH+RqWopVxDnCBE/ysIdfQ2A7j1eDmW8tCxxrR9nnFBa9jKf86VgsSAzxBd1x+ny0GC4JgiD3SNfRHv3pOg==} peerDependencies: - vitest: 3.2.4 + vitest: 4.0.16 '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vitest/utils@4.0.16': + resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} + '@volar/language-core@2.4.15': resolution: {integrity: sha512-3VHw+QZU0ZG9IuQmzT68IyN4hZNd9GchGPhbD9+pa8CVv7rnoOZwo7T8weIbrRmihqy3ATpdfXFnqRrfPVK6CA==} - '@volar/language-core@2.4.26': - resolution: {integrity: sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==} + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} '@volar/source-map@2.4.15': resolution: {integrity: sha512-CPbMWlUN6hVZJYGcU/GSoHu4EnCHiLaXI9n8c9la6RaI9W5JHX+NqG+GSQcB0JdC2FIBLdZJwGsfKyBB71VlTg==} - '@volar/source-map@2.4.26': - resolution: {integrity: sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==} + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} '@volar/typescript@2.4.15': resolution: {integrity: sha512-2aZ8i0cqPGjXb4BhkMsPYDkkuc2ZQ6yOpqwAuNwUoncELqoy5fRgOQtLR9gB0g902iS0NAkvpIzs27geVyVdPg==} - '@volar/typescript@2.4.26': - resolution: {integrity: sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==} + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} '@vue/babel-helper-vue-transform-on@1.4.0': resolution: {integrity: sha512-mCokbouEQ/ocRce/FpKCRItGo+013tHg7tixg3DUNS+6bmIchPt66012kBMm476vyEIJPafrvOf4E5OYj3shSw==} @@ -3848,12 +3893,18 @@ packages: '@vue/compiler-core@3.5.25': resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==} + '@vue/compiler-core@3.5.26': + resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} + '@vue/compiler-dom@3.5.13': resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} '@vue/compiler-dom@3.5.25': resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==} + '@vue/compiler-dom@3.5.26': + resolution: {integrity: sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==} + '@vue/compiler-sfc@3.5.13': resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} @@ -3872,6 +3923,9 @@ packages: '@vue/devtools-api@6.6.3': resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + '@vue/devtools-core@8.0.5': resolution: {integrity: sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ==} peerDependencies: @@ -3899,13 +3953,8 @@ packages: typescript: optional: true - '@vue/language-core@3.1.8': - resolution: {integrity: sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@vue/language-core@3.2.1': + resolution: {integrity: sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==} '@vue/reactivity@3.5.13': resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} @@ -3927,6 +3976,9 @@ packages: '@vue/shared@3.5.25': resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==} + '@vue/shared@3.5.26': + resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==} + '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} @@ -4113,8 +4165,8 @@ packages: alien-signals@1.0.13: resolution: {integrity: sha512-OGj9yyTnJEttvzhTUWuscOvtqxq5vrhF7vL9oS0xJ2mK0ItPYP1/y+vCFebfxoEyAz0++1AIwJ5CMr+Fk3nDmg==} - alien-signals@3.1.1: - resolution: {integrity: sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==} + alien-signals@3.1.2: + resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} @@ -4218,8 +4270,8 @@ packages: resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} engines: {node: '>=4'} - ast-v8-to-istanbul@0.3.5: - resolution: {integrity: sha512-9SdXjNheSiE8bALAQCQQuT6fgQaoxJh7IRYrRGZ8/9nv8WhJeC1aXAwN8TbaOssGOukUvyvnkgD9+Yuykvl1aA==} + ast-v8-to-istanbul@0.3.10: + resolution: {integrity: sha512-p4K7vMz2ZSk3wN8l5o3y2bJAoZXT3VuJI5OLTATY/01CYWumWvwkUw0SqDBnNq6IiTO3qDa1eSQDibAV8g7XOQ==} astral-regex@2.0.0: resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} @@ -4310,6 +4362,9 @@ packages: resolution: {integrity: sha512-k9xFKplee6KIio3IDbwj+uaCLpqzOwakOgmqzPezM0sFJlFKcg30vk2wOiAJtkTSfx0SSQDSe8q+mWA/fSH5Zg==} hasBin: true + bidi-js@1.0.3: + resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -4358,10 +4413,6 @@ packages: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} - cac@6.7.14: - resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} - engines: {node: '>=8'} - cacheable@2.3.0: resolution: {integrity: sha512-HHiAvOBmlcR2f3SQ7kdlYD8+AUJG+wlFZ/Ze8tl1Vzvz0MdOh8IYA/EFU4ve8t1/sZ0j4MGi7ST5MoTwHessQA==} @@ -4398,6 +4449,10 @@ packages: resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} + engines: {node: '>=18'} + chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} @@ -4634,9 +4689,9 @@ packages: engines: {node: '>=4'} hasBin: true - cssstyle@4.6.0: - resolution: {integrity: sha512-2z+rWdzbbSZv6/rhtvzvqeZQHrBaqgogqt85sqFNbabZOuFbCVFb8kPeEtZjiKkbrm395irpNKiYeFeLiQnFPg==} - engines: {node: '>=18'} + cssstyle@5.3.5: + resolution: {integrity: sha512-GlsEptulso7Jg0VaOZ8BXQi3AkYM5BOJKEO/rjMidSCq70FkIC5y0eawrCXeYzxgt3OCf4Ls+eoxN+/05vN0Ag==} + engines: {node: '>=20'} csstype@3.2.3: resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} @@ -4649,9 +4704,9 @@ packages: typescript: optional: true - data-urls@5.0.0: - resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} - engines: {node: '>=18'} + data-urls@6.0.0: + resolution: {integrity: sha512-BnBS08aLUM+DKamupXs3w2tJJoqU+AkaE/+6vQxi/G/DPmIZFJJp9Dkb1kM03AZx8ADehDUZgsNxju3mPXZYIA==} + engines: {node: '>=20'} data-view-buffer@1.0.2: resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} @@ -4884,6 +4939,10 @@ packages: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} + entities@7.0.0: + resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==} + engines: {node: '>=0.12'} + env-paths@2.2.1: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} @@ -5150,8 +5209,8 @@ packages: eventemitter3@5.0.1: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - expect-type@1.2.2: - resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} engines: {node: '>=12.0.0'} exsolve@1.0.8: @@ -5414,12 +5473,8 @@ packages: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} - globals@15.15.0: - resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} - engines: {node: '>=18'} - - globals@16.4.0: - resolution: {integrity: sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==} + globals@16.5.0: + resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==} engines: {node: '>=18'} globalthis@1.0.4: @@ -5450,9 +5505,9 @@ packages: resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} engines: {node: '>=6.0'} - happy-dom@15.11.0: - resolution: {integrity: sha512-/zyxHbXriYJ8b9Urh43ILk/jd9tC07djURnJuAimJ3tJCOLOzOUp7dEHDwJOZyzROlrrooUhr/0INZIDBj1Bjw==} - engines: {node: '>=18.0.0'} + happy-dom@20.0.11: + resolution: {integrity: sha512-QsCdAUHAmiDeKeaNojb1OHOPF7NjcWPBR7obdu3NwH2a/oyQaLg5d0aaCy/9My6CdPChYF07dvz5chaXBGaD4g==} + engines: {node: '>=20.0.0'} has-bigints@1.1.0: resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} @@ -5498,9 +5553,9 @@ packages: hookified@1.14.0: resolution: {integrity: sha512-pi1ynXIMFx/uIIwpWJ/5CEtOHLGtnUB0WhGeeYT+fKcQ+WCQbm3/rrkAXnpfph++PgepNqPdTC2WTj8A6k6zoQ==} - html-encoding-sniffer@4.0.0: - resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} - engines: {node: '>=18'} + html-encoding-sniffer@6.0.0: + resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} @@ -5540,10 +5595,6 @@ packages: engines: {node: '>=18'} hasBin: true - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - idb@7.1.1: resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==} @@ -5896,9 +5947,9 @@ packages: resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} hasBin: true - jsdom@26.1.0: - resolution: {integrity: sha512-Cvc9WUhxSMEo4McES3P7oK3QaXldCfNWp7pl2NNeiIFlCoLr3kfq9kb1fxftiwk1FLV7CvpvDfonxtzUDeSOPg==} - engines: {node: '>=18'} + jsdom@27.4.0: + resolution: {integrity: sha512-mjzqwWRD9Y1J1KUi7W97Gja1bwOOM5Ug0EZ6UDK3xS7j7mndrkwozHtSblfomlzyB4NepioNt+B2sOSzczVgtQ==} + engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} peerDependencies: canvas: ^3.0.0 peerDependenciesMeta: @@ -6163,8 +6214,8 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} - lru-cache@11.1.0: - resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + lru-cache@11.2.4: + resolution: {integrity: sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg==} engines: {node: 20 || >=22} lru-cache@5.1.1: @@ -6193,8 +6244,8 @@ packages: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} - magicast@0.3.5: - resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + magicast@0.5.1: + resolution: {integrity: sha512-xrHS24IxaLrvuo613F719wvOIv9xPHFWQHuvGUBmPnCA/3MQxKI3b+r7n1jAoDHmsbC5bRhTZYR77invLAxVnw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -6529,9 +6580,6 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - nwsapi@2.2.21: - resolution: {integrity: sha512-o6nIY3qwiSXl7/LuOU0Dmuctd34Yay0yeuZRLFmDPrrdHpXKFndPj3hM+YEPVHYC5fx2otBx4Ilc/gyYSAUaIA==} - nx@22.2.4: resolution: {integrity: sha512-x94oITsrX1jjSIZDSW/9+aPH9zJNK1m5Hfs2PMkcHR4i6h0fL/vv3+JzGbMF8RZRMTLfqm1ZCxJgAFVh3tPatg==} hasBin: true @@ -6584,6 +6632,9 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.1: + resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==} + ohash@2.0.11: resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} @@ -6697,6 +6748,9 @@ packages: parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parse5@8.0.0: + resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} + pascal-case@3.1.2: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} @@ -7172,9 +7226,6 @@ packages: rope-sequence@1.3.4: resolution: {integrity: sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==} - rrweb-cssom@0.8.0: - resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} - run-applescript@7.1.0: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} @@ -7203,9 +7254,6 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -7346,8 +7394,8 @@ packages: standardized-audio-context@25.3.77: resolution: {integrity: sha512-Ki9zNz6pKcC5Pi+QPjPyVsD9GwJIJWgryji0XL9cAJXMGyn+dPOf6Qik1AHei0+UNVcc4BOCa0hWLBzlwqsW/A==} - std-env@3.9.0: - resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + std-env@3.10.0: + resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} stop-iteration-iterator@1.1.0: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} @@ -7432,9 +7480,6 @@ packages: resolution: {integrity: sha512-1tB5mhVo7U+ETBKNf92xT4hrQa3pm0MZ0PQvuDnWgAAGHDsfp4lPSpiS6psrSiet87wyGPh9ft6wmhOMQ0hDiw==} engines: {node: '>=14.16'} - strip-literal@3.0.0: - resolution: {integrity: sha512-TcccoMhJOM3OebGhSBEmp3UZ2SfDMZUEBdRA/9ynfLi8yYajyWX3JiXArcJt4Umh4vISpspkQIY8ZZoCqjbviA==} - stubborn-fs@1.2.5: resolution: {integrity: sha512-H2N9c26eXjzL/S/K+i/RHHcFanE74dptvvjM8iwzwbVcWY/zjBbgRqF3K0DY4+OD+uTTASTBvDoxPDaPN02D7g==} @@ -7513,10 +7558,6 @@ packages: engines: {node: '>=10'} hasBin: true - test-exclude@7.0.1: - resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} - engines: {node: '>=18'} - three@0.170.0: resolution: {integrity: sha512-FQK+LEpYc0fBD+J8g6oSEyyNzjp+Q7Ks1C568WWaoMRLW+TkNNWmenWeGgJjV105Gd+p/2ql1ZcjYvNiPZBhuQ==} @@ -7534,9 +7575,6 @@ packages: resolution: {integrity: sha512-aHRmouyowIq1P5jrTF+YK6pGX+WuvFtSCLbqk91yHnU3SWQRIcNIamZLM5XF6lLqB13AWz0PGPXRff2QGDsxIg==} engines: {node: '>=12.20.0'} - tinyexec@0.3.2: - resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} - tinyexec@1.0.2: resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==} engines: {node: '>=18'} @@ -7545,14 +7583,14 @@ packages: resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} engines: {node: '>=12.0.0'} - tinypool@1.1.1: - resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} - engines: {node: ^18.0.0 || >=20.0.0} - tinyrainbow@2.0.0: resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} engines: {node: '>=14.0.0'} + tinyrainbow@3.0.3: + resolution: {integrity: sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==} + engines: {node: '>=14.0.0'} + tinyspy@4.0.4: resolution: {integrity: sha512-azl+t0z7pw/z958Gy9svOTuzqIk6xq+NSheJzn5MMWtWTFywIacg2wUlzKFGtt3cthx0r2SxMK0yzJOR0IES7Q==} engines: {node: '>=14.0.0'} @@ -7562,11 +7600,11 @@ packages: peerDependencies: '@tiptap/core': ^2.0.3 - tldts-core@6.1.86: - resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + tldts-core@7.0.19: + resolution: {integrity: sha512-lJX2dEWx0SGH4O6p+7FPwYmJ/bu1JbcGJ8RLaG9b7liIgZ85itUVEPbMtWRVrde/0fnDPEPHW10ZsKW3kVsE9A==} - tldts@6.1.86: - resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + tldts@7.0.19: + resolution: {integrity: sha512-8PWx8tvC4jDB39BQw1m4x8y5MH1BcQ5xHeL2n7UVFulMPH/3Q0uiamahFJ3lXA0zO2SUyRXuVVbWSDmstlt9YA==} hasBin: true tmp@0.2.5: @@ -7584,16 +7622,16 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} - tough-cookie@5.1.2: - resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + tough-cookie@6.0.0: + resolution: {integrity: sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==} engines: {node: '>=16'} tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} - tr46@5.1.1: - resolution: {integrity: sha512-hdF5ZgjTqgAntKkklYw0R03MG2x/bSzTtkxmIRw/sTNV8YXsCJ1tfLAX23lhxhHJlEf3CRCOCGGWw3vI3GaSPw==} - engines: {node: '>=18'} + tr46@6.0.0: + resolution: {integrity: sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw==} + engines: {node: '>=20'} tree-kill@1.2.2: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} @@ -7702,6 +7740,9 @@ packages: undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici-types@7.16.0: resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} @@ -7842,11 +7883,6 @@ packages: peerDependencies: vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0 - vite-node@3.2.4: - resolution: {integrity: sha512-EbKSKh+bh1E1IFxeO0pg1n4dvoOTt0UDiXMd/qn++r98+jPO1xtJilvXldeuQ8giIB5IkpjCgMleHMNEsGH6pg==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} - hasBin: true - vite-plugin-dts@4.5.4: resolution: {integrity: sha512-d4sOM8M/8z7vRXHHq/ebbblfaxENjogAAekcfcDCCwAyvGqnPrc7f4NZbvItS+g4WTgerW0xDwSz5qz11JT3vg==} peerDependencies: @@ -7922,26 +7958,32 @@ packages: yaml: optional: true - vitest@3.2.4: - resolution: {integrity: sha512-LUCP5ev3GURDysTWiP47wRRUpLKMOfPh+yKTx3kVIEiu5KOMeqzpnYNsKyOoVrULivR8tLcks4+lga33Whn90A==} - engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + vitest@4.0.16: + resolution: {integrity: sha512-E4t7DJ9pESL6E3I8nFjPa4xGUd3PmiWDLsDztS2qXSJWfHtbQnwAWylaBvSNY48I3vr8PTqIZlyK8TE3V3CA4Q==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} hasBin: true peerDependencies: '@edge-runtime/vm': '*' - '@types/debug': ^4.1.12 - '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 - '@vitest/browser': 3.2.4 - '@vitest/ui': 3.2.4 + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.0.16 + '@vitest/browser-preview': 4.0.16 + '@vitest/browser-webdriverio': 4.0.16 + '@vitest/ui': 4.0.16 happy-dom: '*' jsdom: '*' peerDependenciesMeta: '@edge-runtime/vm': optional: true - '@types/debug': + '@opentelemetry/api': optional: true '@types/node': optional: true - '@vitest/browser': + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': optional: true '@vitest/ui': optional: true @@ -7968,8 +8010,8 @@ packages: vue-component-type-helpers@2.2.12: resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} - vue-component-type-helpers@3.1.8: - resolution: {integrity: sha512-oaowlmEM6BaYY+8o+9D9cuzxpWQWHqHTMKakMxXu0E+UCIOMTljyIPO15jcnaCwJtZu/zWDotK7mOIHvWD9mcw==} + vue-component-type-helpers@3.2.1: + resolution: {integrity: sha512-gKV7XOkQl4urSuLHNY1tnVQf7wVgtb/mKbRyxSLWGZUY9RK7aDPhBenTjm+i8ZFe0zC2PZeHMPtOZXZfyaFOzQ==} vue-demi@0.14.10: resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} @@ -8009,8 +8051,8 @@ packages: peerDependencies: vue: ^3.2.0 - vue-tsc@3.1.8: - resolution: {integrity: sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==} + vue-tsc@3.2.1: + resolution: {integrity: sha512-I23Rk8dkQfmcSbxDO0dmg9ioMLjKA1pjlU3Lz6Jfk2pMGu3Uryu9810XkcZH24IzPbhzPCnkKo2rEMRX0skSrw==} hasBin: true peerDependencies: typescript: '>=5.0.0' @@ -8063,9 +8105,9 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - webidl-conversions@7.0.0: - resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} - engines: {node: '>=12'} + webidl-conversions@8.0.0: + resolution: {integrity: sha512-n4W4YFyz5JzOfQeA8oN7dUYpR+MBP3PIUsn2jLjWXwK5ASUzt0Jc/A5sAUZoCYFJRGF0FBKJ+1JjN43rNdsQzA==} + engines: {node: '>=20'} webpack-sources@3.3.3: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} @@ -8085,10 +8127,6 @@ packages: resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} engines: {node: '>=0.8.0'} - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - whatwg-mimetype@3.0.0: resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} engines: {node: '>=12'} @@ -8097,9 +8135,9 @@ packages: resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} engines: {node: '>=18'} - whatwg-url@14.2.0: - resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} - engines: {node: '>=18'} + whatwg-url@15.1.0: + resolution: {integrity: sha512-2ytDk0kiEj/yu90JOAp44PVPUkO9+jVhyf+SybKlRHSDlvOOZhdPIrr7xTH64l4WixO2cP+wQIcgujkGBPPz6g==} + engines: {node: '>=20'} whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -8291,6 +8329,8 @@ packages: snapshots: + '@acemir/cssom@0.9.30': {} + '@adobe/css-tools@4.4.4': {} '@alcalzone/ansi-tokenize@0.2.0': @@ -8377,23 +8417,28 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@ampproject/remapping@2.3.0': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - '@antfu/install-pkg@1.1.0': dependencies: package-manager-detector: 1.6.0 tinyexec: 1.0.2 - '@asamuzakjp/css-color@3.2.0': + '@asamuzakjp/css-color@4.1.1': dependencies: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-color-parser': 3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 - lru-cache: 10.4.3 + lru-cache: 11.2.4 + + '@asamuzakjp/dom-selector@6.7.6': + dependencies: + '@asamuzakjp/nwsapi': 2.3.9 + bidi-js: 1.0.3 + css-tree: 3.1.0 + is-potential-custom-element-name: 1.0.1 + lru-cache: 11.2.4 + + '@asamuzakjp/nwsapi@2.3.9': {} '@atlaskit/pragmatic-drag-and-drop@1.3.1': dependencies: @@ -9154,7 +9199,7 @@ snapshots: dependencies: '@csstools/css-tokenizer': 3.0.4 - '@csstools/css-syntax-patches-for-csstree@1.0.20': {} + '@csstools/css-syntax-patches-for-csstree@1.0.22': {} '@csstools/css-tokenizer@3.0.4': {} @@ -9383,6 +9428,8 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 + '@exodus/bytes@1.7.0': {} + '@firebase/analytics-compat@0.2.18(@firebase/app-compat@0.2.53)(@firebase/app@0.11.4)': dependencies: '@firebase/analytics': 0.10.12(@firebase/app@0.11.4) @@ -9792,7 +9839,7 @@ snapshots: eslint: 9.39.1(jiti@2.6.1) eslint-compat-utils: 0.6.5(eslint@9.39.1(jiti@2.6.1)) glob: 10.4.5 - globals: 16.4.0 + globals: 16.5.0 ignore: 7.0.5 import-fresh: 3.3.1 is-language-code: 3.1.0 @@ -9841,8 +9888,6 @@ snapshots: dependencies: minipass: 7.1.2 - '@istanbuljs/schema@0.1.3': {} - '@jest/diff-sequences@30.0.1': {} '@jest/get-type@30.1.0': {} @@ -10311,11 +10356,11 @@ snapshots: - typescript - verdaccio - '@nx/vite@22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@3.2.4)': + '@nx/vite@22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16)': dependencies: '@nx/devkit': 22.2.6(nx@22.2.6) '@nx/js': 22.2.6(@babel/traverse@7.28.5)(nx@22.2.6) - '@nx/vitest': 22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@3.2.4) + '@nx/vitest': 22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16) '@phenomnomnominal/tsquery': 5.0.1(typescript@5.9.3) ajv: 8.17.1 enquirer: 2.3.6 @@ -10324,7 +10369,7 @@ snapshots: tsconfig-paths: 4.2.0 tslib: 2.8.1 vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(happy-dom@15.11.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -10335,7 +10380,7 @@ snapshots: - typescript - verdaccio - '@nx/vitest@22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@3.2.4)': + '@nx/vitest@22.2.6(@babel/traverse@7.28.5)(nx@22.2.6)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vitest@4.0.16)': dependencies: '@nx/devkit': 22.2.6(nx@22.2.6) '@nx/js': 22.2.6(@babel/traverse@7.28.5)(nx@22.2.6) @@ -10344,7 +10389,7 @@ snapshots: tslib: 2.8.1 optionalDependencies: vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(happy-dom@15.11.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + vitest: 4.0.16(@types/node@24.10.4)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) transitivePeerDependencies: - '@babel/traverse' - '@swc-node/register' @@ -10547,13 +10592,9 @@ snapshots: esquery: 1.6.0 typescript: 5.9.3 - '@pinia/testing@0.1.5(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3))': + '@pinia/testing@1.0.3(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))': dependencies: pinia: 2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)) - vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.3)) - transitivePeerDependencies: - - '@vue/composition-api' - - vue '@pkgjs/parseargs@0.11.0': optional: true @@ -10760,33 +10801,33 @@ snapshots: transitivePeerDependencies: - '@types/node' - '@sentry-internal/browser-utils@8.48.0': + '@sentry-internal/browser-utils@10.32.1': dependencies: - '@sentry/core': 8.48.0 + '@sentry/core': 10.32.1 - '@sentry-internal/feedback@8.48.0': + '@sentry-internal/feedback@10.32.1': dependencies: - '@sentry/core': 8.48.0 + '@sentry/core': 10.32.1 - '@sentry-internal/replay-canvas@8.48.0': + '@sentry-internal/replay-canvas@10.32.1': dependencies: - '@sentry-internal/replay': 8.48.0 - '@sentry/core': 8.48.0 + '@sentry-internal/replay': 10.32.1 + '@sentry/core': 10.32.1 - '@sentry-internal/replay@8.48.0': + '@sentry-internal/replay@10.32.1': dependencies: - '@sentry-internal/browser-utils': 8.48.0 - '@sentry/core': 8.48.0 + '@sentry-internal/browser-utils': 10.32.1 + '@sentry/core': 10.32.1 '@sentry/babel-plugin-component-annotate@4.6.0': {} - '@sentry/browser@8.48.0': + '@sentry/browser@10.32.1': dependencies: - '@sentry-internal/browser-utils': 8.48.0 - '@sentry-internal/feedback': 8.48.0 - '@sentry-internal/replay': 8.48.0 - '@sentry-internal/replay-canvas': 8.48.0 - '@sentry/core': 8.48.0 + '@sentry-internal/browser-utils': 10.32.1 + '@sentry-internal/feedback': 10.32.1 + '@sentry-internal/replay': 10.32.1 + '@sentry-internal/replay-canvas': 10.32.1 + '@sentry/core': 10.32.1 '@sentry/bundler-plugin-core@4.6.0': dependencies: @@ -10846,7 +10887,7 @@ snapshots: - encoding - supports-color - '@sentry/core@8.48.0': {} + '@sentry/core@10.32.1': {} '@sentry/vite-plugin@4.6.0': dependencies: @@ -10856,10 +10897,10 @@ snapshots: - encoding - supports-color - '@sentry/vue@8.48.0(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3))': + '@sentry/vue@10.32.1(pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)))(vue@3.5.13(typescript@5.9.3))': dependencies: - '@sentry/browser': 8.48.0 - '@sentry/core': 8.48.0 + '@sentry/browser': 10.32.1 + '@sentry/core': 10.32.1 vue: 3.5.13(typescript@5.9.3) optionalDependencies: pinia: 2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)) @@ -10870,6 +10911,8 @@ snapshots: dependencies: fflate: 0.8.2 + '@standard-schema/spec@1.1.0': {} + '@storybook/addon-docs@10.1.9(@types/react@19.1.9)(esbuild@0.27.1)(rollup@4.53.5)(storybook@10.1.9(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': dependencies: '@mdx-js/react': 3.1.1(@types/react@19.1.9)(react@19.2.3) @@ -10945,7 +10988,7 @@ snapshots: storybook: 10.1.9(@testing-library/dom@10.4.1)(prettier@3.7.4)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) type-fest: 2.19.0 vue: 3.5.13(typescript@5.9.3) - vue-component-type-helpers: 3.1.8 + vue-component-type-helpers: 3.2.1 '@swc/helpers@0.5.17': dependencies: @@ -11314,6 +11357,10 @@ snapshots: dependencies: undici-types: 5.26.5 + '@types/node@20.19.27': + dependencies: + undici-types: 6.21.0 + '@types/node@24.10.4': dependencies: undici-types: 7.16.0 @@ -11354,6 +11401,8 @@ snapshots: '@types/webxr@0.5.20': {} + '@types/whatwg-mimetype@3.0.2': {} + '@typescript-eslint/eslint-plugin@8.49.0(@typescript-eslint/parser@8.49.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 @@ -11567,22 +11616,20 @@ snapshots: vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) vue: 3.5.13(typescript@5.9.3) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4)': + '@vitest/coverage-v8@4.0.16(vitest@4.0.16)': dependencies: - '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 - ast-v8-to-istanbul: 0.3.5 - debug: 4.4.3 + '@vitest/utils': 4.0.16 + ast-v8-to-istanbul: 0.3.10 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 5.0.6 istanbul-reports: 3.2.0 - magic-string: 0.30.21 - magicast: 0.3.5 - std-env: 3.9.0 - test-exclude: 7.0.1 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(happy-dom@15.11.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + magicast: 0.5.1 + obug: 2.1.1 + std-env: 3.10.0 + tinyrainbow: 3.0.3 + vitest: 4.0.16(@types/node@24.10.4)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) transitivePeerDependencies: - supports-color @@ -11594,6 +11641,15 @@ snapshots: chai: 5.3.3 tinyrainbow: 2.0.0 + '@vitest/expect@4.0.16': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 + chai: 6.2.2 + tinyrainbow: 3.0.3 + '@vitest/mocker@3.2.4(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': dependencies: '@vitest/spy': 3.2.4 @@ -11602,19 +11658,30 @@ snapshots: optionalDependencies: vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))': + dependencies: + '@vitest/spy': 4.0.16 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + '@vitest/pretty-format@3.2.4': dependencies: tinyrainbow: 2.0.0 - '@vitest/runner@3.2.4': + '@vitest/pretty-format@4.0.16': dependencies: - '@vitest/utils': 3.2.4 - pathe: 2.0.3 - strip-literal: 3.0.0 + tinyrainbow: 3.0.3 - '@vitest/snapshot@3.2.4': + '@vitest/runner@4.0.16': dependencies: - '@vitest/pretty-format': 3.2.4 + '@vitest/utils': 4.0.16 + pathe: 2.0.3 + + '@vitest/snapshot@4.0.16': + dependencies: + '@vitest/pretty-format': 4.0.16 magic-string: 0.30.21 pathe: 2.0.3 @@ -11622,16 +11689,18 @@ snapshots: dependencies: tinyspy: 4.0.4 - '@vitest/ui@3.2.4(vitest@3.2.4)': + '@vitest/spy@4.0.16': {} + + '@vitest/ui@4.0.16(vitest@4.0.16)': dependencies: - '@vitest/utils': 3.2.4 + '@vitest/utils': 4.0.16 fflate: 0.8.2 flatted: 3.3.3 pathe: 2.0.3 sirv: 3.0.2 tinyglobby: 0.2.15 - tinyrainbow: 2.0.0 - vitest: 3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(happy-dom@15.11.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) + tinyrainbow: 3.0.3 + vitest: 4.0.16(@types/node@24.10.4)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) '@vitest/utils@3.2.4': dependencies: @@ -11639,17 +11708,22 @@ snapshots: loupe: 3.2.1 tinyrainbow: 2.0.0 + '@vitest/utils@4.0.16': + dependencies: + '@vitest/pretty-format': 4.0.16 + tinyrainbow: 3.0.3 + '@volar/language-core@2.4.15': dependencies: '@volar/source-map': 2.4.15 - '@volar/language-core@2.4.26': + '@volar/language-core@2.4.27': dependencies: - '@volar/source-map': 2.4.26 + '@volar/source-map': 2.4.27 '@volar/source-map@2.4.15': {} - '@volar/source-map@2.4.26': {} + '@volar/source-map@2.4.27': {} '@volar/typescript@2.4.15': dependencies: @@ -11657,9 +11731,9 @@ snapshots: path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@volar/typescript@2.4.26': + '@volar/typescript@2.4.27': dependencies: - '@volar/language-core': 2.4.26 + '@volar/language-core': 2.4.27 path-browserify: 1.0.1 vscode-uri: 3.1.0 @@ -11675,7 +11749,7 @@ snapshots: '@babel/types': 7.28.5 '@vue/babel-helper-vue-transform-on': 1.4.0 '@vue/babel-plugin-resolve-type': 1.4.0(@babel/core@7.28.5) - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.26 optionalDependencies: '@babel/core': 7.28.5 transitivePeerDependencies: @@ -11708,6 +11782,14 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-core@3.5.26': + dependencies: + '@babel/parser': 7.28.5 + '@vue/shared': 3.5.26 + entities: 7.0.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.13': dependencies: '@vue/compiler-core': 3.5.13 @@ -11718,6 +11800,11 @@ snapshots: '@vue/compiler-core': 3.5.25 '@vue/shared': 3.5.25 + '@vue/compiler-dom@3.5.26': + dependencies: + '@vue/compiler-core': 3.5.26 + '@vue/shared': 3.5.26 + '@vue/compiler-sfc@3.5.13': dependencies: '@babel/parser': 7.28.5 @@ -11759,6 +11846,8 @@ snapshots: '@vue/devtools-api@6.6.3': {} + '@vue/devtools-api@6.6.4': {} + '@vue/devtools-core@8.0.5(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2))(vue@3.5.13(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 @@ -11799,10 +11888,10 @@ snapshots: '@vue/language-core@2.2.0(typescript@5.9.3)': dependencies: - '@volar/language-core': 2.4.26 - '@vue/compiler-dom': 3.5.25 + '@volar/language-core': 2.4.27 + '@vue/compiler-dom': 3.5.26 '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.26 alien-signals: 0.4.14 minimatch: 9.0.5 muggle-string: 0.4.1 @@ -11813,9 +11902,9 @@ snapshots: '@vue/language-core@2.2.12(typescript@5.9.3)': dependencies: '@volar/language-core': 2.4.15 - '@vue/compiler-dom': 3.5.25 + '@vue/compiler-dom': 3.5.26 '@vue/compiler-vue2': 2.7.16 - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.26 alien-signals: 1.0.13 minimatch: 9.0.5 muggle-string: 0.4.1 @@ -11823,17 +11912,15 @@ snapshots: optionalDependencies: typescript: 5.9.3 - '@vue/language-core@3.1.8(typescript@5.9.3)': + '@vue/language-core@3.2.1': dependencies: - '@volar/language-core': 2.4.26 - '@vue/compiler-dom': 3.5.25 - '@vue/shared': 3.5.25 - alien-signals: 3.1.1 + '@volar/language-core': 2.4.27 + '@vue/compiler-dom': 3.5.26 + '@vue/shared': 3.5.26 + alien-signals: 3.1.2 muggle-string: 0.4.1 path-browserify: 1.0.1 picomatch: 4.0.3 - optionalDependencies: - typescript: 5.9.3 '@vue/reactivity@3.5.13': dependencies: @@ -11861,6 +11948,8 @@ snapshots: '@vue/shared@3.5.25': {} + '@vue/shared@3.5.26': {} + '@vue/test-utils@2.4.6': dependencies: js-beautify: 1.15.1 @@ -12039,7 +12128,7 @@ snapshots: alien-signals@1.0.13: {} - alien-signals@3.1.1: {} + alien-signals@3.1.2: {} ansi-align@3.0.1: dependencies: @@ -12156,7 +12245,7 @@ snapshots: dependencies: tslib: 2.8.1 - ast-v8-to-istanbul@0.3.5: + ast-v8-to-istanbul@0.3.10: dependencies: '@jridgewell/trace-mapping': 0.3.31 estree-walker: 3.0.3 @@ -12258,6 +12347,10 @@ snapshots: baseline-browser-mapping@2.9.7: {} + bidi-js@1.0.3: + dependencies: + require-from-string: 2.0.2 + binary-extensions@2.3.0: {} bind-event-listener@3.0.0: {} @@ -12322,8 +12415,6 @@ snapshots: dependencies: run-applescript: 7.1.0 - cac@6.7.14: {} - cacheable@2.3.0: dependencies: '@cacheable/memory': 2.0.6 @@ -12370,6 +12461,8 @@ snapshots: loupe: 3.2.1 pathval: 2.0.1 + chai@6.2.2: {} + chalk@4.1.2: dependencies: ansi-styles: 4.3.0 @@ -12594,10 +12687,11 @@ snapshots: cssesc@3.0.0: {} - cssstyle@4.6.0: + cssstyle@5.3.5: dependencies: - '@asamuzakjp/css-color': 3.2.0 - rrweb-cssom: 0.8.0 + '@asamuzakjp/css-color': 4.1.1 + '@csstools/css-syntax-patches-for-csstree': 1.0.22 + css-tree: 3.1.0 csstype@3.2.3: {} @@ -12607,10 +12701,10 @@ snapshots: optionalDependencies: typescript: 5.9.3 - data-urls@5.0.0: + data-urls@6.0.0: dependencies: whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 + whatwg-url: 15.1.0 data-view-buffer@1.0.2: dependencies: @@ -12835,6 +12929,8 @@ snapshots: entities@6.0.1: {} + entities@7.0.0: {} + env-paths@2.2.1: {} env-paths@3.0.0: {} @@ -13226,7 +13322,7 @@ snapshots: eventemitter3@5.0.1: {} - expect-type@1.2.2: {} + expect-type@1.3.0: {} exsolve@1.0.8: {} @@ -13551,9 +13647,7 @@ snapshots: globals@14.0.0: {} - globals@15.15.0: {} - - globals@16.4.0: {} + globals@16.5.0: {} globalthis@1.0.4: dependencies: @@ -13587,10 +13681,10 @@ snapshots: section-matter: 1.0.0 strip-bom-string: 1.0.0 - happy-dom@15.11.0: + happy-dom@20.0.11: dependencies: - entities: 4.5.0 - webidl-conversions: 7.0.0 + '@types/node': 20.19.27 + '@types/whatwg-mimetype': 3.0.2 whatwg-mimetype: 3.0.0 has-bigints@1.1.0: @@ -13629,9 +13723,11 @@ snapshots: hookified@1.14.0: {} - html-encoding-sniffer@4.0.0: + html-encoding-sniffer@6.0.0: dependencies: - whatwg-encoding: 3.1.1 + '@exodus/bytes': 1.7.0 + transitivePeerDependencies: + - '@exodus/crypto' html-escaper@2.0.2: {} @@ -13683,10 +13779,6 @@ snapshots: husky@9.1.7: {} - iconv-lite@0.6.3: - dependencies: - safer-buffer: 2.1.2 - idb@7.1.1: {} ieee754@1.2.1: {} @@ -14042,29 +14134,30 @@ snapshots: dependencies: argparse: 2.0.1 - jsdom@26.1.0: + jsdom@27.4.0: dependencies: - cssstyle: 4.6.0 - data-urls: 5.0.0 + '@acemir/cssom': 0.9.30 + '@asamuzakjp/dom-selector': 6.7.6 + '@exodus/bytes': 1.7.0 + cssstyle: 5.3.5 + data-urls: 6.0.0 decimal.js: 10.6.0 - html-encoding-sniffer: 4.0.0 + html-encoding-sniffer: 6.0.0 http-proxy-agent: 7.0.2 https-proxy-agent: 7.0.6 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.21 - parse5: 7.3.0 - rrweb-cssom: 0.8.0 + parse5: 8.0.0 saxes: 6.0.0 symbol-tree: 3.2.4 - tough-cookie: 5.1.2 + tough-cookie: 6.0.0 w3c-xmlserializer: 5.0.0 - webidl-conversions: 7.0.0 - whatwg-encoding: 3.1.1 + webidl-conversions: 8.0.0 whatwg-mimetype: 4.0.0 - whatwg-url: 14.2.0 + whatwg-url: 15.1.0 ws: 8.18.3 xml-name-validator: 5.0.0 transitivePeerDependencies: + - '@exodus/crypto' - bufferutil - supports-color - utf-8-validate @@ -14314,7 +14407,7 @@ snapshots: lru-cache@10.4.3: {} - lru-cache@11.1.0: {} + lru-cache@11.2.4: {} lru-cache@5.1.1: dependencies: @@ -14340,7 +14433,7 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 - magicast@0.3.5: + magicast@0.5.1: dependencies: '@babel/parser': 7.28.5 '@babel/types': 7.28.5 @@ -14837,8 +14930,6 @@ snapshots: dependencies: boolbase: 1.0.0 - nwsapi@2.2.21: {} - nx@22.2.4: dependencies: '@napi-rs/wasm-runtime': 0.2.4 @@ -14981,6 +15072,8 @@ snapshots: es-object-atoms: 1.1.1 optional: true + obug@2.1.1: {} + ohash@2.0.11: {} once@1.4.0: @@ -15161,6 +15254,10 @@ snapshots: dependencies: entities: 6.0.1 + parse5@8.0.0: + dependencies: + entities: 6.0.1 + pascal-case@3.1.2: dependencies: no-case: 3.0.4 @@ -15183,7 +15280,7 @@ snapshots: path-scurry@2.0.0: dependencies: - lru-cache: 11.1.0 + lru-cache: 11.2.4 minipass: 7.1.2 path-type@4.0.0: {} @@ -15210,7 +15307,7 @@ snapshots: pinia@2.2.2(typescript@5.9.3)(vue@3.5.13(typescript@5.9.3)): dependencies: - '@vue/devtools-api': 6.6.3 + '@vue/devtools-api': 6.6.4 vue: 3.5.13(typescript@5.9.3) vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.3)) optionalDependencies: @@ -15768,8 +15865,6 @@ snapshots: rope-sequence@1.3.4: {} - rrweb-cssom@0.8.0: {} - run-applescript@7.1.0: {} run-parallel@1.2.0: @@ -15804,8 +15899,6 @@ snapshots: is-regex: 1.2.1 optional: true - safer-buffer@2.1.2: {} - saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -15957,7 +16050,7 @@ snapshots: automation-events: 7.1.11 tslib: 2.8.1 - std-env@3.9.0: {} + std-env@3.10.0: {} stop-iteration-iterator@1.1.0: dependencies: @@ -16067,16 +16160,12 @@ snapshots: strip-json-comments@5.0.3: {} - strip-literal@3.0.0: - dependencies: - js-tokens: 9.0.1 - stubborn-fs@1.2.5: {} stylelint@16.26.1(typescript@5.9.3): dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) - '@csstools/css-syntax-patches-for-csstree': 1.0.20 + '@csstools/css-syntax-patches-for-csstree': 1.0.22 '@csstools/css-tokenizer': 3.0.4 '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.1) @@ -16200,12 +16289,6 @@ 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 - three@0.170.0: {} tiny-invariant@1.3.3: {} @@ -16218,8 +16301,6 @@ snapshots: tinyest@0.1.2: {} - tinyexec@0.3.2: {} - tinyexec@1.0.2: {} tinyglobby@0.2.15: @@ -16227,10 +16308,10 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 - tinypool@1.1.1: {} - tinyrainbow@2.0.0: {} + tinyrainbow@3.0.3: {} + tinyspy@4.0.4: {} tiptap-markdown@0.8.10(@tiptap/core@2.10.4(@tiptap/pm@2.10.4)): @@ -16241,11 +16322,11 @@ snapshots: markdown-it-task-lists: 2.1.1 prosemirror-markdown: 1.13.1 - tldts-core@6.1.86: {} + tldts-core@7.0.19: {} - tldts@6.1.86: + tldts@7.0.19: dependencies: - tldts-core: 6.1.86 + tldts-core: 7.0.19 tmp@0.2.5: {} @@ -16257,13 +16338,13 @@ snapshots: totalist@3.0.1: {} - tough-cookie@5.1.2: + tough-cookie@6.0.0: dependencies: - tldts: 6.1.86 + tldts: 7.0.19 tr46@0.0.3: {} - tr46@5.1.1: + tr46@6.0.0: dependencies: punycode: 2.3.1 @@ -16387,6 +16468,8 @@ snapshots: undici-types@5.26.5: {} + undici-types@6.21.0: {} + undici-types@7.16.0: {} unescape-js@1.1.4: @@ -16582,32 +16665,11 @@ snapshots: dependencies: vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-node@3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): - dependencies: - cac: 6.7.14 - debug: 4.4.3 - es-module-lexer: 1.7.0 - pathe: 2.0.3 - vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - transitivePeerDependencies: - - '@types/node' - - jiti - - less - - lightningcss - - sass - - sass-embedded - - stylus - - sugarss - - supports-color - - terser - - tsx - - yaml - vite-plugin-dts@4.5.4(@types/node@24.10.4)(rollup@4.53.5)(typescript@5.9.3)(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)): dependencies: '@microsoft/api-extractor': 7.52.13(@types/node@24.10.4) '@rollup/pluginutils': 5.3.0(rollup@4.53.5) - '@volar/typescript': 2.4.26 + '@volar/typescript': 2.4.27 '@vue/language-core': 2.2.0(typescript@5.9.3) compare-versions: 6.1.1 debug: 4.4.3 @@ -16720,7 +16782,7 @@ snapshots: '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.5) - '@vue/compiler-dom': 3.5.25 + '@vue/compiler-dom': 3.5.26 kolorist: 1.8.0 magic-string: 0.30.21 vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) @@ -16735,7 +16797,7 @@ snapshots: '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5) '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) '@vue/babel-plugin-jsx': 1.4.0(@babel/core@7.28.5) - '@vue/compiler-dom': 3.5.25 + '@vue/compiler-dom': 3.5.26 kolorist: 1.8.0 magic-string: 0.30.21 vite: 7.3.0(@types/node@25.0.3)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) @@ -16776,37 +16838,33 @@ snapshots: tsx: 4.19.4 yaml: 2.8.2 - vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.10.4)(@vitest/ui@3.2.4)(happy-dom@15.11.0)(jiti@2.6.1)(jsdom@26.1.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): + vitest@4.0.16(@types/node@24.10.4)(@vitest/ui@4.0.16)(happy-dom@20.0.11)(jiti@2.6.1)(jsdom@27.4.0)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2): dependencies: - '@types/chai': 5.2.3 - '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) - '@vitest/pretty-format': 3.2.4 - '@vitest/runner': 3.2.4 - '@vitest/snapshot': 3.2.4 - '@vitest/spy': 3.2.4 - '@vitest/utils': 3.2.4 - chai: 5.3.3 - debug: 4.4.3 - expect-type: 1.2.2 + '@vitest/expect': 4.0.16 + '@vitest/mocker': 4.0.16(vite@7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2)) + '@vitest/pretty-format': 4.0.16 + '@vitest/runner': 4.0.16 + '@vitest/snapshot': 4.0.16 + '@vitest/spy': 4.0.16 + '@vitest/utils': 4.0.16 + es-module-lexer: 1.7.0 + expect-type: 1.3.0 magic-string: 0.30.21 + obug: 2.1.1 pathe: 2.0.3 picomatch: 4.0.3 - std-env: 3.9.0 + std-env: 3.10.0 tinybench: 2.9.0 - tinyexec: 0.3.2 + tinyexec: 1.0.2 tinyglobby: 0.2.15 - tinypool: 1.1.1 - tinyrainbow: 2.0.0 + tinyrainbow: 3.0.3 vite: 7.3.0(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) - vite-node: 3.2.4(@types/node@24.10.4)(jiti@2.6.1)(lightningcss@1.30.1)(terser@5.39.2)(tsx@4.19.4)(yaml@2.8.2) why-is-node-running: 2.3.0 optionalDependencies: - '@types/debug': 4.1.12 '@types/node': 24.10.4 - '@vitest/ui': 3.2.4(vitest@3.2.4) - happy-dom: 15.11.0 - jsdom: 26.1.0 + '@vitest/ui': 4.0.16(vitest@4.0.16) + happy-dom: 20.0.11 + jsdom: 27.4.0 transitivePeerDependencies: - jiti - less @@ -16816,7 +16874,6 @@ snapshots: - sass-embedded - stylus - sugarss - - supports-color - terser - tsx - yaml @@ -16836,7 +16893,7 @@ snapshots: vue-component-type-helpers@2.2.12: {} - vue-component-type-helpers@3.1.8: {} + vue-component-type-helpers@3.2.1: {} vue-demi@0.14.10(vue@3.5.13(typescript@5.9.3)): dependencies: @@ -16846,7 +16903,7 @@ snapshots: dependencies: '@babel/parser': 7.28.5 '@babel/types': 7.28.5 - '@vue/compiler-dom': 3.5.25 + '@vue/compiler-dom': 3.5.26 '@vue/compiler-sfc': 3.5.25 ast-types: 0.16.1 esm-resolve: 1.0.11 @@ -16886,10 +16943,10 @@ snapshots: '@vue/devtools-api': 6.6.3 vue: 3.5.13(typescript@5.9.3) - vue-tsc@3.1.8(typescript@5.9.3): + vue-tsc@3.2.1(typescript@5.9.3): dependencies: - '@volar/typescript': 2.4.26 - '@vue/language-core': 3.1.8(typescript@5.9.3) + '@volar/typescript': 2.4.27 + '@vue/language-core': 3.2.1 typescript: 5.9.3 vue@3.5.13(typescript@5.9.3): @@ -16928,7 +16985,7 @@ snapshots: webidl-conversions@3.0.1: {} - webidl-conversions@7.0.0: {} + webidl-conversions@8.0.0: {} webpack-sources@3.3.3: {} @@ -16944,18 +17001,14 @@ snapshots: websocket-extensions@0.1.4: {} - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-mimetype@3.0.0: {} whatwg-mimetype@4.0.0: {} - whatwg-url@14.2.0: + whatwg-url@15.1.0: dependencies: - tr46: 5.1.1 - webidl-conversions: 7.0.0 + tr46: 6.0.0 + webidl-conversions: 8.0.0 whatwg-url@5.0.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 589020fe0..21ab92368 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,7 +15,7 @@ catalog: '@nx/playwright': 22.2.6 '@nx/storybook': 22.2.4 '@nx/vite': 22.2.6 - '@pinia/testing': ^0.1.5 + '@pinia/testing': ^1.0.3 '@playwright/test': ^1.57.0 '@prettier/plugin-oxc': ^0.1.3 '@primeuix/forms': 0.0.2 @@ -26,7 +26,7 @@ catalog: '@primevue/icons': 4.2.5 '@primevue/themes': ^4.2.5 '@sentry/vite-plugin': ^4.6.0 - '@sentry/vue': ^8.48.0 + '@sentry/vue': ^10.32.1 '@sparkjsdev/spark': ^0.1.10 '@storybook/addon-docs': ^10.1.9 '@storybook/vue3': ^10.1.9 @@ -39,8 +39,8 @@ catalog: '@types/semver': ^7.7.0 '@types/three': ^0.169.0 '@vitejs/plugin-vue': ^6.0.0 - '@vitest/coverage-v8': ^3.2.4 - '@vitest/ui': ^3.2.0 + '@vitest/coverage-v8': ^4.0.16 + '@vitest/ui': ^4.0.16 '@vue/test-utils': ^2.4.6 '@vueuse/core': ^11.0.0 '@vueuse/integrations': ^13.9.0 @@ -59,11 +59,11 @@ catalog: eslint-plugin-unused-imports: ^4.3.0 eslint-plugin-vue: ^10.6.2 firebase: ^11.6.0 - globals: ^15.9.0 - happy-dom: ^15.11.0 + globals: ^16.5.0 + happy-dom: ^20.0.11 husky: ^9.1.7 jiti: 2.6.1 - jsdom: ^26.1.0 + jsdom: ^27.4.0 knip: ^5.75.1 lint-staged: ^16.2.7 markdown-table: ^3.0.4 @@ -72,7 +72,7 @@ catalog: oxlint: ^1.33.0 oxlint-tsgolint: ^0.9.1 picocolors: ^1.1.1 - pinia: ^2.1.7 + pinia: ^3.0.4 postcss-html: ^1.8.0 prettier: ^3.7.4 pretty-bytes: ^7.1.0 @@ -96,13 +96,13 @@ catalog: vite-plugin-dts: ^4.5.4 vite-plugin-html: ^3.2.2 vite-plugin-vue-devtools: ^8.0.0 - vitest: ^3.2.4 + vitest: ^4.0.16 vue: ^3.5.13 - vue-component-type-helpers: ^3.0.7 + vue-component-type-helpers: ^3.2.1 vue-eslint-parser: ^10.2.0 vue-i18n: ^9.14.3 vue-router: ^4.4.3 - vue-tsc: ^3.1.8 + vue-tsc: ^3.2.1 vuefire: ^3.2.1 yjs: ^13.6.27 zod: ^3.23.8 diff --git a/src/components/queue/job/useJobErrorReporting.ts b/src/components/queue/job/useJobErrorReporting.ts index b9ae57a12..afc0baf3e 100644 --- a/src/components/queue/job/useJobErrorReporting.ts +++ b/src/components/queue/job/useJobErrorReporting.ts @@ -40,7 +40,7 @@ export const extractExecutionError = ( } } -type UseJobErrorReportingOptions = { +export type UseJobErrorReportingOptions = { taskForJob: ComputedRef copyToClipboard: CopyHandler dialog: JobErrorDialogService diff --git a/src/platform/assets/composables/useMediaAssetGalleryStore.test.ts b/src/platform/assets/composables/useMediaAssetGalleryStore.test.ts index 6897e7b0d..f2ac7bd8f 100644 --- a/src/platform/assets/composables/useMediaAssetGalleryStore.test.ts +++ b/src/platform/assets/composables/useMediaAssetGalleryStore.test.ts @@ -7,10 +7,14 @@ import type { AssetMeta } from '../schemas/mediaAssetSchema' import { useMediaAssetGalleryStore } from './useMediaAssetGalleryStore' vi.mock('@/stores/queueStore', () => ({ - ResultItemImpl: vi.fn().mockImplementation((data) => ({ - ...data, - url: '' - })) + ResultItemImpl: vi + .fn() + .mockImplementation(function (data) { + Object.assign(this, { + ...data, + url: '' + }) + }) })) describe('useMediaAssetGalleryStore', () => { diff --git a/src/renderer/extensions/vueNodes/composables/useNodePointerInteractions.test.ts b/src/renderer/extensions/vueNodes/composables/useNodePointerInteractions.test.ts index eb96ff8c8..c3410051a 100644 --- a/src/renderer/extensions/vueNodes/composables/useNodePointerInteractions.test.ts +++ b/src/renderer/extensions/vueNodes/composables/useNodePointerInteractions.test.ts @@ -133,7 +133,7 @@ const createMouseEvent = ( describe('useNodePointerInteractions', () => { beforeEach(async () => { - vi.restoreAllMocks() + vi.resetAllMocks() selectedItemsState.items = [] setActivePinia(createTestingPinia()) }) diff --git a/src/utils/queueDisplay.ts b/src/utils/queueDisplay.ts index 405625622..e0e0bce18 100644 --- a/src/utils/queueDisplay.ts +++ b/src/utils/queueDisplay.ts @@ -3,7 +3,7 @@ import type { JobState } from '@/types/queue' import { formatDuration } from '@/utils/formatUtil' import { clampPercentInt, formatPercent0 } from '@/utils/numberUtil' -type BuildJobDisplayCtx = { +export type BuildJobDisplayCtx = { t: (k: string, v?: Record) => string locale: string formatClockTimeFn: (ts: number, locale: string) => string diff --git a/tests-ui/tests/api.featureFlags.test.ts b/tests-ui/tests/api.featureFlags.test.ts index 42399e859..9900a2ade 100644 --- a/tests-ui/tests/api.featureFlags.test.ts +++ b/tests-ui/tests/api.featureFlags.test.ts @@ -24,7 +24,9 @@ describe('API Feature Flags', () => { } // Mock WebSocket constructor - global.WebSocket = vi.fn().mockImplementation(() => mockWebSocket) as any + vi.stubGlobal('WebSocket', function (this: WebSocket) { + Object.assign(this, mockWebSocket) + }) // Reset API state api.serverFeatureFlags = {} diff --git a/tests-ui/tests/components/graph/ZoomControlsModal.test.ts b/tests-ui/tests/components/graph/ZoomControlsModal.test.ts index 65abf52b7..cff7c17c7 100644 --- a/tests-ui/tests/components/graph/ZoomControlsModal.test.ts +++ b/tests-ui/tests/components/graph/ZoomControlsModal.test.ts @@ -70,7 +70,7 @@ const createWrapper = (props = {}) => { describe('ZoomControlsModal', () => { beforeEach(() => { - vi.restoreAllMocks() + vi.resetAllMocks() }) it('should execute zoom in command when zoom in button is clicked', async () => { diff --git a/tests-ui/tests/components/queue/useJobErrorReporting.test.ts b/tests-ui/tests/components/queue/useJobErrorReporting.test.ts index 0e0b83f6a..abd444dbe 100644 --- a/tests-ui/tests/components/queue/useJobErrorReporting.test.ts +++ b/tests-ui/tests/components/queue/useJobErrorReporting.test.ts @@ -4,7 +4,10 @@ import type { ComputedRef } from 'vue' import type { ExecutionErrorWsMessage } from '@/schemas/apiSchema' import type { TaskItemImpl } from '@/stores/queueStore' -import type { JobErrorDialogService } from '@/components/queue/job/useJobErrorReporting' +import type { + JobErrorDialogService, + UseJobErrorReportingOptions +} from '@/components/queue/job/useJobErrorReporting' import * as jobErrorReporting from '@/components/queue/job/useJobErrorReporting' const createExecutionErrorMessage = ( @@ -90,9 +93,9 @@ describe('extractExecutionError', () => { describe('useJobErrorReporting', () => { let taskState = ref(null) let taskForJob: ComputedRef - let copyToClipboard: ReturnType - let showExecutionErrorDialog: ReturnType - let showErrorDialog: ReturnType + let copyToClipboard: UseJobErrorReportingOptions['copyToClipboard'] + let showExecutionErrorDialog: JobErrorDialogService['showExecutionErrorDialog'] + let showErrorDialog: JobErrorDialogService['showErrorDialog'] let dialog: JobErrorDialogService let composable: ReturnType @@ -146,7 +149,7 @@ describe('useJobErrorReporting', () => { expect(copyToClipboard).toHaveBeenCalledTimes(1) expect(copyToClipboard).toHaveBeenCalledWith('Clipboard failure') - copyToClipboard.mockClear() + vi.mocked(copyToClipboard).mockClear() taskState.value = createTaskWithMessages([]) composable.copyErrorMessage() expect(copyToClipboard).not.toHaveBeenCalled() @@ -174,7 +177,7 @@ describe('useJobErrorReporting', () => { composable.reportJobError() expect(showExecutionErrorDialog).not.toHaveBeenCalled() expect(showErrorDialog).toHaveBeenCalledTimes(1) - const [errorArg, optionsArg] = showErrorDialog.mock.calls[0] + const [errorArg, optionsArg] = vi.mocked(showErrorDialog).mock.calls[0] expect(errorArg).toBeInstanceOf(Error) expect(errorArg.message).toBe(message) expect(optionsArg).toEqual({ reportType: 'queueJobError' }) diff --git a/tests-ui/tests/composables/maskeditor/useCanvasHistory.test.ts b/tests-ui/tests/composables/maskeditor/useCanvasHistory.test.ts index 0bff43669..587b0347d 100644 --- a/tests-ui/tests/composables/maskeditor/useCanvasHistory.test.ts +++ b/tests-ui/tests/composables/maskeditor/useCanvasHistory.test.ts @@ -43,7 +43,7 @@ describe('useCanvasHistory', () => { return rafCallCount } ) - vi.spyOn(window, 'alert').mockImplementation(() => {}) + vi.stubGlobal('alert', () => {}) const createMockImageData = () => { return { diff --git a/tests-ui/tests/composables/nodePack/usePacksSelection.test.ts b/tests-ui/tests/composables/nodePack/usePacksSelection.test.ts index 01a635a88..c38fc9c33 100644 --- a/tests-ui/tests/composables/nodePack/usePacksSelection.test.ts +++ b/tests-ui/tests/composables/nodePack/usePacksSelection.test.ts @@ -20,7 +20,7 @@ type NodePack = components['schemas']['Node'] describe('usePacksSelection', () => { let managerStore: ReturnType - let mockIsPackInstalled: ReturnType + let mockIsPackInstalled: (packName: string | undefined) => boolean const createMockPack = (id: string): NodePack => ({ id, @@ -58,7 +58,7 @@ describe('usePacksSelection', () => { createMockPack('pack3') ]) - mockIsPackInstalled.mockImplementation((id: string) => { + vi.mocked(mockIsPackInstalled).mockImplementation((id) => { return id === 'pack1' || id === 'pack3' }) @@ -76,7 +76,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(false) + vi.mocked(mockIsPackInstalled).mockReturnValue(false) const { installedPacks } = usePacksSelection(nodePacks) @@ -85,7 +85,7 @@ describe('usePacksSelection', () => { it('should update when nodePacks ref changes', () => { const nodePacks = ref([createMockPack('pack1')]) - mockIsPackInstalled.mockReturnValue(true) + vi.mocked(mockIsPackInstalled).mockReturnValue(true) const { installedPacks } = usePacksSelection(nodePacks) expect(installedPacks.value).toHaveLength(1) @@ -109,7 +109,7 @@ describe('usePacksSelection', () => { createMockPack('pack3') ]) - mockIsPackInstalled.mockImplementation((id: string) => { + vi.mocked(mockIsPackInstalled).mockImplementation((id) => { return id === 'pack1' }) @@ -126,7 +126,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(false) + vi.mocked(mockIsPackInstalled).mockReturnValue(false) const { notInstalledPacks } = usePacksSelection(nodePacks) @@ -141,7 +141,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(true) + vi.mocked(mockIsPackInstalled).mockReturnValue(true) const { isAllInstalled } = usePacksSelection(nodePacks) @@ -154,7 +154,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockImplementation((id: string) => id === 'pack1') + vi.mocked(mockIsPackInstalled).mockImplementation((id) => id === 'pack1') const { isAllInstalled } = usePacksSelection(nodePacks) @@ -177,7 +177,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(false) + vi.mocked(mockIsPackInstalled).mockReturnValue(false) const { isNoneInstalled } = usePacksSelection(nodePacks) @@ -190,7 +190,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockImplementation((id: string) => id === 'pack1') + vi.mocked(mockIsPackInstalled).mockImplementation((id) => id === 'pack1') const { isNoneInstalled } = usePacksSelection(nodePacks) @@ -214,7 +214,7 @@ describe('usePacksSelection', () => { createMockPack('pack3') ]) - mockIsPackInstalled.mockImplementation((id: string) => { + vi.mocked(mockIsPackInstalled).mockImplementation((id) => { return id === 'pack1' || id === 'pack2' }) @@ -229,7 +229,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(true) + vi.mocked(mockIsPackInstalled).mockReturnValue(true) const { isMixed } = usePacksSelection(nodePacks) @@ -242,7 +242,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(false) + vi.mocked(mockIsPackInstalled).mockReturnValue(false) const { isMixed } = usePacksSelection(nodePacks) @@ -265,7 +265,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(true) + vi.mocked(mockIsPackInstalled).mockReturnValue(true) const { selectionState } = usePacksSelection(nodePacks) @@ -278,7 +278,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(false) + vi.mocked(mockIsPackInstalled).mockReturnValue(false) const { selectionState } = usePacksSelection(nodePacks) @@ -292,7 +292,7 @@ describe('usePacksSelection', () => { createMockPack('pack3') ]) - mockIsPackInstalled.mockImplementation((id: string) => id === 'pack1') + vi.mocked(mockIsPackInstalled).mockImplementation((id) => id === 'pack1') const { selectionState } = usePacksSelection(nodePacks) @@ -305,13 +305,13 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockReturnValue(false) + vi.mocked(mockIsPackInstalled).mockReturnValue(false) const { selectionState } = usePacksSelection(nodePacks) expect(selectionState.value).toBe('none-installed') // Change mock to simulate installation - mockIsPackInstalled.mockReturnValue(true) + vi.mocked(mockIsPackInstalled).mockReturnValue(true) // Force reactivity update nodePacks.value = [...nodePacks.value] @@ -327,7 +327,7 @@ describe('usePacksSelection', () => { createMockPack('pack2') ]) - mockIsPackInstalled.mockImplementation((id: string) => id === 'pack2') + vi.mocked(mockIsPackInstalled).mockImplementation((id) => id === 'pack2') const { installedPacks, notInstalledPacks } = usePacksSelection(nodePacks) @@ -347,8 +347,8 @@ describe('usePacksSelection', () => { pack2: false } - mockIsPackInstalled.mockImplementation( - (id: string) => installationStatus[id] || false + vi.mocked(mockIsPackInstalled).mockImplementation( + (id) => (id && installationStatus[id]) || false ) const { installedPacks, notInstalledPacks, selectionState } = diff --git a/tests-ui/tests/composables/useCachedRequest.test.ts b/tests-ui/tests/composables/useCachedRequest.test.ts index 8d2a92a23..08faa3aaf 100644 --- a/tests-ui/tests/composables/useCachedRequest.test.ts +++ b/tests-ui/tests/composables/useCachedRequest.test.ts @@ -3,8 +3,11 @@ import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' import { useCachedRequest } from '@/composables/useCachedRequest' describe('useCachedRequest', () => { - let mockRequestFn: ReturnType - let abortSpy: ReturnType + let mockRequestFn: ( + params: any, + signal?: AbortSignal + ) => Promise + let abortSpy: () => void beforeEach(() => { vi.clearAllMocks() diff --git a/tests-ui/tests/composables/useJobList.test.ts b/tests-ui/tests/composables/useJobList.test.ts index 36a14162b..2e453bcf1 100644 --- a/tests-ui/tests/composables/useJobList.test.ts +++ b/tests-ui/tests/composables/useJobList.test.ts @@ -5,6 +5,9 @@ import type { Ref } from 'vue' import { useJobList } from '@/composables/queue/useJobList' import type { JobState } from '@/types/queue' +import { buildJobDisplay } from '@/utils/queueDisplay' +import type { BuildJobDisplayCtx } from '@/utils/queueDisplay' +import type { TaskItemImpl } from '@/stores/queueStore' type TestTask = { promptId: string @@ -43,19 +46,8 @@ vi.mock('vue-i18n', () => ({ } })) -let stMock: ReturnType -const ensureStMock = () => { - if (!stMock) { - stMock = vi.fn( - (key: string, fallback?: string) => `i18n(${key})-${fallback}` - ) - } - return stMock -} vi.mock('@/i18n', () => ({ - st: (...args: any[]) => { - return ensureStMock()(...args) - } + st: vi.fn((key: string, fallback?: string) => `i18n(${key})-${fallback}`) })) let totalPercent: Ref @@ -75,40 +67,24 @@ vi.mock('@/composables/queue/useQueueProgress', () => ({ } })) -let buildJobDisplayMock: ReturnType -const ensureBuildDisplayMock = () => { - if (!buildJobDisplayMock) { - buildJobDisplayMock = vi.fn((task: any, state: JobState, options: any) => ({ +vi.mock('@/utils/queueDisplay', () => ({ + buildJobDisplay: vi.fn( + (task: TaskItemImpl, state: JobState, options: BuildJobDisplayCtx) => ({ primary: `Job ${task.promptId}`, secondary: `${state} meta`, iconName: `${state}-icon`, iconImageUrl: undefined, showClear: state === 'failed', options - })) - } - return buildJobDisplayMock -} -vi.mock('@/utils/queueDisplay', () => ({ - buildJobDisplay: (...args: any[]) => { - return ensureBuildDisplayMock()(...args) - } + }) + ) })) -let jobStateFromTaskMock: ReturnType -const ensureJobStateMock = () => { - if (!jobStateFromTaskMock) { - jobStateFromTaskMock = vi.fn( - (task: TestTask, isInitializing?: boolean): JobState => - task.mockState ?? (isInitializing ? 'running' : 'completed') - ) - } - return jobStateFromTaskMock -} vi.mock('@/utils/queueUtil', () => ({ - jobStateFromTask: (...args: any[]) => { - return ensureJobStateMock()(...args) - } + jobStateFromTask: vi.fn( + (task: TestTask, isInitializing?: boolean): JobState => + task.mockState ?? (isInitializing ? 'running' : 'completed') + ) })) let queueStoreMock: { @@ -137,7 +113,7 @@ let executionStoreMock: { executingNode: null | { title?: string; type?: string } isPromptInitializing: (promptId?: string | number) => boolean } -let isPromptInitializingMock: ReturnType +let isPromptInitializingMock: (promptId?: string | number) => boolean const ensureExecutionStore = () => { if (!isPromptInitializingMock) { isPromptInitializingMock = vi.fn(() => false) @@ -221,13 +197,9 @@ const resetStores = () => { localeRef.value = 'en-US' tMock.mockClear() - if (stMock) stMock.mockClear() - if (buildJobDisplayMock) buildJobDisplayMock.mockClear() - if (jobStateFromTaskMock) jobStateFromTaskMock.mockClear() - if (isPromptInitializingMock) { - isPromptInitializingMock.mockReset() - isPromptInitializingMock.mockReturnValue(false) + vi.mocked(isPromptInitializingMock).mockReset() + vi.mocked(isPromptInitializingMock).mockReturnValue(false) } } @@ -240,6 +212,7 @@ describe('useJobList', () => { let api: ReturnType | null = null beforeEach(() => { + vi.resetAllMocks() resetStores() wrapper?.unmount() wrapper = null @@ -270,18 +243,18 @@ describe('useJobList', () => { await flush() jobItems.value - expect(buildJobDisplayMock).toHaveBeenCalledWith( + expect(buildJobDisplay).toHaveBeenCalledWith( expect.anything(), 'pending', expect.objectContaining({ showAddedHint: true }) ) - buildJobDisplayMock.mockClear() + vi.mocked(buildJobDisplay).mockClear() await vi.advanceTimersByTimeAsync(3000) await flush() jobItems.value - expect(buildJobDisplayMock).toHaveBeenCalledWith( + expect(buildJobDisplay).toHaveBeenCalledWith( expect.anything(), 'pending', expect.objectContaining({ showAddedHint: false }) @@ -303,13 +276,13 @@ describe('useJobList', () => { await flush() expect(vi.getTimerCount()).toBe(0) - buildJobDisplayMock.mockClear() + vi.mocked(buildJobDisplay).mockClear() queueStoreMock.pendingTasks = [ createTask({ promptId: taskId, queueIndex: 2, mockState: 'pending' }) ] await flush() jobItems.value - expect(buildJobDisplayMock).toHaveBeenCalledWith( + expect(buildJobDisplay).toHaveBeenCalledWith( expect.anything(), 'pending', expect.objectContaining({ showAddedHint: true }) diff --git a/tests-ui/tests/composables/useLoad3d.test.ts b/tests-ui/tests/composables/useLoad3d.test.ts index a6c496cce..b5e1251c2 100644 --- a/tests-ui/tests/composables/useLoad3d.test.ts +++ b/tests-ui/tests/composables/useLoad3d.test.ts @@ -117,7 +117,9 @@ describe('useLoad3d', () => { } } - vi.mocked(Load3d).mockImplementation(() => mockLoad3d) + vi.mocked(Load3d).mockImplementation(function () { + Object.assign(this, mockLoad3d) + }) mockToastStore = { addAlert: vi.fn() @@ -289,7 +291,7 @@ describe('useLoad3d', () => { }) it('should handle initialization errors', async () => { - vi.mocked(Load3d).mockImplementationOnce(() => { + vi.mocked(Load3d).mockImplementationOnce(function () { throw new Error('Load3d creation failed') }) diff --git a/tests-ui/tests/composables/useLoad3dDrag.test.ts b/tests-ui/tests/composables/useLoad3dDrag.test.ts index 284d21c23..f35c5c736 100644 --- a/tests-ui/tests/composables/useLoad3dDrag.test.ts +++ b/tests-ui/tests/composables/useLoad3dDrag.test.ts @@ -35,7 +35,7 @@ function createMockDragEvent( describe('useLoad3dDrag', () => { let mockToastStore: any - let mockOnModelDrop: ReturnType + let mockOnModelDrop: (file: File) => void | Promise beforeEach(() => { vi.clearAllMocks() @@ -199,7 +199,7 @@ describe('useLoad3dDrag', () => { const extensions = ['.gltf', '.glb', '.obj', '.fbx', '.stl'] for (const ext of extensions) { - mockOnModelDrop.mockClear() + vi.mocked(mockOnModelDrop).mockClear() const modelFile = new File([], `model${ext}`) const event = createMockDragEvent('drop', { diff --git a/tests-ui/tests/composables/useLoad3dViewer.test.ts b/tests-ui/tests/composables/useLoad3dViewer.test.ts index 69d40d752..77a8e50a0 100644 --- a/tests-ui/tests/composables/useLoad3dViewer.test.ts +++ b/tests-ui/tests/composables/useLoad3dViewer.test.ts @@ -120,7 +120,9 @@ describe('useLoad3dViewer', () => { forceRender: vi.fn() } - vi.mocked(Load3d).mockImplementation(() => mockLoad3d) + vi.mocked(Load3d).mockImplementation(function () { + Object.assign(this, mockLoad3d) + }) mockLoad3dService = { copyLoad3dState: vi.fn().mockResolvedValue(undefined), @@ -198,7 +200,7 @@ describe('useLoad3dViewer', () => { }) it('should handle initialization errors', async () => { - vi.mocked(Load3d).mockImplementationOnce(() => { + vi.mocked(Load3d).mockImplementationOnce(function () { throw new Error('Load3d creation failed') }) @@ -312,7 +314,7 @@ describe('useLoad3dViewer', () => { }) it('should handle watcher errors gracefully', async () => { - mockLoad3d.setBackgroundColor.mockImplementationOnce(() => { + mockLoad3d.setBackgroundColor.mockImplementationOnce(function () { throw new Error('Color update failed') }) diff --git a/tests-ui/tests/lib/litegraph/src/widgets/ComboWidget.test.ts b/tests-ui/tests/lib/litegraph/src/widgets/ComboWidget.test.ts index e3b9ef6cd..c8291ff0a 100644 --- a/tests-ui/tests/lib/litegraph/src/widgets/ComboWidget.test.ts +++ b/tests-ui/tests/lib/litegraph/src/widgets/ComboWidget.test.ts @@ -10,14 +10,6 @@ const { LGraphCanvas } = await vi.importActual< >('@/lib/litegraph/src/LGraphCanvas') type LGraphCanvasType = InstanceType -type ContextMenuInstance = { - addItem?: ( - name: string, - value: string, - options: { callback?: (value: string) => void; className?: string } - ) => void -} - interface MockWidgetConfig extends Omit { options: IComboWidget['options'] } @@ -465,12 +457,12 @@ describe('ComboWidget', () => { node.size = [200, 30] let capturedCallback: ((value: string) => void) | undefined - const mockContextMenu = vi.fn((_values, options) => { - capturedCallback = options.callback - return {} as ContextMenuInstance - }) - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi + .fn() + .mockImplementation(function (_values, options) { + capturedCallback = options.callback + }) + LiteGraph.ContextMenu = mockContextMenu const setValueSpy = vi.spyOn(widget, 'setValue') widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) @@ -507,12 +499,12 @@ describe('ComboWidget', () => { node.size = [200, 30] let capturedCallback: ((value: string) => void) | undefined - const mockContextMenu = vi.fn((_values, options) => { - capturedCallback = options.callback - return {} as ContextMenuInstance - }) - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi + .fn() + .mockImplementation(function (_values, options) { + capturedCallback = options.callback + }) + LiteGraph.ContextMenu = mockContextMenu const setValueSpy = vi.spyOn(widget, 'setValue') widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) @@ -653,7 +645,7 @@ describe('ComboWidget', () => { }) it('should handle getOptionLabel error gracefully', () => { - const mockGetOptionLabel = vi.fn().mockImplementation(() => { + const mockGetOptionLabel = vi.fn().mockImplementation(function () { throw new Error('Formatting failed') }) const consoleErrorSpy = vi @@ -768,9 +760,12 @@ describe('ComboWidget', () => { node.size = [200, 30] const mockAddItem = vi.fn() - const mockContextMenu = vi.fn(() => ({ addItem: mockAddItem })) - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi + .fn() + .mockImplementation(function () { + this.addItem = mockAddItem + }) + LiteGraph.ContextMenu = mockContextMenu widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) @@ -827,12 +822,13 @@ describe('ComboWidget', () => { const mockAddItem = vi.fn() let capturedCallback: ((value: string) => void) | undefined - const mockContextMenu = vi.fn((_values, options) => { - capturedCallback = options.callback - return { addItem: mockAddItem } - }) - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi + .fn() + .mockImplementation(function (_values, options) { + capturedCallback = options.callback + this.addItem = mockAddItem + }) + LiteGraph.ContextMenu = mockContextMenu const setValueSpy = vi.spyOn(widget, 'setValue') widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) @@ -879,12 +875,13 @@ describe('ComboWidget', () => { const mockAddItem = vi.fn() let capturedCallback: ((value: string) => void) | undefined - const mockContextMenu = vi.fn((_values, options) => { - capturedCallback = options.callback - return { addItem: mockAddItem } as ContextMenuInstance - }) - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi + .fn() + .mockImplementation(function (_values, options) { + capturedCallback = options.callback + this.addItem = mockAddItem + }) + LiteGraph.ContextMenu = mockContextMenu widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) @@ -931,7 +928,7 @@ describe('ComboWidget', () => { const mockGetOptionLabel = vi .fn() .mockReturnValueOnce('Beautiful Sunset.png') - .mockImplementationOnce(() => { + .mockImplementationOnce(function () { throw new Error('Formatting failed') }) @@ -957,11 +954,12 @@ describe('ComboWidget', () => { .mockImplementation(() => {}) const mockAddItem = vi.fn() - const mockContextMenu = vi.fn(() => { - return { addItem: mockAddItem } as ContextMenuInstance - }) - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi + .fn() + .mockImplementation(function () { + this.addItem = mockAddItem + }) + LiteGraph.ContextMenu = mockContextMenu widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) @@ -1007,9 +1005,8 @@ describe('ComboWidget', () => { node.pos = [50, 50] node.size = [200, 30] - const mockContextMenu = vi.fn() - LiteGraph.ContextMenu = - mockContextMenu as unknown as typeof LiteGraph.ContextMenu + const mockContextMenu = vi.fn() + LiteGraph.ContextMenu = mockContextMenu widget.onClick({ e: mockEvent, node, canvas: mockCanvas }) diff --git a/tests-ui/tests/litegraph/core/LinkConnector.integration.test.ts b/tests-ui/tests/litegraph/core/LinkConnector.integration.test.ts index da99d9135..e026ba097 100644 --- a/tests-ui/tests/litegraph/core/LinkConnector.integration.test.ts +++ b/tests-ui/tests/litegraph/core/LinkConnector.integration.test.ts @@ -1,21 +1,21 @@ // TODO: Fix these tests after migration import { afterEach, describe, expect, vi } from 'vitest' -import type { LGraph, Reroute } from '@/lib/litegraph/src/litegraph' -import { - type CanvasPointerEvent, - LGraphNode, - LLink, - LinkConnector, - type RerouteId +import type { + LGraph, + Reroute, + CanvasPointerEvent, + RerouteId } from '@/lib/litegraph/src/litegraph' +import { LGraphNode, LLink, LinkConnector } from '@/lib/litegraph/src/litegraph' import { test as baseTest } from './fixtures/testExtensions' +import type { ConnectingLink } from '@/lib/litegraph/src/interfaces' interface TestContext { graph: LGraph connector: LinkConnector - setConnectingLinks: ReturnType + setConnectingLinks: (value: ConnectingLink[]) => void createTestNode: (id: number) => LGraphNode reroutesBeforeTest: [rerouteId: RerouteId, reroute: Reroute][] validateIntegrityNoChanges: () => void @@ -41,9 +41,8 @@ const test = baseTest.extend({ await use(reroutesComplexGraph) }, setConnectingLinks: async ( - // eslint-disable-next-line no-empty-pattern {}, - use: (mock: ReturnType) => Promise + use: (mock: (value: ConnectingLink[]) => void) => Promise ) => { const mock = vi.fn() await use(mock) diff --git a/tests-ui/tests/litegraph/core/LinkConnector.test.ts b/tests-ui/tests/litegraph/core/LinkConnector.test.ts index 52faacf56..486ee4f78 100644 --- a/tests-ui/tests/litegraph/core/LinkConnector.test.ts +++ b/tests-ui/tests/litegraph/core/LinkConnector.test.ts @@ -1,23 +1,26 @@ import { test as baseTest, describe, expect, vi } from 'vitest' -import { LinkConnector } from '@/lib/litegraph/src/litegraph' -import type { MovingInputLink } from '@/lib/litegraph/src/litegraph' -import { ToInputRenderLink } from '@/lib/litegraph/src/litegraph' -import type { LinkNetwork } from '@/lib/litegraph/src/litegraph' -import type { ISlotType } from '@/lib/litegraph/src/litegraph' +import type { + MovingInputLink, + RerouteId, + LinkNetwork, + ISlotType +} from '@/lib/litegraph/src/litegraph' import { LGraph, LGraphNode, LLink, Reroute, - type RerouteId + LinkConnector, + ToInputRenderLink, + LinkDirection } from '@/lib/litegraph/src/litegraph' -import { LinkDirection } from '@/lib/litegraph/src/litegraph' +import type { ConnectingLink } from '@/lib/litegraph/src/interfaces' interface TestContext { network: LinkNetwork & { add(node: LGraphNode): void } connector: LinkConnector - setConnectingLinks: ReturnType + setConnectingLinks: (value: ConnectingLink[]) => void createTestNode: (id: number, slotType?: ISlotType) => LGraphNode createTestLink: ( id: number, @@ -28,7 +31,6 @@ interface TestContext { } const test = baseTest.extend({ - // eslint-disable-next-line no-empty-pattern network: async ({}, use) => { const graph = new LGraph() const floatingLinks = new Map() @@ -53,9 +55,8 @@ const test = baseTest.extend({ }, setConnectingLinks: async ( - // eslint-disable-next-line no-empty-pattern {}, - use: (mock: ReturnType) => Promise + use: (mock: (value: ConnectingLink[]) => void) => Promise ) => { const mock = vi.fn() await use(mock) diff --git a/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapGraph.test.ts b/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapGraph.test.ts index 914fa707a..835f38e71 100644 --- a/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapGraph.test.ts +++ b/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapGraph.test.ts @@ -19,7 +19,7 @@ vi.mock('@/scripts/api', () => ({ describe('useMinimapGraph', () => { let mockGraph: LGraph - let onGraphChangedMock: ReturnType + let onGraphChangedMock: () => void beforeEach(() => { vi.clearAllMocks() diff --git a/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapInteraction.test.ts b/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapInteraction.test.ts index 9ea876020..342ec9bdc 100644 --- a/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapInteraction.test.ts +++ b/tests-ui/tests/renderer/extensions/minimap/composables/useMinimapInteraction.test.ts @@ -7,7 +7,7 @@ import type { MinimapCanvas } from '@/renderer/extensions/minimap/types' describe('useMinimapInteraction', () => { let mockContainer: HTMLDivElement let mockCanvas: MinimapCanvas - let centerViewOnMock: ReturnType + let centerViewOnMock: (worldX: number, worldY: number) => void beforeEach(() => { vi.clearAllMocks() @@ -29,7 +29,7 @@ describe('useMinimapInteraction', () => { setDirty: vi.fn() } as any - centerViewOnMock = vi.fn() + centerViewOnMock = vi.fn<(worldX: number, worldY: number) => void>() }) it('should initialize with default values', () => { diff --git a/tests-ui/tests/services/keybindingService.escape.test.ts b/tests-ui/tests/services/keybindingService.escape.test.ts index 20b608e8d..053b48bf4 100644 --- a/tests-ui/tests/services/keybindingService.escape.test.ts +++ b/tests-ui/tests/services/keybindingService.escape.test.ts @@ -26,15 +26,15 @@ vi.mock('@/stores/dialogStore', () => ({ describe('keybindingService - Escape key handling', () => { let keybindingService: ReturnType - let mockCommandExecute: ReturnType + let mockCommandExecute: ReturnType['execute'] beforeEach(() => { vi.clearAllMocks() setActivePinia(createPinia()) // Mock command store execute - mockCommandExecute = vi.fn() const commandStore = useCommandStore() + mockCommandExecute = vi.fn() commandStore.execute = mockCommandExecute // Reset dialog store mock to empty