Show FFmpeg logs after error, Improve icons in dark mode, Improve "Convert Selected" button

This commit is contained in:
2025-08-15 09:48:48 +07:00
parent 7ab5bf6bf6
commit 74f5257828
20 changed files with 449 additions and 310 deletions
+1 -4
View File
@@ -13,10 +13,7 @@
"app.*", "app.*",
"os.*", "os.*",
"window.create", "window.create",
"window.setMainMenu", "filesystem.*",
"filesystem.getPathParts",
"filesystem.createDirectory",
"filesystem.getStats",
"storage.*", "storage.*",
"debug.log" "debug.log"
], ],
+3 -3
View File
@@ -12,13 +12,13 @@
"@neutralinojs/lib": "^6.2.0", "@neutralinojs/lib": "^6.2.0",
"@solidjs/router": "^0.15.3", "@solidjs/router": "^0.15.3",
"color-convert": "^3.1.0", "color-convert": "^3.1.0",
"solid-js": "^1.9.7" "solid-js": "^1.9.9"
}, },
"devDependencies": { "devDependencies": {
"prettier": "3.6.2", "prettier": "3.6.2",
"typescript": "~5.8.3", "typescript": "~5.8.3",
"vite": "^7.0.6", "vite": "^7.1.2",
"vite-plugin-solid": "^2.11.7" "vite-plugin-solid": "^2.11.8"
}, },
"packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad" "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad"
} }
+268 -262
View File
@@ -13,13 +13,13 @@ importers:
version: 6.2.0 version: 6.2.0
'@solidjs/router': '@solidjs/router':
specifier: ^0.15.3 specifier: ^0.15.3
version: 0.15.3(solid-js@1.9.7) version: 0.15.3(solid-js@1.9.9)
color-convert: color-convert:
specifier: ^3.1.0 specifier: ^3.1.0
version: 3.1.0 version: 3.1.0
solid-js: solid-js:
specifier: ^1.9.7 specifier: ^1.9.9
version: 1.9.7 version: 1.9.9
devDependencies: devDependencies:
prettier: prettier:
specifier: 3.6.2 specifier: 3.6.2
@@ -28,11 +28,11 @@ importers:
specifier: ~5.8.3 specifier: ~5.8.3
version: 5.8.3 version: 5.8.3
vite: vite:
specifier: ^7.0.6 specifier: ^7.1.2
version: 7.0.6 version: 7.1.2
vite-plugin-solid: vite-plugin-solid:
specifier: ^2.11.7 specifier: ^2.11.8
version: 2.11.7(solid-js@1.9.7)(vite@7.0.6) version: 2.11.8(solid-js@1.9.9)(vite@7.1.2)
packages: packages:
@@ -121,275 +121,275 @@ packages:
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
engines: {node: '>=6.9.0'} engines: {node: '>=6.9.0'}
'@esbuild/aix-ppc64@0.25.8': '@esbuild/aix-ppc64@0.25.9':
resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [ppc64] cpu: [ppc64]
os: [aix] os: [aix]
'@esbuild/android-arm64@0.25.8': '@esbuild/android-arm64@0.25.9':
resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@esbuild/android-arm@0.25.8': '@esbuild/android-arm@0.25.9':
resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@esbuild/android-x64@0.25.8': '@esbuild/android-x64@0.25.9':
resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [android] os: [android]
'@esbuild/darwin-arm64@0.25.8': '@esbuild/darwin-arm64@0.25.9':
resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@esbuild/darwin-x64@0.25.8': '@esbuild/darwin-x64@0.25.9':
resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@esbuild/freebsd-arm64@0.25.8': '@esbuild/freebsd-arm64@0.25.9':
resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@esbuild/freebsd-x64@0.25.8': '@esbuild/freebsd-x64@0.25.9':
resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@esbuild/linux-arm64@0.25.8': '@esbuild/linux-arm64@0.25.9':
resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@esbuild/linux-arm@0.25.8': '@esbuild/linux-arm@0.25.9':
resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@esbuild/linux-ia32@0.25.8': '@esbuild/linux-ia32@0.25.9':
resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [ia32] cpu: [ia32]
os: [linux] os: [linux]
'@esbuild/linux-loong64@0.25.8': '@esbuild/linux-loong64@0.25.9':
resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@esbuild/linux-mips64el@0.25.8': '@esbuild/linux-mips64el@0.25.9':
resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [mips64el] cpu: [mips64el]
os: [linux] os: [linux]
'@esbuild/linux-ppc64@0.25.8': '@esbuild/linux-ppc64@0.25.9':
resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@esbuild/linux-riscv64@0.25.8': '@esbuild/linux-riscv64@0.25.9':
resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@esbuild/linux-s390x@0.25.8': '@esbuild/linux-s390x@0.25.9':
resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@esbuild/linux-x64@0.25.8': '@esbuild/linux-x64@0.25.9':
resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@esbuild/netbsd-arm64@0.25.8': '@esbuild/netbsd-arm64@0.25.9':
resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [netbsd] os: [netbsd]
'@esbuild/netbsd-x64@0.25.8': '@esbuild/netbsd-x64@0.25.9':
resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [netbsd] os: [netbsd]
'@esbuild/openbsd-arm64@0.25.8': '@esbuild/openbsd-arm64@0.25.9':
resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [openbsd] os: [openbsd]
'@esbuild/openbsd-x64@0.25.8': '@esbuild/openbsd-x64@0.25.9':
resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [openbsd] os: [openbsd]
'@esbuild/openharmony-arm64@0.25.8': '@esbuild/openharmony-arm64@0.25.9':
resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [openharmony] os: [openharmony]
'@esbuild/sunos-x64@0.25.8': '@esbuild/sunos-x64@0.25.9':
resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [sunos] os: [sunos]
'@esbuild/win32-arm64@0.25.8': '@esbuild/win32-arm64@0.25.9':
resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@esbuild/win32-ia32@0.25.8': '@esbuild/win32-ia32@0.25.9':
resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@esbuild/win32-x64@0.25.8': '@esbuild/win32-x64@0.25.9':
resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==}
engines: {node: '>=18'} engines: {node: '>=18'}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
'@jridgewell/gen-mapping@0.3.12': '@jridgewell/gen-mapping@0.3.13':
resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
'@jridgewell/resolve-uri@3.1.2': '@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
'@jridgewell/sourcemap-codec@1.5.4': '@jridgewell/sourcemap-codec@1.5.5':
resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
'@jridgewell/trace-mapping@0.3.29': '@jridgewell/trace-mapping@0.3.30':
resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==}
'@neutralinojs/lib@6.2.0': '@neutralinojs/lib@6.2.0':
resolution: {integrity: sha512-BpnZjaSWKLJMSSLwfrhiBwgEwuSR5fZsroFH0Tfx6aTCx9AXbKkIQ5wj/JKWH7jyRet7K/+KYzbK8C+UKOgecw==} resolution: {integrity: sha512-BpnZjaSWKLJMSSLwfrhiBwgEwuSR5fZsroFH0Tfx6aTCx9AXbKkIQ5wj/JKWH7jyRet7K/+KYzbK8C+UKOgecw==}
'@rollup/rollup-android-arm-eabi@4.46.0': '@rollup/rollup-android-arm-eabi@4.46.2':
resolution: {integrity: sha512-9f3nSTFI2ivfxc7/tHBHcJ8pRnp8ROrELvsVprlQPVvcZ+j5zztYd+PTJGpyIOAdTvNwNrpCXswKSeoQcyGjMQ==} resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==}
cpu: [arm] cpu: [arm]
os: [android] os: [android]
'@rollup/rollup-android-arm64@4.46.0': '@rollup/rollup-android-arm64@4.46.2':
resolution: {integrity: sha512-tFZSEhqJ8Yrpe50TzOdeoYi72gi/jsnT7y8Qrozf3cNu28WX+s6I3XzEPUAqoaT9SAS8Xz9AzGTFlxxCH/w20w==} resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==}
cpu: [arm64] cpu: [arm64]
os: [android] os: [android]
'@rollup/rollup-darwin-arm64@4.46.0': '@rollup/rollup-darwin-arm64@4.46.2':
resolution: {integrity: sha512-+DikIIs+p6yU2hF51UaWG8BnHbq90X0QIOt5zqSKSZxY+G3qqdLih214e9InJal21af2PuuxkDectetGfbVPJw==} resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==}
cpu: [arm64] cpu: [arm64]
os: [darwin] os: [darwin]
'@rollup/rollup-darwin-x64@4.46.0': '@rollup/rollup-darwin-x64@4.46.2':
resolution: {integrity: sha512-5a+NofhdEB/WimSlFMskbFQn1vqz1FWryYpA99trmZGO6qEmiS0IsX6w4B3d91U878Q2ZQdiaFF1gxX4P147og==} resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==}
cpu: [x64] cpu: [x64]
os: [darwin] os: [darwin]
'@rollup/rollup-freebsd-arm64@4.46.0': '@rollup/rollup-freebsd-arm64@4.46.2':
resolution: {integrity: sha512-igr/RlKPS3OCy4jD3XBmAmo3UAcNZkJSubRsw1JeM8bAbwf15k/3eMZXD91bnjheijJiOJcga3kfCLKjV8IXNg==} resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==}
cpu: [arm64] cpu: [arm64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-freebsd-x64@4.46.0': '@rollup/rollup-freebsd-x64@4.46.2':
resolution: {integrity: sha512-MdigWzPSHlQzB1xZ+MdFDWTAH+kcn7UxjEBoOKuaso7z1DRlnAnrknB1mTtNOQ+GdPI8xgExAGwHeqQjntR0Cg==} resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==}
cpu: [x64] cpu: [x64]
os: [freebsd] os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.46.0': '@rollup/rollup-linux-arm-gnueabihf@4.46.2':
resolution: {integrity: sha512-dmZseE0ZwA/4yy1+BwFrDqFTjjNg24GO9xSrb1weVbt6AFkhp5pz1gVS7IMtfIvoWy8yp6q/zN0bKnefRUImvQ==} resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm-musleabihf@4.46.0': '@rollup/rollup-linux-arm-musleabihf@4.46.2':
resolution: {integrity: sha512-fzhfn6p9Cfm3W8UrWKIa4l7Wfjs/KGdgaswMBBE3KY3Ta43jg2XsPrAtfezHpsRk0Nx+TFuS3hZk/To2N5kFPQ==} resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==}
cpu: [arm] cpu: [arm]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-gnu@4.46.0': '@rollup/rollup-linux-arm64-gnu@4.46.2':
resolution: {integrity: sha512-vVDD+iPDPmJQ5nAQ5Tifq3ywdv60FartglFI8VOCK+hcU9aoG0qlQTsDJP97O5yiTaTqlneZWoARMcVC5nyUoQ==} resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-arm64-musl@4.46.0': '@rollup/rollup-linux-arm64-musl@4.46.2':
resolution: {integrity: sha512-0d0jx08fzDHCzXqrtCMEEyxKU0SvJrWmUjUDE2/KDQ2UDJql0tfiwYvEx1oHELClKO8CNdE+AGJj+RqXscZpdQ==} resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==}
cpu: [arm64] cpu: [arm64]
os: [linux] os: [linux]
'@rollup/rollup-linux-loongarch64-gnu@4.46.0': '@rollup/rollup-linux-loongarch64-gnu@4.46.2':
resolution: {integrity: sha512-XBYu9oW9eKJadWn8M7hkTZsD4yG+RrsTrVEgyKwb4L72cpJjRbRboTG9Lg9fec8MxJp/cfTHAocg4mnismQR8A==} resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==}
cpu: [loong64] cpu: [loong64]
os: [linux] os: [linux]
'@rollup/rollup-linux-ppc64-gnu@4.46.0': '@rollup/rollup-linux-ppc64-gnu@4.46.2':
resolution: {integrity: sha512-wJaRvcT17PoOK6Ggcfo3nouFlybHvARBS4jzT0PC/lg17fIJHcDS2fZz3sD+iA4nRlho2zE6OGbU0HvwATdokQ==} resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==}
cpu: [ppc64] cpu: [ppc64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-gnu@4.46.0': '@rollup/rollup-linux-riscv64-gnu@4.46.2':
resolution: {integrity: sha512-GZ5bkMFteAGkcmh8x0Ok4LSa+L62Ez0tMsHPX6JtR0wl4Xc3bQcrFHDiR5DGLEDFtGrXih4Nd/UDaFqs968/wA==} resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-riscv64-musl@4.46.0': '@rollup/rollup-linux-riscv64-musl@4.46.2':
resolution: {integrity: sha512-7CjPw6FflFsVOUfWOrVrREiV3IYXG4RzZ1ZQUaT3BtSK8YXN6x286o+sruPZJESIaPebYuFowmg54ZdrkVBYog==} resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==}
cpu: [riscv64] cpu: [riscv64]
os: [linux] os: [linux]
'@rollup/rollup-linux-s390x-gnu@4.46.0': '@rollup/rollup-linux-s390x-gnu@4.46.2':
resolution: {integrity: sha512-nmvnl0ZiuysltcB/cKjUh40Rx4FbSyueERDsl2FLvLYr6pCgSsvGr3SocUT84svSpmloS7f1DRWqtRha74Gi1w==} resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==}
cpu: [s390x] cpu: [s390x]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-gnu@4.46.0': '@rollup/rollup-linux-x64-gnu@4.46.2':
resolution: {integrity: sha512-Cv+moII5C8RM6gZbR3cb21o6rquVDZrN2o81maROg1LFzBz2dZUwIQSxFA8GtGZ/F2KtsqQ2z3eFPBb6akvQNg==} resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-linux-x64-musl@4.46.0': '@rollup/rollup-linux-x64-musl@4.46.2':
resolution: {integrity: sha512-PHcMG8DZTM9RCIjp8QIfN0VYtX0TtBPnWOTRurFhoCDoi9zptUZL2k7pCs+5rgut7JAiUsYy+huyhVKPcmxoog==} resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==}
cpu: [x64] cpu: [x64]
os: [linux] os: [linux]
'@rollup/rollup-win32-arm64-msvc@4.46.0': '@rollup/rollup-win32-arm64-msvc@4.46.2':
resolution: {integrity: sha512-1SI/Rd47e8aQJeFWMDg16ET+fjvCcD/CzeaRmIEPmb05hx+3cCcwIF4ebUag4yTt/D1peE+Mgp0+Po3M358cAA==} resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==}
cpu: [arm64] cpu: [arm64]
os: [win32] os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.46.0': '@rollup/rollup-win32-ia32-msvc@4.46.2':
resolution: {integrity: sha512-JwOCYxmumFDfDhx4kNyz6kTVK3gWzBIvVdMNzQMRDubcoGRDniOOmo6DDNP42qwZx3Bp9/6vWJ+kNzNqXoHmeA==} resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==}
cpu: [ia32] cpu: [ia32]
os: [win32] os: [win32]
'@rollup/rollup-win32-x64-msvc@4.46.0': '@rollup/rollup-win32-x64-msvc@4.46.2':
resolution: {integrity: sha512-IPMIfrfkG1GaEXi+JSsQEx8x9b4b+hRZXO7KYc2pKio3zO2/VDXDs6B9Ts/nnO+25Fk1tdAVtUn60HKKPPzDig==} resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==}
cpu: [x64] cpu: [x64]
os: [win32] os: [win32]
@@ -407,29 +407,33 @@ packages:
'@types/babel__template@7.4.4': '@types/babel__template@7.4.4':
resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
'@types/babel__traverse@7.20.7': '@types/babel__traverse@7.28.0':
resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
'@types/estree@1.0.8': '@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
babel-plugin-jsx-dom-expressions@0.39.8: babel-plugin-jsx-dom-expressions@0.40.1:
resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==}
peerDependencies: peerDependencies:
'@babel/core': ^7.20.12 '@babel/core': ^7.20.12
babel-preset-solid@1.9.6: babel-preset-solid@1.9.9:
resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==}
peerDependencies: peerDependencies:
'@babel/core': ^7.0.0 '@babel/core': ^7.0.0
solid-js: ^1.9.8
peerDependenciesMeta:
solid-js:
optional: true
browserslist@4.25.1: browserslist@4.25.2:
resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true hasBin: true
caniuse-lite@1.0.30001727: caniuse-lite@1.0.30001734:
resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==}
color-convert@3.1.0: color-convert@3.1.0:
resolution: {integrity: sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==} resolution: {integrity: sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==}
@@ -454,15 +458,15 @@ packages:
supports-color: supports-color:
optional: true optional: true
electron-to-chromium@1.5.191: electron-to-chromium@1.5.200:
resolution: {integrity: sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==} resolution: {integrity: sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==}
entities@6.0.1: entities@6.0.1:
resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
esbuild@0.25.8: esbuild@0.25.9:
resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==}
engines: {node: '>=18'} engines: {node: '>=18'}
hasBin: true hasBin: true
@@ -544,8 +548,8 @@ packages:
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
rollup@4.46.0: rollup@4.46.2:
resolution: {integrity: sha512-ONmkT3Ud3IfW15nl7l4qAZko5/2iZ5ALVBDh02ZSZ5IGVLJSYkRcRa3iB58VyEIyoofs9m2xdVrm+lTi97+3pw==} resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'} engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true hasBin: true
@@ -563,8 +567,8 @@ packages:
resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==}
engines: {node: '>=10'} engines: {node: '>=10'}
solid-js@1.9.7: solid-js@1.9.9:
resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==}
solid-refresh@0.6.3: solid-refresh@0.6.3:
resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==}
@@ -593,18 +597,18 @@ packages:
validate-html-nesting@1.2.3: validate-html-nesting@1.2.3:
resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==}
vite-plugin-solid@2.11.7: vite-plugin-solid@2.11.8:
resolution: {integrity: sha512-5TgK1RnE449g0Ryxb9BXqem89RSy7fE8XGVCo+Gw84IHgPuPVP7nYNP6WBVAaY/0xw+OqfdQee+kusL0y3XYNg==} resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==}
peerDependencies: peerDependencies:
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
solid-js: ^1.7.2 solid-js: ^1.7.2
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0
peerDependenciesMeta: peerDependenciesMeta:
'@testing-library/jest-dom': '@testing-library/jest-dom':
optional: true optional: true
vite@7.0.6: vite@7.1.2:
resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==}
engines: {node: ^20.19.0 || >=22.12.0} engines: {node: ^20.19.0 || >=22.12.0}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -658,8 +662,8 @@ snapshots:
'@ampproject/remapping@2.3.0': '@ampproject/remapping@2.3.0':
dependencies: dependencies:
'@jridgewell/gen-mapping': 0.3.12 '@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.29 '@jridgewell/trace-mapping': 0.3.30
'@babel/code-frame@7.27.1': '@babel/code-frame@7.27.1':
dependencies: dependencies:
@@ -693,15 +697,15 @@ snapshots:
dependencies: dependencies:
'@babel/parser': 7.28.0 '@babel/parser': 7.28.0
'@babel/types': 7.28.2 '@babel/types': 7.28.2
'@jridgewell/gen-mapping': 0.3.12 '@jridgewell/gen-mapping': 0.3.13
'@jridgewell/trace-mapping': 0.3.29 '@jridgewell/trace-mapping': 0.3.30
jsesc: 3.1.0 jsesc: 3.1.0
'@babel/helper-compilation-targets@7.27.2': '@babel/helper-compilation-targets@7.27.2':
dependencies: dependencies:
'@babel/compat-data': 7.28.0 '@babel/compat-data': 7.28.0
'@babel/helper-validator-option': 7.27.1 '@babel/helper-validator-option': 7.27.1
browserslist: 4.25.1 browserslist: 4.25.2
lru-cache: 5.1.1 lru-cache: 5.1.1
semver: 6.3.1 semver: 6.3.1
@@ -772,163 +776,163 @@ snapshots:
'@babel/helper-string-parser': 7.27.1 '@babel/helper-string-parser': 7.27.1
'@babel/helper-validator-identifier': 7.27.1 '@babel/helper-validator-identifier': 7.27.1
'@esbuild/aix-ppc64@0.25.8': '@esbuild/aix-ppc64@0.25.9':
optional: true optional: true
'@esbuild/android-arm64@0.25.8': '@esbuild/android-arm64@0.25.9':
optional: true optional: true
'@esbuild/android-arm@0.25.8': '@esbuild/android-arm@0.25.9':
optional: true optional: true
'@esbuild/android-x64@0.25.8': '@esbuild/android-x64@0.25.9':
optional: true optional: true
'@esbuild/darwin-arm64@0.25.8': '@esbuild/darwin-arm64@0.25.9':
optional: true optional: true
'@esbuild/darwin-x64@0.25.8': '@esbuild/darwin-x64@0.25.9':
optional: true optional: true
'@esbuild/freebsd-arm64@0.25.8': '@esbuild/freebsd-arm64@0.25.9':
optional: true optional: true
'@esbuild/freebsd-x64@0.25.8': '@esbuild/freebsd-x64@0.25.9':
optional: true optional: true
'@esbuild/linux-arm64@0.25.8': '@esbuild/linux-arm64@0.25.9':
optional: true optional: true
'@esbuild/linux-arm@0.25.8': '@esbuild/linux-arm@0.25.9':
optional: true optional: true
'@esbuild/linux-ia32@0.25.8': '@esbuild/linux-ia32@0.25.9':
optional: true optional: true
'@esbuild/linux-loong64@0.25.8': '@esbuild/linux-loong64@0.25.9':
optional: true optional: true
'@esbuild/linux-mips64el@0.25.8': '@esbuild/linux-mips64el@0.25.9':
optional: true optional: true
'@esbuild/linux-ppc64@0.25.8': '@esbuild/linux-ppc64@0.25.9':
optional: true optional: true
'@esbuild/linux-riscv64@0.25.8': '@esbuild/linux-riscv64@0.25.9':
optional: true optional: true
'@esbuild/linux-s390x@0.25.8': '@esbuild/linux-s390x@0.25.9':
optional: true optional: true
'@esbuild/linux-x64@0.25.8': '@esbuild/linux-x64@0.25.9':
optional: true optional: true
'@esbuild/netbsd-arm64@0.25.8': '@esbuild/netbsd-arm64@0.25.9':
optional: true optional: true
'@esbuild/netbsd-x64@0.25.8': '@esbuild/netbsd-x64@0.25.9':
optional: true optional: true
'@esbuild/openbsd-arm64@0.25.8': '@esbuild/openbsd-arm64@0.25.9':
optional: true optional: true
'@esbuild/openbsd-x64@0.25.8': '@esbuild/openbsd-x64@0.25.9':
optional: true optional: true
'@esbuild/openharmony-arm64@0.25.8': '@esbuild/openharmony-arm64@0.25.9':
optional: true optional: true
'@esbuild/sunos-x64@0.25.8': '@esbuild/sunos-x64@0.25.9':
optional: true optional: true
'@esbuild/win32-arm64@0.25.8': '@esbuild/win32-arm64@0.25.9':
optional: true optional: true
'@esbuild/win32-ia32@0.25.8': '@esbuild/win32-ia32@0.25.9':
optional: true optional: true
'@esbuild/win32-x64@0.25.8': '@esbuild/win32-x64@0.25.9':
optional: true optional: true
'@jridgewell/gen-mapping@0.3.12': '@jridgewell/gen-mapping@0.3.13':
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/sourcemap-codec': 1.5.5
'@jridgewell/trace-mapping': 0.3.29 '@jridgewell/trace-mapping': 0.3.30
'@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/resolve-uri@3.1.2': {}
'@jridgewell/sourcemap-codec@1.5.4': {} '@jridgewell/sourcemap-codec@1.5.5': {}
'@jridgewell/trace-mapping@0.3.29': '@jridgewell/trace-mapping@0.3.30':
dependencies: dependencies:
'@jridgewell/resolve-uri': 3.1.2 '@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.4 '@jridgewell/sourcemap-codec': 1.5.5
'@neutralinojs/lib@6.2.0': {} '@neutralinojs/lib@6.2.0': {}
'@rollup/rollup-android-arm-eabi@4.46.0': '@rollup/rollup-android-arm-eabi@4.46.2':
optional: true optional: true
'@rollup/rollup-android-arm64@4.46.0': '@rollup/rollup-android-arm64@4.46.2':
optional: true optional: true
'@rollup/rollup-darwin-arm64@4.46.0': '@rollup/rollup-darwin-arm64@4.46.2':
optional: true optional: true
'@rollup/rollup-darwin-x64@4.46.0': '@rollup/rollup-darwin-x64@4.46.2':
optional: true optional: true
'@rollup/rollup-freebsd-arm64@4.46.0': '@rollup/rollup-freebsd-arm64@4.46.2':
optional: true optional: true
'@rollup/rollup-freebsd-x64@4.46.0': '@rollup/rollup-freebsd-x64@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.46.0': '@rollup/rollup-linux-arm-gnueabihf@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-arm-musleabihf@4.46.0': '@rollup/rollup-linux-arm-musleabihf@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-arm64-gnu@4.46.0': '@rollup/rollup-linux-arm64-gnu@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-arm64-musl@4.46.0': '@rollup/rollup-linux-arm64-musl@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.46.0': '@rollup/rollup-linux-loongarch64-gnu@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-ppc64-gnu@4.46.0': '@rollup/rollup-linux-ppc64-gnu@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-riscv64-gnu@4.46.0': '@rollup/rollup-linux-riscv64-gnu@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-riscv64-musl@4.46.0': '@rollup/rollup-linux-riscv64-musl@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-s390x-gnu@4.46.0': '@rollup/rollup-linux-s390x-gnu@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-x64-gnu@4.46.0': '@rollup/rollup-linux-x64-gnu@4.46.2':
optional: true optional: true
'@rollup/rollup-linux-x64-musl@4.46.0': '@rollup/rollup-linux-x64-musl@4.46.2':
optional: true optional: true
'@rollup/rollup-win32-arm64-msvc@4.46.0': '@rollup/rollup-win32-arm64-msvc@4.46.2':
optional: true optional: true
'@rollup/rollup-win32-ia32-msvc@4.46.0': '@rollup/rollup-win32-ia32-msvc@4.46.2':
optional: true optional: true
'@rollup/rollup-win32-x64-msvc@4.46.0': '@rollup/rollup-win32-x64-msvc@4.46.2':
optional: true optional: true
'@solidjs/router@0.15.3(solid-js@1.9.7)': '@solidjs/router@0.15.3(solid-js@1.9.9)':
dependencies: dependencies:
solid-js: 1.9.7 solid-js: 1.9.9
'@types/babel__core@7.20.5': '@types/babel__core@7.20.5':
dependencies: dependencies:
@@ -936,7 +940,7 @@ snapshots:
'@babel/types': 7.28.2 '@babel/types': 7.28.2
'@types/babel__generator': 7.27.0 '@types/babel__generator': 7.27.0
'@types/babel__template': 7.4.4 '@types/babel__template': 7.4.4
'@types/babel__traverse': 7.20.7 '@types/babel__traverse': 7.28.0
'@types/babel__generator@7.27.0': '@types/babel__generator@7.27.0':
dependencies: dependencies:
@@ -947,13 +951,13 @@ snapshots:
'@babel/parser': 7.28.0 '@babel/parser': 7.28.0
'@babel/types': 7.28.2 '@babel/types': 7.28.2
'@types/babel__traverse@7.20.7': '@types/babel__traverse@7.28.0':
dependencies: dependencies:
'@babel/types': 7.28.2 '@babel/types': 7.28.2
'@types/estree@1.0.8': {} '@types/estree@1.0.8': {}
babel-plugin-jsx-dom-expressions@0.39.8(@babel/core@7.28.0): babel-plugin-jsx-dom-expressions@0.40.1(@babel/core@7.28.0):
dependencies: dependencies:
'@babel/core': 7.28.0 '@babel/core': 7.28.0
'@babel/helper-module-imports': 7.18.6 '@babel/helper-module-imports': 7.18.6
@@ -963,19 +967,21 @@ snapshots:
parse5: 7.3.0 parse5: 7.3.0
validate-html-nesting: 1.2.3 validate-html-nesting: 1.2.3
babel-preset-solid@1.9.6(@babel/core@7.28.0): babel-preset-solid@1.9.9(@babel/core@7.28.0)(solid-js@1.9.9):
dependencies: dependencies:
'@babel/core': 7.28.0 '@babel/core': 7.28.0
babel-plugin-jsx-dom-expressions: 0.39.8(@babel/core@7.28.0) babel-plugin-jsx-dom-expressions: 0.40.1(@babel/core@7.28.0)
optionalDependencies:
solid-js: 1.9.9
browserslist@4.25.1: browserslist@4.25.2:
dependencies: dependencies:
caniuse-lite: 1.0.30001727 caniuse-lite: 1.0.30001734
electron-to-chromium: 1.5.191 electron-to-chromium: 1.5.200
node-releases: 2.0.19 node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.25.1) update-browserslist-db: 1.1.3(browserslist@4.25.2)
caniuse-lite@1.0.30001727: {} caniuse-lite@1.0.30001734: {}
color-convert@3.1.0: color-convert@3.1.0:
dependencies: dependencies:
@@ -991,38 +997,38 @@ snapshots:
dependencies: dependencies:
ms: 2.1.3 ms: 2.1.3
electron-to-chromium@1.5.191: {} electron-to-chromium@1.5.200: {}
entities@6.0.1: {} entities@6.0.1: {}
esbuild@0.25.8: esbuild@0.25.9:
optionalDependencies: optionalDependencies:
'@esbuild/aix-ppc64': 0.25.8 '@esbuild/aix-ppc64': 0.25.9
'@esbuild/android-arm': 0.25.8 '@esbuild/android-arm': 0.25.9
'@esbuild/android-arm64': 0.25.8 '@esbuild/android-arm64': 0.25.9
'@esbuild/android-x64': 0.25.8 '@esbuild/android-x64': 0.25.9
'@esbuild/darwin-arm64': 0.25.8 '@esbuild/darwin-arm64': 0.25.9
'@esbuild/darwin-x64': 0.25.8 '@esbuild/darwin-x64': 0.25.9
'@esbuild/freebsd-arm64': 0.25.8 '@esbuild/freebsd-arm64': 0.25.9
'@esbuild/freebsd-x64': 0.25.8 '@esbuild/freebsd-x64': 0.25.9
'@esbuild/linux-arm': 0.25.8 '@esbuild/linux-arm': 0.25.9
'@esbuild/linux-arm64': 0.25.8 '@esbuild/linux-arm64': 0.25.9
'@esbuild/linux-ia32': 0.25.8 '@esbuild/linux-ia32': 0.25.9
'@esbuild/linux-loong64': 0.25.8 '@esbuild/linux-loong64': 0.25.9
'@esbuild/linux-mips64el': 0.25.8 '@esbuild/linux-mips64el': 0.25.9
'@esbuild/linux-ppc64': 0.25.8 '@esbuild/linux-ppc64': 0.25.9
'@esbuild/linux-riscv64': 0.25.8 '@esbuild/linux-riscv64': 0.25.9
'@esbuild/linux-s390x': 0.25.8 '@esbuild/linux-s390x': 0.25.9
'@esbuild/linux-x64': 0.25.8 '@esbuild/linux-x64': 0.25.9
'@esbuild/netbsd-arm64': 0.25.8 '@esbuild/netbsd-arm64': 0.25.9
'@esbuild/netbsd-x64': 0.25.8 '@esbuild/netbsd-x64': 0.25.9
'@esbuild/openbsd-arm64': 0.25.8 '@esbuild/openbsd-arm64': 0.25.9
'@esbuild/openbsd-x64': 0.25.8 '@esbuild/openbsd-x64': 0.25.9
'@esbuild/openharmony-arm64': 0.25.8 '@esbuild/openharmony-arm64': 0.25.9
'@esbuild/sunos-x64': 0.25.8 '@esbuild/sunos-x64': 0.25.9
'@esbuild/win32-arm64': 0.25.8 '@esbuild/win32-arm64': 0.25.9
'@esbuild/win32-ia32': 0.25.8 '@esbuild/win32-ia32': 0.25.9
'@esbuild/win32-x64': 0.25.8 '@esbuild/win32-x64': 0.25.9
escalade@3.2.0: {} escalade@3.2.0: {}
@@ -1075,30 +1081,30 @@ snapshots:
prettier@3.6.2: {} prettier@3.6.2: {}
rollup@4.46.0: rollup@4.46.2:
dependencies: dependencies:
'@types/estree': 1.0.8 '@types/estree': 1.0.8
optionalDependencies: optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.46.0 '@rollup/rollup-android-arm-eabi': 4.46.2
'@rollup/rollup-android-arm64': 4.46.0 '@rollup/rollup-android-arm64': 4.46.2
'@rollup/rollup-darwin-arm64': 4.46.0 '@rollup/rollup-darwin-arm64': 4.46.2
'@rollup/rollup-darwin-x64': 4.46.0 '@rollup/rollup-darwin-x64': 4.46.2
'@rollup/rollup-freebsd-arm64': 4.46.0 '@rollup/rollup-freebsd-arm64': 4.46.2
'@rollup/rollup-freebsd-x64': 4.46.0 '@rollup/rollup-freebsd-x64': 4.46.2
'@rollup/rollup-linux-arm-gnueabihf': 4.46.0 '@rollup/rollup-linux-arm-gnueabihf': 4.46.2
'@rollup/rollup-linux-arm-musleabihf': 4.46.0 '@rollup/rollup-linux-arm-musleabihf': 4.46.2
'@rollup/rollup-linux-arm64-gnu': 4.46.0 '@rollup/rollup-linux-arm64-gnu': 4.46.2
'@rollup/rollup-linux-arm64-musl': 4.46.0 '@rollup/rollup-linux-arm64-musl': 4.46.2
'@rollup/rollup-linux-loongarch64-gnu': 4.46.0 '@rollup/rollup-linux-loongarch64-gnu': 4.46.2
'@rollup/rollup-linux-ppc64-gnu': 4.46.0 '@rollup/rollup-linux-ppc64-gnu': 4.46.2
'@rollup/rollup-linux-riscv64-gnu': 4.46.0 '@rollup/rollup-linux-riscv64-gnu': 4.46.2
'@rollup/rollup-linux-riscv64-musl': 4.46.0 '@rollup/rollup-linux-riscv64-musl': 4.46.2
'@rollup/rollup-linux-s390x-gnu': 4.46.0 '@rollup/rollup-linux-s390x-gnu': 4.46.2
'@rollup/rollup-linux-x64-gnu': 4.46.0 '@rollup/rollup-linux-x64-gnu': 4.46.2
'@rollup/rollup-linux-x64-musl': 4.46.0 '@rollup/rollup-linux-x64-musl': 4.46.2
'@rollup/rollup-win32-arm64-msvc': 4.46.0 '@rollup/rollup-win32-arm64-msvc': 4.46.2
'@rollup/rollup-win32-ia32-msvc': 4.46.0 '@rollup/rollup-win32-ia32-msvc': 4.46.2
'@rollup/rollup-win32-x64-msvc': 4.46.0 '@rollup/rollup-win32-x64-msvc': 4.46.2
fsevents: 2.3.3 fsevents: 2.3.3
semver@6.3.1: {} semver@6.3.1: {}
@@ -1109,18 +1115,18 @@ snapshots:
seroval@1.3.2: {} seroval@1.3.2: {}
solid-js@1.9.7: solid-js@1.9.9:
dependencies: dependencies:
csstype: 3.1.3 csstype: 3.1.3
seroval: 1.3.2 seroval: 1.3.2
seroval-plugins: 1.3.2(seroval@1.3.2) seroval-plugins: 1.3.2(seroval@1.3.2)
solid-refresh@0.6.3(solid-js@1.9.7): solid-refresh@0.6.3(solid-js@1.9.9):
dependencies: dependencies:
'@babel/generator': 7.28.0 '@babel/generator': 7.28.0
'@babel/helper-module-imports': 7.27.1 '@babel/helper-module-imports': 7.27.1
'@babel/types': 7.28.2 '@babel/types': 7.28.2
solid-js: 1.9.7 solid-js: 1.9.9
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@@ -1133,40 +1139,40 @@ snapshots:
typescript@5.8.3: {} typescript@5.8.3: {}
update-browserslist-db@1.1.3(browserslist@4.25.1): update-browserslist-db@1.1.3(browserslist@4.25.2):
dependencies: dependencies:
browserslist: 4.25.1 browserslist: 4.25.2
escalade: 3.2.0 escalade: 3.2.0
picocolors: 1.1.1 picocolors: 1.1.1
validate-html-nesting@1.2.3: {} validate-html-nesting@1.2.3: {}
vite-plugin-solid@2.11.7(solid-js@1.9.7)(vite@7.0.6): vite-plugin-solid@2.11.8(solid-js@1.9.9)(vite@7.1.2):
dependencies: dependencies:
'@babel/core': 7.28.0 '@babel/core': 7.28.0
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
babel-preset-solid: 1.9.6(@babel/core@7.28.0) babel-preset-solid: 1.9.9(@babel/core@7.28.0)(solid-js@1.9.9)
merge-anything: 5.1.7 merge-anything: 5.1.7
solid-js: 1.9.7 solid-js: 1.9.9
solid-refresh: 0.6.3(solid-js@1.9.7) solid-refresh: 0.6.3(solid-js@1.9.9)
vite: 7.0.6 vite: 7.1.2
vitefu: 1.1.1(vite@7.0.6) vitefu: 1.1.1(vite@7.1.2)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
vite@7.0.6: vite@7.1.2:
dependencies: dependencies:
esbuild: 0.25.8 esbuild: 0.25.9
fdir: 6.4.6(picomatch@4.0.3) fdir: 6.4.6(picomatch@4.0.3)
picomatch: 4.0.3 picomatch: 4.0.3
postcss: 8.5.6 postcss: 8.5.6
rollup: 4.46.0 rollup: 4.46.2
tinyglobby: 0.2.14 tinyglobby: 0.2.14
optionalDependencies: optionalDependencies:
fsevents: 2.3.3 fsevents: 2.3.3
vitefu@1.1.1(vite@7.0.6): vitefu@1.1.1(vite@7.1.2):
optionalDependencies: optionalDependencies:
vite: 7.0.6 vite: 7.1.2
yallist@3.1.1: {} yallist@3.1.1: {}

