diff --git a/package-lock.json b/package-lock.json index 9ec9420c2..f9cc3e4dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -445,6 +445,7 @@ "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.5.0.tgz", "integrity": "sha512-dKnk2xlAyC7rvTkpkHmu+Qy/2Zc3Vm/l8PtNyIOGDBtXPY3kThfU4ORNEp3V7SXw5XSOb+tOJaUYpfquPzL/Tg==", "dev": true, + "license": "MIT", "dependencies": { "package-manager-detector": "^0.2.5", "tinyexec": "^0.3.1" @@ -566,6 +567,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -619,6 +621,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -649,6 +652,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -908,9 +912,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz", - "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "version": "7.28.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.2.tgz", + "integrity": "sha512-KHp2IflsnGywDjBWDkR9iEqiWSpc8GIi0lgTT3mOElT0PP1tG26P4tmFI2YvAdzgq9RGyoHZQEIEdZy6Ec5xCA==", "license": "MIT", "engines": { "node": ">=6.9.0" @@ -2333,6 +2337,7 @@ "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", "dev": true, + "license": "MIT", "dependencies": { "@antfu/install-pkg": "^1.0.0", "@antfu/utils": "^8.1.0", @@ -2349,6 +2354,7 @@ "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz", "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==", "dev": true, + "license": "MIT", "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" @@ -2362,6 +2368,7 @@ "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/antfu" } @@ -2370,13 +2377,15 @@ "version": "0.2.2", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@iconify/utils/node_modules/debug": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -2394,6 +2403,7 @@ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", "dev": true, + "license": "MIT", "dependencies": { "mlly": "^1.7.4", "pkg-types": "^2.0.1", @@ -2410,19 +2420,22 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@iconify/utils/node_modules/pathe": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@iconify/utils/node_modules/pkg-types": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz", "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", "dev": true, + "license": "MIT", "dependencies": { "confbox": "^0.2.2", "exsolve": "^1.0.7", @@ -2433,7 +2446,8 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@inkjs/ui": { "version": "1.0.0", @@ -2542,6 +2556,18 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@intlify/eslint-plugin-vue-i18n/node_modules/synckit": { "version": "0.9.3", "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.3.tgz", @@ -4635,7 +4661,8 @@ "version": "7.7.0", "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.7.0.tgz", "integrity": "sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/stats.js": { "version": "0.17.3", @@ -6089,15 +6116,15 @@ } }, "node_modules/broker-factory": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.7.tgz", - "integrity": "sha512-RxbMXWq/Qvw9aLZMvuooMtVTm2/SV9JEpxpBbMuFhYAnDaZxctbJ+1b9ucHxADk/eQNqDijvWQjLVARqExAeyg==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/broker-factory/-/broker-factory-3.1.8.tgz", + "integrity": "sha512-xmVnYN0FZtynhPUmAnN+/MFRdbDi3syCuxWV7o7s78FcIN0pjDtn9mUrVqEgdjQkbfojRhlPWbYbXJkMCyddrg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", "fast-unique-numbers": "^9.0.22", "tslib": "^2.8.1", - "worker-factory": "^7.0.43" + "worker-factory": "^7.0.44" } }, "node_modules/browserslist": { @@ -6667,7 +6694,8 @@ "version": "0.1.8", "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", @@ -7841,6 +7869,18 @@ "eslint": ">=6.0.0" } }, + "node_modules/eslint-compat-utils/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/eslint-config-prettier": { "version": "10.1.2", "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.2.tgz", @@ -8389,7 +8429,8 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/extend": { "version": "3.0.2", @@ -8412,53 +8453,53 @@ } }, "node_modules/extendable-media-recorder": { - "version": "9.2.27", - "resolved": "https://registry.npmjs.org/extendable-media-recorder/-/extendable-media-recorder-9.2.27.tgz", - "integrity": "sha512-2X+Ixi1cxLek0Cj9x9atmhQ+apG+LwJpP2p3ypP8Pxau0poDnicrg7FTfPVQV5PW/3DHFm/eQ16vbgo5Yk3HGQ==", + "version": "9.2.28", + "resolved": "https://registry.npmjs.org/extendable-media-recorder/-/extendable-media-recorder-9.2.28.tgz", + "integrity": "sha512-OIltlqo8rIUOcPn5c6aZ0qCvcTpXDnBgts8eRXK1VQKCI1omYBgZZyzkJ5vrQnB8xR34+GNOFs1Z+srq6tQsdQ==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "media-encoder-host": "^9.0.20", + "media-encoder-host": "^9.0.21", "multi-buffer-data-view": "^6.0.22", - "recorder-audio-worklet": "^6.0.48", + "recorder-audio-worklet": "^6.0.49", "standardized-audio-context": "^25.3.77", "subscribable-things": "^2.1.53", "tslib": "^2.8.1" } }, "node_modules/extendable-media-recorder-wav-encoder": { - "version": "7.0.129", - "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder/-/extendable-media-recorder-wav-encoder-7.0.129.tgz", - "integrity": "sha512-/wqM2hnzvLy/iUlg/EU3JIF8MJcidy8I77Z7CCm5+CVEClDfcs6bH9PgghuisndwKTaud0Dh48RTD83gkfEjCw==", + "version": "7.0.130", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder/-/extendable-media-recorder-wav-encoder-7.0.130.tgz", + "integrity": "sha512-tVroIOesnMarsm+iIRiWUEYgmQj/lGqeMVNwJla7/tTVkX3ZPamh0NW59deILANwDIJq9lARLQmsUhyDWW57PA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "extendable-media-recorder-wav-encoder-broker": "^7.0.119", - "extendable-media-recorder-wav-encoder-worker": "^8.0.116", + "extendable-media-recorder-wav-encoder-broker": "^7.0.120", + "extendable-media-recorder-wav-encoder-worker": "^8.0.117", "tslib": "^2.8.1" } }, "node_modules/extendable-media-recorder-wav-encoder-broker": { - "version": "7.0.119", - "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-broker/-/extendable-media-recorder-wav-encoder-broker-7.0.119.tgz", - "integrity": "sha512-BLrFOnqFLpsmmNpSk/TfjNs4j6ImCSGtoryIpRlqNu5S/Avt6gRJI0s4UYvdK7h17PCi+8vaDr75blvmU1sYlw==", + "version": "7.0.120", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-broker/-/extendable-media-recorder-wav-encoder-broker-7.0.120.tgz", + "integrity": "sha512-wYRnDsHngGGR7LnEfl+tkNa7ck31KSV3PzqGLMCeKRmr02OrYxJUKyCeYf79TEe8O0EFtlBGBR9fiAj6OGDOhg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "broker-factory": "^3.1.7", - "extendable-media-recorder-wav-encoder-worker": "^8.0.116", + "broker-factory": "^3.1.8", + "extendable-media-recorder-wav-encoder-worker": "^8.0.117", "tslib": "^2.8.1" } }, "node_modules/extendable-media-recorder-wav-encoder-worker": { - "version": "8.0.116", - "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-worker/-/extendable-media-recorder-wav-encoder-worker-8.0.116.tgz", - "integrity": "sha512-bJPR0B7ZHeoqi9YoSie+UXAfEYya3efQ9eLiWuyK4KcOv+SuYQvWCoyzX5kjvb6GqIBCUnev5xulfeHRlyCwvw==", + "version": "8.0.117", + "resolved": "https://registry.npmjs.org/extendable-media-recorder-wav-encoder-worker/-/extendable-media-recorder-wav-encoder-worker-8.0.117.tgz", + "integrity": "sha512-rnlIPkMB5F2sslesLXLdJ/Z0Kes4ROtdr+Kf/a6aF3233oJWK7165krWNZP5gpKZ4Z5Lhjx4fxVB12exZvlb2g==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", "tslib": "^2.8.1", - "worker-factory": "^7.0.43" + "worker-factory": "^7.0.44" } }, "node_modules/fast-deep-equal": { @@ -9130,6 +9171,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", "dev": true, + "license": "MIT", "engines": { "node": ">=18" }, @@ -10427,6 +10469,18 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/jsonc-eslint-parser/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/jsondiffpatch": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", @@ -10985,6 +11039,7 @@ "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", "dev": true, + "license": "MIT", "dependencies": { "mlly": "^1.7.3", "pkg-types": "^1.2.1" @@ -11527,40 +11582,40 @@ "license": "MIT" }, "node_modules/media-encoder-host": { - "version": "9.0.20", - "resolved": "https://registry.npmjs.org/media-encoder-host/-/media-encoder-host-9.0.20.tgz", - "integrity": "sha512-IyEYxw6az97RNuETOAZV4YZqNAPOiF9GKIp5mVZb4HOyWd6mhkWQ34ydOzhqAWogMyc4W05kjN/VCgTtgyFmsw==", + "version": "9.0.21", + "resolved": "https://registry.npmjs.org/media-encoder-host/-/media-encoder-host-9.0.21.tgz", + "integrity": "sha512-hL41jBYmTKxGB2Z82rcR2hx4JCFBR3fmSOLR+G7EEkZn+uwSXDJTRFiYd7XWKnpjiHXy7ewf0ByEpby+2mv4Qg==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "media-encoder-host-broker": "^8.0.19", - "media-encoder-host-worker": "^10.0.19", + "media-encoder-host-broker": "^8.0.20", + "media-encoder-host-worker": "^10.0.20", "tslib": "^2.8.1" } }, "node_modules/media-encoder-host-broker": { - "version": "8.0.19", - "resolved": "https://registry.npmjs.org/media-encoder-host-broker/-/media-encoder-host-broker-8.0.19.tgz", - "integrity": "sha512-lTpsNuaZdTCdtTHsOyww7Ae0Mwv+7mFS+O4YkFYWhXwVs0rm6XbRK5jRRn5JmcX3n1eTE1lQS5RgX8qbNaIjSg==", + "version": "8.0.20", + "resolved": "https://registry.npmjs.org/media-encoder-host-broker/-/media-encoder-host-broker-8.0.20.tgz", + "integrity": "sha512-Jab7frQx8d7Js+yBeMx7FeTrxRDjIpSmdARRkHSOtWNKJv9a+Hy2/OAPXoEJl6Y15jk1eiDwJkMMF6zvlnNMEA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "broker-factory": "^3.1.7", + "broker-factory": "^3.1.8", "fast-unique-numbers": "^9.0.22", - "media-encoder-host-worker": "^10.0.19", + "media-encoder-host-worker": "^10.0.20", "tslib": "^2.8.1" } }, "node_modules/media-encoder-host-worker": { - "version": "10.0.19", - "resolved": "https://registry.npmjs.org/media-encoder-host-worker/-/media-encoder-host-worker-10.0.19.tgz", - "integrity": "sha512-I8fwc6f41peER3RFSiwDxnIHbqU7p3pc2ghQozcw9CQfL0mWEo4IjQJtyswrrlL/HO2pgVSMQbaNzE4q/0mfDQ==", + "version": "10.0.20", + "resolved": "https://registry.npmjs.org/media-encoder-host-worker/-/media-encoder-host-worker-10.0.20.tgz", + "integrity": "sha512-Ysqjwlcu4VP6FlM+atQJZFFJwvfrw603gnmhWfyBlcE5+pl7ctc0wo2dbPiBpz9pc1pY4N5N6PHHhywkqHxfnA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "extendable-media-recorder-wav-encoder-broker": "^7.0.119", + "extendable-media-recorder-wav-encoder-broker": "^7.0.120", "tslib": "^2.8.1", - "worker-factory": "^7.0.43" + "worker-factory": "^7.0.44" } }, "node_modules/media-typer": { @@ -12298,6 +12353,7 @@ "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.14.0", "pathe": "^2.0.1", @@ -12309,7 +12365,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/mri": { "version": "1.2.0", @@ -12867,6 +12924,7 @@ "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", "dev": true, + "license": "MIT", "dependencies": { "quansync": "^0.2.7" } @@ -13167,6 +13225,7 @@ "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", "dev": true, + "license": "MIT", "dependencies": { "confbox": "^0.1.8", "mlly": "^1.7.4", @@ -13177,7 +13236,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/playwright": { "version": "1.52.0", @@ -13781,7 +13841,8 @@ "type": "individual", "url": "https://github.com/sponsors/sxzz" } - ] + ], + "license": "MIT" }, "node_modules/querystringify": { "version": "2.2.0", @@ -13941,19 +14002,19 @@ } }, "node_modules/recorder-audio-worklet": { - "version": "6.0.48", - "resolved": "https://registry.npmjs.org/recorder-audio-worklet/-/recorder-audio-worklet-6.0.48.tgz", - "integrity": "sha512-PVlq/1hjCrPcUGqARg8rR30A303xDCao0jmlBTaUaKkN3Xme58RI7EQxurv8rw2eDwVrN+nrni0UoJoa5/v+zg==", + "version": "6.0.49", + "resolved": "https://registry.npmjs.org/recorder-audio-worklet/-/recorder-audio-worklet-6.0.49.tgz", + "integrity": "sha512-JLKSKh5rAWxReHqca/f3h9L8pzBF1KnB+N2oIP2jkTD37n2yupkCazKD2f20pUOGkaX6AJG998gtKNCHYJn4nw==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", - "broker-factory": "^3.1.7", + "broker-factory": "^3.1.8", "fast-unique-numbers": "^9.0.22", "recorder-audio-worklet-processor": "^5.0.35", "standardized-audio-context": "^25.3.77", "subscribable-things": "^2.1.53", "tslib": "^2.8.1", - "worker-factory": "^7.0.43" + "worker-factory": "^7.0.44" } }, "node_modules/recorder-audio-worklet-processor": { @@ -14559,6 +14620,7 @@ "version": "7.7.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -15333,7 +15395,8 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tinypool": { "version": "1.0.1", @@ -16269,6 +16332,7 @@ "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-2.3.5.tgz", "integrity": "sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.14.1", "picomatch": "^4.0.2", @@ -16283,6 +16347,7 @@ "resolved": "https://registry.npmjs.org/unplugin-icons/-/unplugin-icons-0.22.0.tgz", "integrity": "sha512-CP+iZq5U7doOifer5bcM0jQ9t3Is7EGybIYt3myVxceI8Zuk8EZEpe1NPtJvh7iqMs1VdbK0L41t9+um9VuuLw==", "dev": true, + "license": "MIT", "dependencies": { "@antfu/install-pkg": "^0.5.0", "@antfu/utils": "^0.7.10", @@ -16329,6 +16394,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -16346,6 +16412,7 @@ "resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-0.28.0.tgz", "integrity": "sha512-jiTGtJ3JsRFBjgvyilfrX7yUoGKScFgbdNw+6p6kEXU+Spf/rhxzgvdfuMcvhCcLmflB/dY3pGQshYBVGOUx7Q==", "dev": true, + "license": "MIT", "dependencies": { "@antfu/utils": "^0.7.10", "@rollup/pluginutils": "^5.1.4", @@ -16392,6 +16459,7 @@ "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz", "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.3" }, @@ -16424,6 +16492,7 @@ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -17435,7 +17504,8 @@ "version": "0.6.2", "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/websocket-driver": { "version": "0.7.4", @@ -17615,9 +17685,9 @@ } }, "node_modules/worker-factory": { - "version": "7.0.43", - "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.43.tgz", - "integrity": "sha512-SACVoj3gWKtMVyT9N+VD11Pd/Xe58+ZFfp8b7y/PagOvj3i8lU3Uyj+Lj7WYTmSBvNLC0JFaQkx44E6DhH5+WA==", + "version": "7.0.44", + "resolved": "https://registry.npmjs.org/worker-factory/-/worker-factory-7.0.44.tgz", + "integrity": "sha512-08AuUfWi+KeZI+KC7nU4pU/9tDeAFvE5NSWk+K9nIfuQc6UlOsZtjjeGVYVEn+DEchyXNJ5i10HCn0xRzFXEQA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.27.6", @@ -18028,4 +18098,4 @@ } } } -} +} \ No newline at end of file diff --git a/src/App.vue b/src/App.vue index 85b36240c..1a4068a27 100644 --- a/src/App.vue +++ b/src/App.vue @@ -15,12 +15,14 @@ import ProgressSpinner from 'primevue/progressspinner' import { computed, onMounted } from 'vue' import GlobalDialog from '@/components/dialog/GlobalDialog.vue' +import { useConflictDetection } from '@/composables/useConflictDetection' import config from '@/config' import { useWorkspaceStore } from '@/stores/workspaceStore' import { electronAPI, isElectron } from './utils/envUtil' const workspaceStore = useWorkspaceStore() +const conflictDetection = useConflictDetection() const isLoading = computed(() => workspaceStore.spinner) const handleKey = (e: KeyboardEvent) => { workspaceStore.shiftDown = e.shiftKey @@ -47,5 +49,9 @@ onMounted(() => { if (isElectron()) { document.addEventListener('contextmenu', showContextMenu) } + + // Initialize conflict detection in background + // This runs async and doesn't block UI setup + void conflictDetection.initializeConflictDetection() }) diff --git a/src/components/dialog/GlobalDialog.vue b/src/components/dialog/GlobalDialog.vue index bdc3a28bb..0b37462c5 100644 --- a/src/components/dialog/GlobalDialog.vue +++ b/src/components/dialog/GlobalDialog.vue @@ -27,7 +27,7 @@ /> diff --git a/src/components/dialog/content/manager/ManagerDialogContent.vue b/src/components/dialog/content/manager/ManagerDialogContent.vue index 3ef98806b..7ad6c860f 100644 --- a/src/components/dialog/content/manager/ManagerDialogContent.vue +++ b/src/components/dialog/content/manager/ManagerDialogContent.vue @@ -26,6 +26,35 @@ }" >
+ +
+ +
+

+ {{ $t('manager.conflicts.warningBanner.title') }} +

+

+ {{ $t('manager.conflicts.warningBanner.message') }} +

+

+ {{ $t('manager.conflicts.warningBanner.button') }} +

+
+ +
@@ -101,7 +133,8 @@ import { onMounted, onUnmounted, ref, - watch + watch, + watchEffect } from 'vue' import { useI18n } from 'vue-i18n' @@ -119,6 +152,7 @@ import { useManagerStatePersistence } from '@/composables/manager/useManagerStat import { useInstalledPacks } from '@/composables/nodePack/useInstalledPacks' import { usePackUpdateStatus } from '@/composables/nodePack/usePackUpdateStatus' import { useWorkflowPacks } from '@/composables/nodePack/useWorkflowPacks' +import { useConflictAcknowledgment } from '@/composables/useConflictAcknowledgment' import { useRegistrySearch } from '@/composables/useRegistrySearch' import { useComfyManagerStore } from '@/stores/comfyManagerStore' import { useComfyRegistryStore } from '@/stores/comfyRegistryStore' @@ -133,6 +167,7 @@ const { initialTab } = defineProps<{ const { t } = useI18n() const comfyManagerStore = useComfyManagerStore() const { getPackById } = useComfyRegistryStore() +const conflictAcknowledgment = useConflictAcknowledgment() const persistedState = useManagerStatePersistence() const initialState = persistedState.loadStoredState() @@ -149,6 +184,13 @@ const { toggle: toggleSideNav } = useResponsiveCollapse() +// Use conflict acknowledgment state from composable +const { + shouldShowManagerBanner, + dismissWarningBanner, + dismissRedDotNotification +} = conflictAcknowledgment + const tabs = ref([ { id: ManagerTab.All, label: t('g.all'), icon: 'pi-list' }, { id: ManagerTab.Installed, label: t('g.installed'), icon: 'pi-box' }, @@ -312,6 +354,13 @@ watch([isAllTab, searchResults], () => { displayPacks.value = searchResults.value }) +const onClickWarningLink = () => { + window.open( + 'https://docs.comfy.org/troubleshooting/custom-node-issues', + '_blank' + ) +} + const onResultsChange = () => { switch (selectedTab.value?.id) { case ManagerTab.Installed: @@ -472,6 +521,10 @@ watch([searchQuery, selectedTab], () => { } }) +watchEffect(() => { + dismissRedDotNotification() +}) + onBeforeUnmount(() => { persistedState.persistState({ selectedTabId: selectedTab.value?.id, diff --git a/src/components/dialog/content/manager/NodeConflictDialogContent.vue b/src/components/dialog/content/manager/NodeConflictDialogContent.vue new file mode 100644 index 000000000..ae4f08c70 --- /dev/null +++ b/src/components/dialog/content/manager/NodeConflictDialogContent.vue @@ -0,0 +1,231 @@ + + + + diff --git a/src/components/dialog/content/manager/NodeConflictFooter.vue b/src/components/dialog/content/manager/NodeConflictFooter.vue new file mode 100644 index 000000000..c76f77908 --- /dev/null +++ b/src/components/dialog/content/manager/NodeConflictFooter.vue @@ -0,0 +1,54 @@ + + + diff --git a/src/components/dialog/content/manager/NodeConflictHeader.vue b/src/components/dialog/content/manager/NodeConflictHeader.vue new file mode 100644 index 000000000..70e30d129 --- /dev/null +++ b/src/components/dialog/content/manager/NodeConflictHeader.vue @@ -0,0 +1,12 @@ + diff --git a/src/components/dialog/content/manager/PackStatusMessage.vue b/src/components/dialog/content/manager/PackStatusMessage.vue index b31f880e9..ab2b38a45 100644 --- a/src/components/dialog/content/manager/PackStatusMessage.vue +++ b/src/components/dialog/content/manager/PackStatusMessage.vue @@ -17,9 +17,10 @@ diff --git a/src/components/dialog/content/manager/PackVersionBadge.test.ts b/src/components/dialog/content/manager/PackVersionBadge.test.ts index 9bd897986..71d3383d8 100644 --- a/src/components/dialog/content/manager/PackVersionBadge.test.ts +++ b/src/components/dialog/content/manager/PackVersionBadge.test.ts @@ -6,11 +6,18 @@ import { nextTick } from 'vue' import { createI18n } from 'vue-i18n' import enMessages from '@/locales/en/main.json' -import { SelectedVersion } from '@/types/comfyManagerTypes' import PackVersionBadge from './PackVersionBadge.vue' import PackVersionSelectorPopover from './PackVersionSelectorPopover.vue' +// Mock config to prevent __COMFYUI_FRONTEND_VERSION__ error +vi.mock('@/config', () => ({ + default: { + app_title: 'ComfyUI', + app_version: '1.0.0' + } +})) + const mockNodePack = { id: 'test-pack', name: 'Test Pack', @@ -120,7 +127,7 @@ describe('PackVersionBadge', () => { const badge = wrapper.find('[role="button"]') expect(badge.exists()).toBe(true) - expect(badge.find('span').text()).toBe(SelectedVersion.NIGHTLY) + expect(badge.find('span').text()).toBe('nightly') }) it('falls back to NIGHTLY when nodePack.id is missing', () => { @@ -134,7 +141,7 @@ describe('PackVersionBadge', () => { const badge = wrapper.find('[role="button"]') expect(badge.exists()).toBe(true) - expect(badge.find('span').text()).toBe(SelectedVersion.NIGHTLY) + expect(badge.find('span').text()).toBe('nightly') }) it('toggles the popover when button is clicked', async () => { diff --git a/src/components/dialog/content/manager/PackVersionBadge.vue b/src/components/dialog/content/manager/PackVersionBadge.vue index 5a6ee32e2..d43134eeb 100644 --- a/src/components/dialog/content/manager/PackVersionBadge.vue +++ b/src/components/dialog/content/manager/PackVersionBadge.vue @@ -1,8 +1,8 @@