diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 163273e6..b9bcf8de 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -84,6 +84,12 @@ jobs: cache: npm - run: npm install -g npm@11 --no-fund --no-audit - run: npm ci --no-fund + # Electron 42 dropped the postinstall that used to fetch the binary: it now + # downloads on the first `require('electron')`. Doing it HERE keeps that + # download out of the first test (where it reads as a mystery timeout) and + # out of electron-vite, which asks for the path and never triggers it. + - name: Fetch the Electron binary + run: node -e "require('electron')" # Electron's runtime libraries + Xvfb + a window manager — the same set the # Docker test env installs. openbox is NOT optional: unmanaged, the window # takes a different width and the diff panes split 571/572 instead of evenly. diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6931185e..aa67a3bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -38,6 +38,12 @@ jobs: cache: npm - run: npm install -g npm@11 --no-fund --no-audit - run: npm ci --no-fund + # Electron 42 dropped the postinstall that used to fetch the binary: it now + # downloads on the first `require('electron')`. Doing it HERE keeps that + # download out of the first test (where it reads as a mystery timeout) and + # out of electron-vite, which asks for the path and never triggers it. + - name: Fetch the Electron binary + run: node -e "require('electron')" # Electron's runtime libraries + Xvfb + a window manager — the same set the # Docker test env installs. openbox is NOT optional: unmanaged, the window # takes a different width and the diff panes split 571/572 instead of evenly. diff --git a/docker/Dockerfile b/docker/Dockerfile index 14206197..34374831 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -48,6 +48,11 @@ ENV PLAYWRIGHT_SKIP_BROWSER_DOWNLOAD=1 # Linux Electron binaries. COPY package.json package-lock.json ./ RUN npm ci +# Electron 42 replaced its postinstall with a download on first require(). The +# volume that shadows node_modules is populated from THIS layer, and the dev +# server asks electron-vite for the path — which reads path.txt and throws +# rather than fetching. So the binary is pulled in here, at build time. +RUN node -e "require('electron')" COPY . . diff --git a/docs/screenshots/themes/snippet-colour-amber.png b/docs/screenshots/themes/snippet-colour-amber.png index 66679218..025f38b8 100644 Binary files a/docs/screenshots/themes/snippet-colour-amber.png and b/docs/screenshots/themes/snippet-colour-amber.png differ diff --git a/docs/screenshots/themes/snippet-colour-beacon.png b/docs/screenshots/themes/snippet-colour-beacon.png index 8a063f74..87ddf03e 100644 Binary files a/docs/screenshots/themes/snippet-colour-beacon.png and b/docs/screenshots/themes/snippet-colour-beacon.png differ diff --git a/docs/screenshots/themes/snippet-colour-bloom.png b/docs/screenshots/themes/snippet-colour-bloom.png index 84f4c082..30bf02b7 100644 Binary files a/docs/screenshots/themes/snippet-colour-bloom.png and b/docs/screenshots/themes/snippet-colour-bloom.png differ diff --git a/docs/screenshots/themes/snippet-colour-contrast.png b/docs/screenshots/themes/snippet-colour-contrast.png index 578ebc4b..26664ab4 100644 Binary files a/docs/screenshots/themes/snippet-colour-contrast.png and b/docs/screenshots/themes/snippet-colour-contrast.png differ diff --git a/docs/screenshots/themes/snippet-colour-dark.png b/docs/screenshots/themes/snippet-colour-dark.png index cca5ac3f..310ada6b 100644 Binary files a/docs/screenshots/themes/snippet-colour-dark.png and b/docs/screenshots/themes/snippet-colour-dark.png differ diff --git a/docs/screenshots/themes/snippet-colour-dim.png b/docs/screenshots/themes/snippet-colour-dim.png index c90fff3b..bb423a69 100644 Binary files a/docs/screenshots/themes/snippet-colour-dim.png and b/docs/screenshots/themes/snippet-colour-dim.png differ diff --git a/docs/screenshots/themes/snippet-colour-ember.png b/docs/screenshots/themes/snippet-colour-ember.png index 3ff5853d..9ff24d9f 100644 Binary files a/docs/screenshots/themes/snippet-colour-ember.png and b/docs/screenshots/themes/snippet-colour-ember.png differ diff --git a/docs/screenshots/themes/snippet-colour-graphite.png b/docs/screenshots/themes/snippet-colour-graphite.png index 39a12728..417cd906 100644 Binary files a/docs/screenshots/themes/snippet-colour-graphite.png and b/docs/screenshots/themes/snippet-colour-graphite.png differ diff --git a/docs/screenshots/themes/snippet-colour-light.png b/docs/screenshots/themes/snippet-colour-light.png index 484227ae..fbe8d597 100644 Binary files a/docs/screenshots/themes/snippet-colour-light.png and b/docs/screenshots/themes/snippet-colour-light.png differ diff --git a/docs/screenshots/themes/snippet-colour-linen.png b/docs/screenshots/themes/snippet-colour-linen.png index 06ddffc4..dadd4b34 100644 Binary files a/docs/screenshots/themes/snippet-colour-linen.png and b/docs/screenshots/themes/snippet-colour-linen.png differ diff --git a/docs/screenshots/themes/snippet-colour-matrix.png b/docs/screenshots/themes/snippet-colour-matrix.png index b21a84a5..382cb1ca 100644 Binary files a/docs/screenshots/themes/snippet-colour-matrix.png and b/docs/screenshots/themes/snippet-colour-matrix.png differ diff --git a/docs/screenshots/themes/snippet-colour-meridian.png b/docs/screenshots/themes/snippet-colour-meridian.png index 0fd5be37..086b4cdc 100644 Binary files a/docs/screenshots/themes/snippet-colour-meridian.png and b/docs/screenshots/themes/snippet-colour-meridian.png differ diff --git a/docs/screenshots/themes/snippet-colour-neon.png b/docs/screenshots/themes/snippet-colour-neon.png index f4a66f95..f03b6bbb 100644 Binary files a/docs/screenshots/themes/snippet-colour-neon.png and b/docs/screenshots/themes/snippet-colour-neon.png differ diff --git a/docs/screenshots/themes/snippet-colour-nord.png b/docs/screenshots/themes/snippet-colour-nord.png index 207e9510..0ad1ac4e 100644 Binary files a/docs/screenshots/themes/snippet-colour-nord.png and b/docs/screenshots/themes/snippet-colour-nord.png differ diff --git a/docs/screenshots/themes/snippet-colour-nyan.png b/docs/screenshots/themes/snippet-colour-nyan.png index 13b978f5..b0ff90bf 100644 Binary files a/docs/screenshots/themes/snippet-colour-nyan.png and b/docs/screenshots/themes/snippet-colour-nyan.png differ diff --git a/docs/screenshots/themes/snippet-colour-sepia.png b/docs/screenshots/themes/snippet-colour-sepia.png index faaf6811..d028cd4c 100644 Binary files a/docs/screenshots/themes/snippet-colour-sepia.png and b/docs/screenshots/themes/snippet-colour-sepia.png differ diff --git a/docs/screenshots/themes/snippet-colour-solar.png b/docs/screenshots/themes/snippet-colour-solar.png index 4728df1f..fbb5e937 100644 Binary files a/docs/screenshots/themes/snippet-colour-solar.png and b/docs/screenshots/themes/snippet-colour-solar.png differ diff --git a/docs/screenshots/themes/snippet-colour-tide.png b/docs/screenshots/themes/snippet-colour-tide.png index ce1f8e39..0aa22e67 100644 Binary files a/docs/screenshots/themes/snippet-colour-tide.png and b/docs/screenshots/themes/snippet-colour-tide.png differ diff --git a/docs/screenshots/themes/snippet-colour-vector.png b/docs/screenshots/themes/snippet-colour-vector.png index 6c7c48df..42d50cea 100644 Binary files a/docs/screenshots/themes/snippet-colour-vector.png and b/docs/screenshots/themes/snippet-colour-vector.png differ diff --git a/docs/screenshots/themes/snippet-colour-volcano.png b/docs/screenshots/themes/snippet-colour-volcano.png index 05c9668c..3d86a6a8 100644 Binary files a/docs/screenshots/themes/snippet-colour-volcano.png and b/docs/screenshots/themes/snippet-colour-volcano.png differ diff --git a/package-lock.json b/package-lock.json index 38e77b3f..b20cacf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -30,7 +30,7 @@ "@playwright/test": "^1.61.1", "@vitejs/plugin-vue": "^5.2.1", "@vitest/coverage-v8": "^4.1.10", - "electron": "^39.8.10", + "electron": "^42.9.0", "electron-builder": "^26.15.3", "electron-vite": "^5.0.0", "eslint": "^10.7.0", @@ -522,6 +522,16 @@ "node": ">=20.19.0" } }, + "node_modules/@electron-internal/extract-zip": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@electron-internal/extract-zip/-/extract-zip-1.0.5.tgz", + "integrity": "sha512-+bqFCP98pLI0Tt0XQo1TmlXtwjWchISndDOxCkEcIuUgXWpBnLyRI+2DU+mesvnMMX6L1XDqYNA0lXNDHd/yiA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=22.12.0" + } + }, "node_modules/@electron/asar": { "version": "3.4.1", "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.4.1.tgz", @@ -608,23 +618,50 @@ } }, "node_modules/@electron/get": { - "version": "2.0.3", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@electron/get/-/get-5.1.0.tgz", + "integrity": "sha512-3kSBtG8ObcTVfXanm5vVJ6UnBLEVmVsRk1M+vGqCuMBV+XLCbJYuWQful+yIy0GQDsSlK0kHEriEHn7SPk4EnA==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", - "env-paths": "^2.2.0", - "fs-extra": "^8.1.0", - "got": "^11.8.5", + "env-paths": "^3.0.0", + "graceful-fs": "^4.2.11", "progress": "^2.0.3", - "semver": "^6.2.0", + "semver": "^7.6.3", "sumchecker": "^3.0.1" }, "engines": { - "node": ">=12" + "node": ">=22.12.0" }, "optionalDependencies": { - "global-agent": "^3.0.0" + "undici": "^7.24.4" + } + }, + "node_modules/@electron/get/node_modules/env-paths": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-3.0.0.tgz", + "integrity": "sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@electron/get/node_modules/semver": { + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@electron/notarize": { @@ -3333,11 +3370,13 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "22.20.1", + "version": "24.13.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.13.3.tgz", + "integrity": "sha512-Dh8vAsV36ig5wa9OX4pXvMc9D3Veibfw2wix0CUwYODLD8nkj9UsLjASr49nPg+2eKzxhBV+v7L8pXvT4e639Q==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.21.0" + "undici-types": "~7.18.0" } }, "node_modules/@types/responselike": { @@ -3355,15 +3394,6 @@ "license": "MIT", "optional": true }, - "node_modules/@types/yauzl": { - "version": "2.10.3", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@upsetjs/venn.js": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", @@ -4119,14 +4149,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -5358,22 +5380,22 @@ } }, "node_modules/electron": { - "version": "39.8.10", - "resolved": "https://registry.npmjs.org/electron/-/electron-39.8.10.tgz", - "integrity": "sha512-zbYtGPYUI7PzqLAzkk21Rk6j67WN0hxn0Mq/njErZo1d0HSf33is4f8ICI5fMLy5vYe0JtCtM5sYunNOaochSQ==", + "version": "42.9.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-42.9.0.tgz", + "integrity": "sha512-xyKfPbHP43Jx22Z1hItLR4KB5h3/avb5BIX4xaQZ6uPPRY4cQxuHnRVrKCGbSsMa/9zd0bBT4TAVNVuVjYcYtw==", "dev": true, - "hasInstallScript": true, "license": "MIT", "dependencies": { - "@electron/get": "^2.0.0", - "@types/node": "^22.7.7", - "extract-zip": "^2.0.1" + "@electron-internal/extract-zip": "^1.0.1", + "@electron/get": "^5.0.0", + "@types/node": "^24.9.0" }, "bin": { - "electron": "cli.js" + "electron": "cli.js", + "install-electron": "install.js" }, "engines": { - "node": ">= 12.20.55" + "node": ">= 22.12.0" } }, "node_modules/electron-builder": { @@ -6049,25 +6071,6 @@ "dev": true, "license": "Apache-2.0" }, - "node_modules/extract-zip": { - "version": "2.0.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "debug": "^4.1.1", - "get-stream": "^5.1.0", - "yauzl": "^2.10.0" - }, - "bin": { - "extract-zip": "cli.js" - }, - "engines": { - "node": ">= 10.17.0" - }, - "optionalDependencies": { - "@types/yauzl": "^2.9.1" - } - }, "node_modules/fast-deep-equal": { "version": "3.1.3", "dev": true, @@ -6102,14 +6105,6 @@ ], "license": "BSD-3-Clause" }, - "node_modules/fd-slicer": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pend": "~1.2.0" - } - }, "node_modules/fdir": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", @@ -6255,19 +6250,6 @@ "node": ">= 6" } }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -8135,11 +8117,6 @@ "url": "https://github.com/sponsors/jet2jet" } }, - "node_modules/pend": { - "version": "1.2.0", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "license": "ISC" @@ -9413,7 +9390,9 @@ } }, "node_modules/undici-types": { - "version": "6.21.0", + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", "dev": true, "license": "MIT" }, @@ -10198,15 +10177,6 @@ "node": ">=12" } }, - "node_modules/yauzl": { - "version": "2.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "dev": true, diff --git a/package.json b/package.json index f3fc4841..dabf7fdf 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "@playwright/test": "^1.61.1", "@vitejs/plugin-vue": "^5.2.1", "@vitest/coverage-v8": "^4.1.10", - "electron": "^39.8.10", + "electron": "^42.9.0", "electron-builder": "^26.15.3", "electron-vite": "^5.0.0", "eslint": "^10.7.0", @@ -75,7 +75,7 @@ "esbuild@0.25.12": true, "fsevents@2.3.3": true, "fsevents@2.3.2": true, - "electron@39.8.10": true, - "vue-demi@0.14.10": true + "vue-demi@0.14.10": true, + "electron@42.9.0": true } }