Before

Width:  |  Height:  |  Size: 983 B

After

Width:  |  Height:  |  Size: 983 B

Before

Width:  |  Height:  |  Size: 502 B

After

Width:  |  Height:  |  Size: 502 B

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 282 B

Before

Width:  |  Height:  |  Size: 390 B

After

Width:  |  Height:  |  Size: 390 B

Before

Width:  |  Height:  |  Size: 989 B

After

Width:  |  Height:  |  Size: 989 B

Before

Width:  |  Height:  |  Size: 495 B

After

Width:  |  Height:  |  Size: 495 B

Before

Width:  |  Height:  |  Size: 275 B

After

Width:  |  Height:  |  Size: 275 B

Before

Width:  |  Height:  |  Size: 394 B

After

Width:  |  Height:  |  Size: 394 B

+81 -35
View File
@@ -21,9 +21,11 @@ import {
} from "./util/ffmpeg"; } from "./util/ffmpeg";
import Neutralino from "@neutralinojs/lib"; import Neutralino from "@neutralinojs/lib";
import H264Options from "./components/H264Options"; import H264Options from "./components/H264Options";
import Configure from "./assets/breeze/actions/16/configure.svg"; import { openFile } from "./util/oshelper";
import PlaybackStart from "./assets/breeze/actions/16/media-playback-start.svg"; import { getTemporaryFilePath } from "./util/path";
import TrashEmpty from "./assets/breeze/actions/16/trash-empty.svg"; import { generateRandomString } from "./util/string";
import "./css/icons.css";
import BreezeIcon from "./components/BreezeIcon";
const commonCodecs = new Set(["h264", "hevc", "vp8", "vp9", "av1", "dnxhd"]); const commonCodecs = new Set(["h264", "hevc", "vp8", "vp9", "av1", "dnxhd"]);
@@ -50,6 +52,7 @@ function App() {
const [runningProcesses, setRunningProcesses] = createSignal< const [runningProcesses, setRunningProcesses] = createSignal<
RunningProcessInfo[] RunningProcessInfo[]
>([]); >([]);
const logs: { [id: number]: string[] } = {};
let supportedCodecs: CodecInfo[] = []; let supportedCodecs: CodecInfo[] = [];
let ffmpegParams: FFmpegParams = { vcodec: "" }; let ffmpegParams: FFmpegParams = { vcodec: "" };
let successfulCount = 0; let successfulCount = 0;
@@ -65,32 +68,45 @@ function App() {
} }
function handleSpawnedProcessEvents(evt: CustomEvent) { function handleSpawnedProcessEvents(evt: CustomEvent) {
if (evt.detail.action !== "exit") return; switch (evt.detail.action) {
case "stdErr":
logs[evt.detail.id].push(evt.detail.data);
break;
case "exit":
if (evt.detail.data === 0) {
successfulCount += 1;
} else {
unsuccessfulCount += 1;
if (evt.detail.data === 0) { // If the exit code isn't 255 (the exit code of the program exiting because of cancellation)
successfulCount += 1; if (evt.detail.data !== 255) {
} else { Neutralino.os.showNotification(
unsuccessfulCount += 1; "File Encoding Failed",
`Encoding for file "${runningProcesses()?.find((v) => v.process.id == evt.detail.id)?.file}" failed. Exit code ${evt.detail.data}.`,
);
if (evt.detail.data !== 255) { const tempFilename = `${getTemporaryFilePath()}/vencoder-ffmpeg-${generateRandomString(8)}.log`;
Neutralino.os.showNotification( Neutralino.filesystem.writeFile(
"File Encoding Failed", tempFilename,
`Encoding for file "${runningProcesses()?.find((v) => v.process.id == evt.detail.id)?.file}" failed. Exit code ${evt.detail.data}.`, logs[evt.detail.id].join("\n"),
); );
} openFile(tempFilename);
}
}
if (successfulCount + unsuccessfulCount === totalCount) {
Neutralino.os.showNotification(
"File(s) encoded.",
`${successfulCount} files encoded successfully. ${unsuccessfulCount} failed or cancelled.`,
);
successfulCount = 0;
unsuccessfulCount = 0;
totalCount = 0;
}
console.log(`FFmpeg exited with code: ${evt.detail.data}`);
break;
} }
if (successfulCount + unsuccessfulCount === totalCount) {
Neutralino.os.showNotification(
"File(s) encoded.",
`${successfulCount} files encoded successfully. ${unsuccessfulCount} failed or cancelled.`,
);
successfulCount = 0;
unsuccessfulCount = 0;
totalCount = 0;
}
console.log(`FFmpeg exited with code: ${evt.detail.data}`);
} }
onMount(async () => { onMount(async () => {
@@ -291,6 +307,8 @@ function App() {
setRunningProcesses(processes); setRunningProcesses(processes);
processes.forEach((v) => (logs[v.process.id] = []));
await Neutralino.storage.setData( await Neutralino.storage.setData(
"filesBeingProcessed", "filesBeingProcessed",
JSON.stringify( JSON.stringify(
@@ -315,9 +333,37 @@ function App() {
async function convertSelectedClicked() { async function convertSelectedClicked() {
const result = await convertClip(selectedClip()); const result = await convertClip(selectedClip());
if (result !== undefined) { if (result === undefined) {
setRunningProcesses([]); return;
} }
console.log(result);
totalCount = 1;
setRunningProcesses([result]);
logs[result.process.id] = [];
await Neutralino.storage.setData(
"filesBeingProcessed",
JSON.stringify([
{
id: result.process.id,
in: result.file,
len: result.length,
},
]),
);
await Neutralino.window.create(`${window.location.href}progress`, {
width: 600,
height: 400,
x: 120,
y: 120,
injectGlobals: true,
maximizable: false,
});
} }
return ( return (
@@ -370,8 +416,8 @@ function App() {
onclick={removeBtnClicked} onclick={removeBtnClicked}
class="icon-button k-button" class="icon-button k-button"
> >
<img <BreezeIcon
src={TrashEmpty} icon="b b-trash-empty"
alt="Remove Selected Video" alt="Remove Selected Video"
/> />
</button> </button>
@@ -380,8 +426,8 @@ function App() {
onclick={playBtnClicked} onclick={playBtnClicked}
class="icon-button k-button" class="icon-button k-button"
> >
<img <BreezeIcon
src={PlaybackStart} icon="playback-start"
alt="Preview Selected Video" alt="Preview Selected Video"
/> />
</button> </button>
@@ -389,9 +435,9 @@ function App() {
class="icon-button k-button" class="icon-button k-button"
onclick={settingsBtnPressed} onclick={settingsBtnPressed}
> >
<img <BreezeIcon
src={Configure} icon="configure"
alt="Configure Vencoder" alt="Configure"
/> />
</button> </button>
</div> </div>
+3
View File
@@ -0,0 +1,3 @@
export default function BreezeIcon(props: { icon: string; alt: string }) {
return <i class={`b b-${props.icon}`} role="img" aria-label={props.alt} />;
}
+10 -4
View File
@@ -1,7 +1,7 @@
import { createSignal, Show } from "solid-js"; import { createSignal, Show } from "solid-js";
import type { CodecInfo, FFmpegParams } from "../util/ffmpeg"; import type { CodecInfo, FFmpegParams } from "../util/ffmpeg";
import HelpAbout from "../assets/breeze/actions/16/help-about.svg";
import { os } from "@neutralinojs/lib"; import { os } from "@neutralinojs/lib";
import BreezeIcon from "./BreezeIcon";
const information = { const information = {
h264: { h264: {
@@ -21,6 +21,10 @@ function H264Options(props: {
onParamChanged: (key: string, value: any) => void; onParamChanged: (key: string, value: any) => void;
}) { }) {
const [twopass, setTwopass] = createSignal(false); const [twopass, setTwopass] = createSignal(false);
const defaultCrf =
props.codec?.shortName === "h264"
? information.h264.defaultCrf
: information.hevc.defaultCrf;
return ( return (
<section id="commonLossyOptions"> <section id="commonLossyOptions">
@@ -52,7 +56,7 @@ function H264Options(props: {
} }
title="This will use the two-pass rate control mode instead of relying on a Constant Rate Factor (CRF) value." title="This will use the two-pass rate control mode instead of relying on a Constant Rate Factor (CRF) value."
> >
<img src={HelpAbout} /> <BreezeIcon icon="help-about" alt="Help" />
</button> </button>
</div> </div>
<label>Preset</label> <label>Preset</label>
@@ -91,7 +95,9 @@ function H264Options(props: {
type="number" type="number"
name="crf" name="crf"
id="crf" id="crf"
value={props.params.crf ?? "23"} min="0"
max="51"
value={props.params.crf ?? defaultCrf}
oninput={(e) => { oninput={(e) => {
props.params.crf = parseInt(e.target.value); props.params.crf = parseInt(e.target.value);
props.onParamChanged( props.onParamChanged(
@@ -149,7 +155,7 @@ function H264Options(props: {
} }
title="This will move some information to the beginning of your file and allow the video to begin playing before it is completely downloaded by the viewer, recommended for web videos. Click for more information." title="This will move some information to the beginning of your file and allow the video to begin playing before it is completely downloaded by the viewer, recommended for web videos. Click for more information."
> >
<img src={HelpAbout} /> <BreezeIcon icon="help-about" alt="Help" />
</button> </button>
</div> </div>
</Show> </Show>
+38
View File
@@ -0,0 +1,38 @@
.b {
width: 1em;
height: 1em;
}
.b-trash-empty {
background-image: url("/breeze/actions/16/trash-empty.svg");
}
.b-configure {
background-image: url("/breeze/actions/16/configure.svg");
}
.b-playback-start {
background-image: url("/breeze/actions/16/media-playback-start.svg");
}
.b-help-about {
background-image: url("/breeze/actions/16/help-about.svg");
}
@media screen and (prefers-color-scheme: dark) {
.b-trash-empty {
background-image: url("/breeze-dark/actions/16/trash-empty.svg");
}
.b-configure {
background-image: url("/breeze-dark/actions/16/configure.svg");
}
.b-playback-start {
background-image: url("/breeze-dark/actions/16/media-playback-start.svg");
}
.b-help-about {
background-image: url("/breeze-dark/actions/16/help-about.svg");
}
}
+4 -2
View File
@@ -75,12 +75,14 @@ h2 {
justify-content: center; justify-content: center;
align-items: center; align-items: center;
img { img,
i {
width: 16px; width: 16px;
height: 16px; height: 16px;
} }
&:disabled img { &:disabled img,
&:disabled i {
filter: invert(50%); filter: invert(50%);
} }
} }
+5
View File
@@ -64,12 +64,17 @@ function ProgressPage() {
percentage: (parseInt(info.out_time_us) / file.len) * 100, percentage: (parseInt(info.out_time_us) / file.len) * 100,
}; };
if (Number.isNaN(progressObject[evt.detail.id].percentage)) {
progressObject[evt.detail.id].percentage = 0;
}
setProgressList(Object.values(progressObject)); setProgressList(Object.values(progressObject));
break; break;
case "stdErr": case "stdErr":
break; break;
case "exit": case "exit":
console.log(`FFmpeg exited with code: ${evt.detail.data}`); console.log(`FFmpeg exited with code: ${evt.detail.data}`);
os.getSpawnedProcesses().then((processes) => { os.getSpawnedProcesses().then((processes) => {
if (processes.length === 0) { if (processes.length === 0) {
setFinished(true); setFinished(true);
+13
View File
@@ -0,0 +1,13 @@
import { os } from "@neutralinojs/lib";
const openFilePrograms: { [os: string]: string } = {
Linux: "xdg-open",
Windows: "explorer",
Darwin: "open",
};
export function openFile(path: string) {
let program = openFilePrograms[window.NL_OS] ?? "";
return os.execCommand(`${program} ${path}`);
}
+10
View File
@@ -0,0 +1,10 @@
export function getTemporaryFilePath() {
switch (window.NL_OS) {
case "Windows":
return "%temp%";
case "Linux":
return "/tmp";
default:
return ".";
}
}
+13
View File
@@ -0,0 +1,13 @@
// Code originally from: https://stackoverflow.com/a/1349426/14512055
export function generateRandomString(length: number) {
let result = "";
let characters =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
let charactersLength = characters.length;
for (let i = 0; i < length; i++) {
result += characters.charAt(
Math.floor(Math.random() * charactersLength),
);
}
return result;
}