From 74f5257828e383f796b4b01cce6a7e8bc93907fe Mon Sep 17 00:00:00 2001 From: Satakun Utama Date: Fri, 15 Aug 2025 09:48:48 +0700 Subject: [PATCH] Show FFmpeg logs after error, Improve icons in dark mode, Improve "Convert Selected" button --- neutralino.config.json | 5 +- solid-src/package.json | 6 +- solid-src/pnpm-lock.yaml | 530 +++++++++--------- .../breeze-dark/actions/16/configure.svg | 0 .../breeze-dark/actions/16/help-about.svg | 0 .../actions/16/media-playback-start.svg | 0 .../breeze-dark/actions/16/trash-empty.svg | 0 .../breeze/actions/16/configure.svg | 0 .../breeze/actions/16/help-about.svg | 0 .../actions/16/media-playback-start.svg | 0 .../breeze/actions/16/trash-empty.svg | 0 solid-src/src/App.tsx | 116 ++-- solid-src/src/components/BreezeIcon.tsx | 3 + solid-src/src/components/H264Options.tsx | 14 +- solid-src/src/css/icons.css | 38 ++ solid-src/src/css/index.css | 6 +- solid-src/src/pages/ProgressPage.tsx | 5 + solid-src/src/util/oshelper.ts | 13 + solid-src/src/util/path.ts | 10 + solid-src/src/util/string.ts | 13 + 20 files changed, 449 insertions(+), 310 deletions(-) rename solid-src/{src/assets => public}/breeze-dark/actions/16/configure.svg (100%) rename solid-src/{src/assets => public}/breeze-dark/actions/16/help-about.svg (100%) rename solid-src/{src/assets => public}/breeze-dark/actions/16/media-playback-start.svg (100%) rename solid-src/{src/assets => public}/breeze-dark/actions/16/trash-empty.svg (100%) rename solid-src/{src/assets => public}/breeze/actions/16/configure.svg (100%) rename solid-src/{src/assets => public}/breeze/actions/16/help-about.svg (100%) rename solid-src/{src/assets => public}/breeze/actions/16/media-playback-start.svg (100%) rename solid-src/{src/assets => public}/breeze/actions/16/trash-empty.svg (100%) create mode 100644 solid-src/src/components/BreezeIcon.tsx create mode 100644 solid-src/src/css/icons.css create mode 100644 solid-src/src/util/oshelper.ts create mode 100644 solid-src/src/util/path.ts create mode 100644 solid-src/src/util/string.ts diff --git a/neutralino.config.json b/neutralino.config.json index b8f0163..04effe9 100644 --- a/neutralino.config.json +++ b/neutralino.config.json @@ -13,10 +13,7 @@ "app.*", "os.*", "window.create", - "window.setMainMenu", - "filesystem.getPathParts", - "filesystem.createDirectory", - "filesystem.getStats", + "filesystem.*", "storage.*", "debug.log" ], diff --git a/solid-src/package.json b/solid-src/package.json index cfed508..fd60c32 100644 --- a/solid-src/package.json +++ b/solid-src/package.json @@ -12,13 +12,13 @@ "@neutralinojs/lib": "^6.2.0", "@solidjs/router": "^0.15.3", "color-convert": "^3.1.0", - "solid-js": "^1.9.7" + "solid-js": "^1.9.9" }, "devDependencies": { "prettier": "3.6.2", "typescript": "~5.8.3", - "vite": "^7.0.6", - "vite-plugin-solid": "^2.11.7" + "vite": "^7.1.2", + "vite-plugin-solid": "^2.11.8" }, "packageManager": "pnpm@10.13.1+sha512.37ebf1a5c7a30d5fabe0c5df44ee8da4c965ca0c5af3dbab28c3a1681b70a256218d05c81c9c0dcf767ef6b8551eb5b960042b9ed4300c59242336377e01cfad" } diff --git a/solid-src/pnpm-lock.yaml b/solid-src/pnpm-lock.yaml index b48e90a..c748dbe 100644 --- a/solid-src/pnpm-lock.yaml +++ b/solid-src/pnpm-lock.yaml @@ -13,13 +13,13 @@ importers: version: 6.2.0 '@solidjs/router': specifier: ^0.15.3 - version: 0.15.3(solid-js@1.9.7) + version: 0.15.3(solid-js@1.9.9) color-convert: specifier: ^3.1.0 version: 3.1.0 solid-js: - specifier: ^1.9.7 - version: 1.9.7 + specifier: ^1.9.9 + version: 1.9.9 devDependencies: prettier: specifier: 3.6.2 @@ -28,11 +28,11 @@ importers: specifier: ~5.8.3 version: 5.8.3 vite: - specifier: ^7.0.6 - version: 7.0.6 + specifier: ^7.1.2 + version: 7.1.2 vite-plugin-solid: - specifier: ^2.11.7 - version: 2.11.7(solid-js@1.9.7)(vite@7.0.6) + specifier: ^2.11.8 + version: 2.11.8(solid-js@1.9.9)(vite@7.1.2) packages: @@ -121,275 +121,275 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} '@neutralinojs/lib@6.2.0': resolution: {integrity: sha512-BpnZjaSWKLJMSSLwfrhiBwgEwuSR5fZsroFH0Tfx6aTCx9AXbKkIQ5wj/JKWH7jyRet7K/+KYzbK8C+UKOgecw==} - '@rollup/rollup-android-arm-eabi@4.46.0': - resolution: {integrity: sha512-9f3nSTFI2ivfxc7/tHBHcJ8pRnp8ROrELvsVprlQPVvcZ+j5zztYd+PTJGpyIOAdTvNwNrpCXswKSeoQcyGjMQ==} + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.0': - resolution: {integrity: sha512-tFZSEhqJ8Yrpe50TzOdeoYi72gi/jsnT7y8Qrozf3cNu28WX+s6I3XzEPUAqoaT9SAS8Xz9AzGTFlxxCH/w20w==} + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.0': - resolution: {integrity: sha512-+DikIIs+p6yU2hF51UaWG8BnHbq90X0QIOt5zqSKSZxY+G3qqdLih214e9InJal21af2PuuxkDectetGfbVPJw==} + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.0': - resolution: {integrity: sha512-5a+NofhdEB/WimSlFMskbFQn1vqz1FWryYpA99trmZGO6qEmiS0IsX6w4B3d91U878Q2ZQdiaFF1gxX4P147og==} + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.0': - resolution: {integrity: sha512-igr/RlKPS3OCy4jD3XBmAmo3UAcNZkJSubRsw1JeM8bAbwf15k/3eMZXD91bnjheijJiOJcga3kfCLKjV8IXNg==} + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.0': - resolution: {integrity: sha512-MdigWzPSHlQzB1xZ+MdFDWTAH+kcn7UxjEBoOKuaso7z1DRlnAnrknB1mTtNOQ+GdPI8xgExAGwHeqQjntR0Cg==} + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.0': - resolution: {integrity: sha512-dmZseE0ZwA/4yy1+BwFrDqFTjjNg24GO9xSrb1weVbt6AFkhp5pz1gVS7IMtfIvoWy8yp6q/zN0bKnefRUImvQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.0': - resolution: {integrity: sha512-fzhfn6p9Cfm3W8UrWKIa4l7Wfjs/KGdgaswMBBE3KY3Ta43jg2XsPrAtfezHpsRk0Nx+TFuS3hZk/To2N5kFPQ==} + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.0': - resolution: {integrity: sha512-vVDD+iPDPmJQ5nAQ5Tifq3ywdv60FartglFI8VOCK+hcU9aoG0qlQTsDJP97O5yiTaTqlneZWoARMcVC5nyUoQ==} + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.0': - resolution: {integrity: sha512-0d0jx08fzDHCzXqrtCMEEyxKU0SvJrWmUjUDE2/KDQ2UDJql0tfiwYvEx1oHELClKO8CNdE+AGJj+RqXscZpdQ==} + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.0': - resolution: {integrity: sha512-XBYu9oW9eKJadWn8M7hkTZsD4yG+RrsTrVEgyKwb4L72cpJjRbRboTG9Lg9fec8MxJp/cfTHAocg4mnismQR8A==} + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.0': - resolution: {integrity: sha512-wJaRvcT17PoOK6Ggcfo3nouFlybHvARBS4jzT0PC/lg17fIJHcDS2fZz3sD+iA4nRlho2zE6OGbU0HvwATdokQ==} + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.0': - resolution: {integrity: sha512-GZ5bkMFteAGkcmh8x0Ok4LSa+L62Ez0tMsHPX6JtR0wl4Xc3bQcrFHDiR5DGLEDFtGrXih4Nd/UDaFqs968/wA==} + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.0': - resolution: {integrity: sha512-7CjPw6FflFsVOUfWOrVrREiV3IYXG4RzZ1ZQUaT3BtSK8YXN6x286o+sruPZJESIaPebYuFowmg54ZdrkVBYog==} + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.0': - resolution: {integrity: sha512-nmvnl0ZiuysltcB/cKjUh40Rx4FbSyueERDsl2FLvLYr6pCgSsvGr3SocUT84svSpmloS7f1DRWqtRha74Gi1w==} + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.0': - resolution: {integrity: sha512-Cv+moII5C8RM6gZbR3cb21o6rquVDZrN2o81maROg1LFzBz2dZUwIQSxFA8GtGZ/F2KtsqQ2z3eFPBb6akvQNg==} + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.0': - resolution: {integrity: sha512-PHcMG8DZTM9RCIjp8QIfN0VYtX0TtBPnWOTRurFhoCDoi9zptUZL2k7pCs+5rgut7JAiUsYy+huyhVKPcmxoog==} + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.0': - resolution: {integrity: sha512-1SI/Rd47e8aQJeFWMDg16ET+fjvCcD/CzeaRmIEPmb05hx+3cCcwIF4ebUag4yTt/D1peE+Mgp0+Po3M358cAA==} + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.0': - resolution: {integrity: sha512-JwOCYxmumFDfDhx4kNyz6kTVK3gWzBIvVdMNzQMRDubcoGRDniOOmo6DDNP42qwZx3Bp9/6vWJ+kNzNqXoHmeA==} + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.0': - resolution: {integrity: sha512-IPMIfrfkG1GaEXi+JSsQEx8x9b4b+hRZXO7KYc2pKio3zO2/VDXDs6B9Ts/nnO+25Fk1tdAVtUn60HKKPPzDig==} + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} cpu: [x64] os: [win32] @@ -407,29 +407,33 @@ packages: '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.7': - resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} + '@types/babel__traverse@7.28.0': + resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==} '@types/estree@1.0.8': resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - babel-plugin-jsx-dom-expressions@0.39.8: - resolution: {integrity: sha512-/MVOIIjonylDXnrWmG23ZX82m9mtKATsVHB7zYlPfDR9Vdd/NBE48if+wv27bSkBtyO7EPMUlcUc4J63QwuACQ==} + babel-plugin-jsx-dom-expressions@0.40.1: + resolution: {integrity: sha512-b4iHuirqK7RgaMzB2Lsl7MqrlDgQtVRSSazyrmx7wB3T759ggGjod5Rkok5MfHjQXhR7tRPmdwoeGPqBnW2KfA==} peerDependencies: '@babel/core': ^7.20.12 - babel-preset-solid@1.9.6: - resolution: {integrity: sha512-HXTK9f93QxoH8dYn1M2mJdOlWgMsR88Lg/ul6QCZGkNTktjTE5HAf93YxQumHoCudLEtZrU1cFCMFOVho6GqFg==} + babel-preset-solid@1.9.9: + resolution: {integrity: sha512-pCnxWrciluXCeli/dj5PIEHgbNzim3evtTn12snjqqg8QZWJNMjH1AWIp4iG/tbVjqQ72aBEymMSagvmgxubXw==} peerDependencies: '@babel/core': ^7.0.0 + solid-js: ^1.9.8 + peerDependenciesMeta: + solid-js: + optional: true - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.2: + resolution: {integrity: sha512-0si2SJK3ooGzIawRu61ZdPCO1IncZwS8IzuX73sPZsXW6EQ/w/DAfPyKI8l1ETTCr2MnvqWitmlCUxgdul45jA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + caniuse-lite@1.0.30001734: + resolution: {integrity: sha512-uhE1Ye5vgqju6OI71HTQqcBCZrvHugk0MjLak7Q+HfoBgoq5Bi+5YnwjP4fjDgrtYr/l8MVRBvzz9dPD4KyK0A==} color-convert@3.1.0: resolution: {integrity: sha512-TVoqAq8ZDIpK5lsQY874DDnu65CSsc9vzq0wLpNQ6UMBq81GSZocVazPiBbYGzngzBOIRahpkTzCLVe2at4MfA==} @@ -454,15 +458,15 @@ packages: supports-color: optional: true - electron-to-chromium@1.5.191: - resolution: {integrity: sha512-xcwe9ELcuxYLUFqZZxL19Z6HVKcvNkIwhbHUz7L3us6u12yR+7uY89dSl570f/IqNthx8dAw3tojG7i4Ni4tDA==} + electron-to-chromium@1.5.200: + resolution: {integrity: sha512-rFCxROw7aOe4uPTfIAx+rXv9cEcGx+buAF4npnhtTqCJk5KDFRnh3+KYj7rdVh6lsFt5/aPs+Irj9rZ33WMA7w==} entities@6.0.1: resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} engines: {node: '>=0.12'} - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} hasBin: true @@ -544,8 +548,8 @@ packages: engines: {node: '>=14'} hasBin: true - rollup@4.46.0: - resolution: {integrity: sha512-ONmkT3Ud3IfW15nl7l4qAZko5/2iZ5ALVBDh02ZSZ5IGVLJSYkRcRa3iB58VyEIyoofs9m2xdVrm+lTi97+3pw==} + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -563,8 +567,8 @@ packages: resolution: {integrity: sha512-RbcPH1n5cfwKrru7v7+zrZvjLurgHhGyso3HTyGtRivGWgYjbOmGuivCQaORNELjNONoK35nj28EoWul9sb1zQ==} engines: {node: '>=10'} - solid-js@1.9.7: - resolution: {integrity: sha512-/saTKi8iWEM233n5OSi1YHCCuh66ZIQ7aK2hsToPe4tqGm7qAejU1SwNuTPivbWAYq7SjuHVVYxxuZQNRbICiw==} + solid-js@1.9.9: + resolution: {integrity: sha512-A0ZBPJQldAeGCTW0YRYJmt7RCeh5rbFfPZ2aOttgYnctHE7HgKeHCBB/PVc2P7eOfmNXqMFFFoYYdm3S4dcbkA==} solid-refresh@0.6.3: resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} @@ -593,18 +597,18 @@ packages: validate-html-nesting@1.2.3: resolution: {integrity: sha512-kdkWdCl6eCeLlRShJKbjVOU2kFKxMF8Ghu50n+crEoyx+VKm3FxAxF9z4DCy6+bbTOqNW0+jcIYRnjoIRzigRw==} - vite-plugin-solid@2.11.7: - resolution: {integrity: sha512-5TgK1RnE449g0Ryxb9BXqem89RSy7fE8XGVCo+Gw84IHgPuPVP7nYNP6WBVAaY/0xw+OqfdQee+kusL0y3XYNg==} + vite-plugin-solid@2.11.8: + resolution: {integrity: sha512-hFrCxBfv3B1BmFqnJF4JOCYpjrmi/zwyeKjcomQ0khh8HFyQ8SbuBWQ7zGojfrz6HUOBFrJBNySDi/JgAHytWg==} peerDependencies: '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* 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: '@testing-library/jest-dom': optional: true - vite@7.0.6: - resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + vite@7.1.2: + resolution: {integrity: sha512-J0SQBPlQiEXAF7tajiH+rUooJPo0l8KQgyg4/aMunNtrOa7bwuZJsJbDWzeljqQpgftxuq5yNJxQ91O9ts29UQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -658,8 +662,8 @@ snapshots: '@ampproject/remapping@2.3.0': dependencies: - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 '@babel/code-frame@7.27.1': dependencies: @@ -693,15 +697,15 @@ snapshots: dependencies: '@babel/parser': 7.28.0 '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 '@babel/helper-compilation-targets@7.27.2': dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.25.2 lru-cache: 5.1.1 semver: 6.3.1 @@ -772,163 +776,163 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@esbuild/aix-ppc64@0.25.8': + '@esbuild/aix-ppc64@0.25.9': optional: true - '@esbuild/android-arm64@0.25.8': + '@esbuild/android-arm64@0.25.9': optional: true - '@esbuild/android-arm@0.25.8': + '@esbuild/android-arm@0.25.9': optional: true - '@esbuild/android-x64@0.25.8': + '@esbuild/android-x64@0.25.9': optional: true - '@esbuild/darwin-arm64@0.25.8': + '@esbuild/darwin-arm64@0.25.9': optional: true - '@esbuild/darwin-x64@0.25.8': + '@esbuild/darwin-x64@0.25.9': optional: true - '@esbuild/freebsd-arm64@0.25.8': + '@esbuild/freebsd-arm64@0.25.9': optional: true - '@esbuild/freebsd-x64@0.25.8': + '@esbuild/freebsd-x64@0.25.9': optional: true - '@esbuild/linux-arm64@0.25.8': + '@esbuild/linux-arm64@0.25.9': optional: true - '@esbuild/linux-arm@0.25.8': + '@esbuild/linux-arm@0.25.9': optional: true - '@esbuild/linux-ia32@0.25.8': + '@esbuild/linux-ia32@0.25.9': optional: true - '@esbuild/linux-loong64@0.25.8': + '@esbuild/linux-loong64@0.25.9': optional: true - '@esbuild/linux-mips64el@0.25.8': + '@esbuild/linux-mips64el@0.25.9': optional: true - '@esbuild/linux-ppc64@0.25.8': + '@esbuild/linux-ppc64@0.25.9': optional: true - '@esbuild/linux-riscv64@0.25.8': + '@esbuild/linux-riscv64@0.25.9': optional: true - '@esbuild/linux-s390x@0.25.8': + '@esbuild/linux-s390x@0.25.9': optional: true - '@esbuild/linux-x64@0.25.8': + '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': + '@esbuild/netbsd-arm64@0.25.9': optional: true - '@esbuild/netbsd-x64@0.25.8': + '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': + '@esbuild/openbsd-arm64@0.25.9': optional: true - '@esbuild/openbsd-x64@0.25.8': + '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': + '@esbuild/openharmony-arm64@0.25.9': optional: true - '@esbuild/sunos-x64@0.25.8': + '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.25.9': optional: true - '@esbuild/win32-ia32@0.25.8': + '@esbuild/win32-ia32@0.25.9': optional: true - '@esbuild/win32-x64@0.25.8': + '@esbuild/win32-x64@0.25.9': optional: true - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 '@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: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@neutralinojs/lib@6.2.0': {} - '@rollup/rollup-android-arm-eabi@4.46.0': + '@rollup/rollup-android-arm-eabi@4.46.2': optional: true - '@rollup/rollup-android-arm64@4.46.0': + '@rollup/rollup-android-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-arm64@4.46.0': + '@rollup/rollup-darwin-arm64@4.46.2': optional: true - '@rollup/rollup-darwin-x64@4.46.0': + '@rollup/rollup-darwin-x64@4.46.2': optional: true - '@rollup/rollup-freebsd-arm64@4.46.0': + '@rollup/rollup-freebsd-arm64@4.46.2': optional: true - '@rollup/rollup-freebsd-x64@4.46.0': + '@rollup/rollup-freebsd-x64@4.46.2': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.0': + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.0': + '@rollup/rollup-linux-arm-musleabihf@4.46.2': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.0': + '@rollup/rollup-linux-arm64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.0': + '@rollup/rollup-linux-arm64-musl@4.46.2': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.0': + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.0': + '@rollup/rollup-linux-ppc64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.0': + '@rollup/rollup-linux-riscv64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.0': + '@rollup/rollup-linux-riscv64-musl@4.46.2': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.0': + '@rollup/rollup-linux-s390x-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.0': + '@rollup/rollup-linux-x64-gnu@4.46.2': optional: true - '@rollup/rollup-linux-x64-musl@4.46.0': + '@rollup/rollup-linux-x64-musl@4.46.2': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.0': + '@rollup/rollup-win32-arm64-msvc@4.46.2': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.0': + '@rollup/rollup-win32-ia32-msvc@4.46.2': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.0': + '@rollup/rollup-win32-x64-msvc@4.46.2': optional: true - '@solidjs/router@0.15.3(solid-js@1.9.7)': + '@solidjs/router@0.15.3(solid-js@1.9.9)': dependencies: - solid-js: 1.9.7 + solid-js: 1.9.9 '@types/babel__core@7.20.5': dependencies: @@ -936,7 +940,7 @@ snapshots: '@babel/types': 7.28.2 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.7 + '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: @@ -947,13 +951,13 @@ snapshots: '@babel/parser': 7.28.0 '@babel/types': 7.28.2 - '@types/babel__traverse@7.20.7': + '@types/babel__traverse@7.28.0': dependencies: '@babel/types': 7.28.2 '@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: '@babel/core': 7.28.0 '@babel/helper-module-imports': 7.18.6 @@ -963,19 +967,21 @@ snapshots: parse5: 7.3.0 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: '@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: - caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.191 + caniuse-lite: 1.0.30001734 + electron-to-chromium: 1.5.200 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: dependencies: @@ -991,38 +997,38 @@ snapshots: dependencies: ms: 2.1.3 - electron-to-chromium@1.5.191: {} + electron-to-chromium@1.5.200: {} entities@6.0.1: {} - esbuild@0.25.8: + esbuild@0.25.9: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 escalade@3.2.0: {} @@ -1075,30 +1081,30 @@ snapshots: prettier@3.6.2: {} - rollup@4.46.0: + rollup@4.46.2: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.0 - '@rollup/rollup-android-arm64': 4.46.0 - '@rollup/rollup-darwin-arm64': 4.46.0 - '@rollup/rollup-darwin-x64': 4.46.0 - '@rollup/rollup-freebsd-arm64': 4.46.0 - '@rollup/rollup-freebsd-x64': 4.46.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.0 - '@rollup/rollup-linux-arm-musleabihf': 4.46.0 - '@rollup/rollup-linux-arm64-gnu': 4.46.0 - '@rollup/rollup-linux-arm64-musl': 4.46.0 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.0 - '@rollup/rollup-linux-ppc64-gnu': 4.46.0 - '@rollup/rollup-linux-riscv64-gnu': 4.46.0 - '@rollup/rollup-linux-riscv64-musl': 4.46.0 - '@rollup/rollup-linux-s390x-gnu': 4.46.0 - '@rollup/rollup-linux-x64-gnu': 4.46.0 - '@rollup/rollup-linux-x64-musl': 4.46.0 - '@rollup/rollup-win32-arm64-msvc': 4.46.0 - '@rollup/rollup-win32-ia32-msvc': 4.46.0 - '@rollup/rollup-win32-x64-msvc': 4.46.0 + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 fsevents: 2.3.3 semver@6.3.1: {} @@ -1109,18 +1115,18 @@ snapshots: seroval@1.3.2: {} - solid-js@1.9.7: + solid-js@1.9.9: dependencies: csstype: 3.1.3 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: '@babel/generator': 7.28.0 '@babel/helper-module-imports': 7.27.1 '@babel/types': 7.28.2 - solid-js: 1.9.7 + solid-js: 1.9.9 transitivePeerDependencies: - supports-color @@ -1133,40 +1139,40 @@ snapshots: 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: - browserslist: 4.25.1 + browserslist: 4.25.2 escalade: 3.2.0 picocolors: 1.1.1 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: '@babel/core': 7.28.0 '@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 - solid-js: 1.9.7 - solid-refresh: 0.6.3(solid-js@1.9.7) - vite: 7.0.6 - vitefu: 1.1.1(vite@7.0.6) + solid-js: 1.9.9 + solid-refresh: 0.6.3(solid-js@1.9.9) + vite: 7.1.2 + vitefu: 1.1.1(vite@7.1.2) transitivePeerDependencies: - supports-color - vite@7.0.6: + vite@7.1.2: dependencies: - esbuild: 0.25.8 + esbuild: 0.25.9 fdir: 6.4.6(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.46.0 + rollup: 4.46.2 tinyglobby: 0.2.14 optionalDependencies: fsevents: 2.3.3 - vitefu@1.1.1(vite@7.0.6): + vitefu@1.1.1(vite@7.1.2): optionalDependencies: - vite: 7.0.6 + vite: 7.1.2 yallist@3.1.1: {} diff --git a/solid-src/src/assets/breeze-dark/actions/16/configure.svg b/solid-src/public/breeze-dark/actions/16/configure.svg similarity index 100% rename from solid-src/src/assets/breeze-dark/actions/16/configure.svg rename to solid-src/public/breeze-dark/actions/16/configure.svg diff --git a/solid-src/src/assets/breeze-dark/actions/16/help-about.svg b/solid-src/public/breeze-dark/actions/16/help-about.svg similarity index 100% rename from solid-src/src/assets/breeze-dark/actions/16/help-about.svg rename to solid-src/public/breeze-dark/actions/16/help-about.svg diff --git a/solid-src/src/assets/breeze-dark/actions/16/media-playback-start.svg b/solid-src/public/breeze-dark/actions/16/media-playback-start.svg similarity index 100% rename from solid-src/src/assets/breeze-dark/actions/16/media-playback-start.svg rename to solid-src/public/breeze-dark/actions/16/media-playback-start.svg diff --git a/solid-src/src/assets/breeze-dark/actions/16/trash-empty.svg b/solid-src/public/breeze-dark/actions/16/trash-empty.svg similarity index 100% rename from solid-src/src/assets/breeze-dark/actions/16/trash-empty.svg rename to solid-src/public/breeze-dark/actions/16/trash-empty.svg diff --git a/solid-src/src/assets/breeze/actions/16/configure.svg b/solid-src/public/breeze/actions/16/configure.svg similarity index 100% rename from solid-src/src/assets/breeze/actions/16/configure.svg rename to solid-src/public/breeze/actions/16/configure.svg diff --git a/solid-src/src/assets/breeze/actions/16/help-about.svg b/solid-src/public/breeze/actions/16/help-about.svg similarity index 100% rename from solid-src/src/assets/breeze/actions/16/help-about.svg rename to solid-src/public/breeze/actions/16/help-about.svg diff --git a/solid-src/src/assets/breeze/actions/16/media-playback-start.svg b/solid-src/public/breeze/actions/16/media-playback-start.svg similarity index 100% rename from solid-src/src/assets/breeze/actions/16/media-playback-start.svg rename to solid-src/public/breeze/actions/16/media-playback-start.svg diff --git a/solid-src/src/assets/breeze/actions/16/trash-empty.svg b/solid-src/public/breeze/actions/16/trash-empty.svg similarity index 100% rename from solid-src/src/assets/breeze/actions/16/trash-empty.svg rename to solid-src/public/breeze/actions/16/trash-empty.svg diff --git a/solid-src/src/App.tsx b/solid-src/src/App.tsx index c9c9961..7ea7a31 100644 --- a/solid-src/src/App.tsx +++ b/solid-src/src/App.tsx @@ -21,9 +21,11 @@ import { } from "./util/ffmpeg"; import Neutralino from "@neutralinojs/lib"; import H264Options from "./components/H264Options"; -import Configure from "./assets/breeze/actions/16/configure.svg"; -import PlaybackStart from "./assets/breeze/actions/16/media-playback-start.svg"; -import TrashEmpty from "./assets/breeze/actions/16/trash-empty.svg"; +import { openFile } from "./util/oshelper"; +import { getTemporaryFilePath } from "./util/path"; +import { generateRandomString } from "./util/string"; +import "./css/icons.css"; +import BreezeIcon from "./components/BreezeIcon"; const commonCodecs = new Set(["h264", "hevc", "vp8", "vp9", "av1", "dnxhd"]); @@ -50,6 +52,7 @@ function App() { const [runningProcesses, setRunningProcesses] = createSignal< RunningProcessInfo[] >([]); + const logs: { [id: number]: string[] } = {}; let supportedCodecs: CodecInfo[] = []; let ffmpegParams: FFmpegParams = { vcodec: "" }; let successfulCount = 0; @@ -65,32 +68,45 @@ function App() { } 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) { - successfulCount += 1; - } else { - unsuccessfulCount += 1; + // If the exit code isn't 255 (the exit code of the program exiting because of cancellation) + if (evt.detail.data !== 255) { + Neutralino.os.showNotification( + "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) { - Neutralino.os.showNotification( - "File Encoding Failed", - `Encoding for file "${runningProcesses()?.find((v) => v.process.id == evt.detail.id)?.file}" failed. Exit code ${evt.detail.data}.`, - ); - } + const tempFilename = `${getTemporaryFilePath()}/vencoder-ffmpeg-${generateRandomString(8)}.log`; + Neutralino.filesystem.writeFile( + tempFilename, + 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 () => { @@ -291,6 +307,8 @@ function App() { setRunningProcesses(processes); + processes.forEach((v) => (logs[v.process.id] = [])); + await Neutralino.storage.setData( "filesBeingProcessed", JSON.stringify( @@ -315,9 +333,37 @@ function App() { async function convertSelectedClicked() { const result = await convertClip(selectedClip()); - if (result !== undefined) { - setRunningProcesses([]); + if (result === undefined) { + 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 ( @@ -370,8 +416,8 @@ function App() { onclick={removeBtnClicked} class="icon-button k-button" > - Remove Selected Video @@ -380,8 +426,8 @@ function App() { onclick={playBtnClicked} class="icon-button k-button" > - Preview Selected Video @@ -389,9 +435,9 @@ function App() { class="icon-button k-button" onclick={settingsBtnPressed} > - Configure Vencoder diff --git a/solid-src/src/components/BreezeIcon.tsx b/solid-src/src/components/BreezeIcon.tsx new file mode 100644 index 0000000..5db6ede --- /dev/null +++ b/solid-src/src/components/BreezeIcon.tsx @@ -0,0 +1,3 @@ +export default function BreezeIcon(props: { icon: string; alt: string }) { + return ; +} diff --git a/solid-src/src/components/H264Options.tsx b/solid-src/src/components/H264Options.tsx index 6a94b94..0472987 100644 --- a/solid-src/src/components/H264Options.tsx +++ b/solid-src/src/components/H264Options.tsx @@ -1,7 +1,7 @@ import { createSignal, Show } from "solid-js"; import type { CodecInfo, FFmpegParams } from "../util/ffmpeg"; -import HelpAbout from "../assets/breeze/actions/16/help-about.svg"; import { os } from "@neutralinojs/lib"; +import BreezeIcon from "./BreezeIcon"; const information = { h264: { @@ -21,6 +21,10 @@ function H264Options(props: { onParamChanged: (key: string, value: any) => void; }) { const [twopass, setTwopass] = createSignal(false); + const defaultCrf = + props.codec?.shortName === "h264" + ? information.h264.defaultCrf + : information.hevc.defaultCrf; return (
@@ -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." > - + @@ -91,7 +95,9 @@ function H264Options(props: { type="number" name="crf" id="crf" - value={props.params.crf ?? "23"} + min="0" + max="51" + value={props.params.crf ?? defaultCrf} oninput={(e) => { props.params.crf = parseInt(e.target.value); 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." > - + diff --git a/solid-src/src/css/icons.css b/solid-src/src/css/icons.css new file mode 100644 index 0000000..c3e0a8c --- /dev/null +++ b/solid-src/src/css/icons.css @@ -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"); + } +} diff --git a/solid-src/src/css/index.css b/solid-src/src/css/index.css index 4d10e6c..2d254f6 100644 --- a/solid-src/src/css/index.css +++ b/solid-src/src/css/index.css @@ -75,12 +75,14 @@ h2 { justify-content: center; align-items: center; - img { + img, + i { width: 16px; height: 16px; } - &:disabled img { + &:disabled img, + &:disabled i { filter: invert(50%); } } diff --git a/solid-src/src/pages/ProgressPage.tsx b/solid-src/src/pages/ProgressPage.tsx index 991ad8d..e857027 100644 --- a/solid-src/src/pages/ProgressPage.tsx +++ b/solid-src/src/pages/ProgressPage.tsx @@ -64,12 +64,17 @@ function ProgressPage() { 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)); break; case "stdErr": break; case "exit": console.log(`FFmpeg exited with code: ${evt.detail.data}`); + os.getSpawnedProcesses().then((processes) => { if (processes.length === 0) { setFinished(true); diff --git a/solid-src/src/util/oshelper.ts b/solid-src/src/util/oshelper.ts new file mode 100644 index 0000000..5c4031e --- /dev/null +++ b/solid-src/src/util/oshelper.ts @@ -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}`); +} diff --git a/solid-src/src/util/path.ts b/solid-src/src/util/path.ts new file mode 100644 index 0000000..22a275a --- /dev/null +++ b/solid-src/src/util/path.ts @@ -0,0 +1,10 @@ +export function getTemporaryFilePath() { + switch (window.NL_OS) { + case "Windows": + return "%temp%"; + case "Linux": + return "/tmp"; + default: + return "."; + } +} diff --git a/solid-src/src/util/string.ts b/solid-src/src/util/string.ts new file mode 100644 index 0000000..df2fea4 --- /dev/null +++ b/solid-src/src/util/string.ts @@ -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; +}