From 0b12aa027f7c52aa5975c20695e0ad492f53e9b7 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 18 Apr 2026 16:12:40 +0200 Subject: [PATCH] =?UTF-8?q?feat(pwa):=20PNG-Icons=20192/512=20+=20Manifest?= =?UTF-8?q?=20maskable-f=C3=A4hig?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Android Chrome bevorzugt für den Home-Screen rasterbare PNG-Icons über reines SVG. 192×192 und 512×512 werden aus static/icon.svg per Sharp-Skript gerendert (npm run render:icons) und committet, damit CI keine zusätzliche Abhängigkeit hat. Manifest referenziert alle drei Icons mit purpose "any maskable" → rund-/squircle-sicher. Co-Authored-By: Claude Opus 4.7 (1M context) --- package-lock.json | 555 ++++++++++++++++++++++++++++++++++++ package.json | 4 +- scripts/render-icons.mjs | 19 ++ static/icon-192.png | Bin 0 -> 6192 bytes static/icon-512.png | Bin 0 -> 21833 bytes static/manifest.webmanifest | 14 +- 6 files changed, 590 insertions(+), 2 deletions(-) create mode 100644 scripts/render-icons.mjs create mode 100644 static/icon-192.png create mode 100644 static/icon-512.png diff --git a/package-lock.json b/package-lock.json index 7d35e99..02524b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,6 +25,7 @@ "@types/node": "^22.9.0", "prettier": "^3.3.3", "prettier-plugin-svelte": "^3.2.7", + "sharp": "^0.34.5", "svelte": "^5.1.0", "svelte-check": "^4.0.5", "typescript": "^5.6.3", @@ -32,6 +33,17 @@ "vitest": "^2.1.4" } }, + "node_modules/@emnapi/runtime": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.10.0.tgz", + "integrity": "sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -423,6 +435,496 @@ "node": ">=12" } }, + "node_modules/@img/colour": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@img/colour/-/colour-1.1.0.tgz", + "integrity": "sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.34.5.tgz", + "integrity": "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.5.tgz", + "integrity": "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.2.4.tgz", + "integrity": "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.4.tgz", + "integrity": "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.4.tgz", + "integrity": "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.4.tgz", + "integrity": "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-ppc64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.4.tgz", + "integrity": "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-riscv64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-riscv64/-/sharp-libvips-linux-riscv64-1.2.4.tgz", + "integrity": "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.4.tgz", + "integrity": "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.4.tgz", + "integrity": "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.4.tgz", + "integrity": "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.4.tgz", + "integrity": "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.5.tgz", + "integrity": "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.5.tgz", + "integrity": "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-ppc64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.5.tgz", + "integrity": "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-ppc64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-riscv64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-riscv64/-/sharp-linux-riscv64-0.34.5.tgz", + "integrity": "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-riscv64": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.5.tgz", + "integrity": "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.2.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.5.tgz", + "integrity": "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.5.tgz", + "integrity": "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.5.tgz", + "integrity": "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.2.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.5.tgz", + "integrity": "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.7.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-arm64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.5.tgz", + "integrity": "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.5.tgz", + "integrity": "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.5.tgz", + "integrity": "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, "node_modules/@isaacs/cliui": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", @@ -3161,6 +3663,51 @@ "dev": true, "license": "MIT" }, + "node_modules/sharp": { + "version": "0.34.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.34.5.tgz", + "integrity": "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@img/colour": "^1.0.0", + "detect-libc": "^2.1.2", + "semver": "^7.7.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.34.5", + "@img/sharp-darwin-x64": "0.34.5", + "@img/sharp-libvips-darwin-arm64": "1.2.4", + "@img/sharp-libvips-darwin-x64": "1.2.4", + "@img/sharp-libvips-linux-arm": "1.2.4", + "@img/sharp-libvips-linux-arm64": "1.2.4", + "@img/sharp-libvips-linux-ppc64": "1.2.4", + "@img/sharp-libvips-linux-riscv64": "1.2.4", + "@img/sharp-libvips-linux-s390x": "1.2.4", + "@img/sharp-libvips-linux-x64": "1.2.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", + "@img/sharp-libvips-linuxmusl-x64": "1.2.4", + "@img/sharp-linux-arm": "0.34.5", + "@img/sharp-linux-arm64": "0.34.5", + "@img/sharp-linux-ppc64": "0.34.5", + "@img/sharp-linux-riscv64": "0.34.5", + "@img/sharp-linux-s390x": "0.34.5", + "@img/sharp-linux-x64": "0.34.5", + "@img/sharp-linuxmusl-arm64": "0.34.5", + "@img/sharp-linuxmusl-x64": "0.34.5", + "@img/sharp-wasm32": "0.34.5", + "@img/sharp-win32-arm64": "0.34.5", + "@img/sharp-win32-ia32": "0.34.5", + "@img/sharp-win32-x64": "0.34.5" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -3583,6 +4130,14 @@ "node": ">=6" } }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD", + "optional": true + }, "node_modules/tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", diff --git a/package.json b/package.json index 5c2dd7f..ae72f6a 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "test": "vitest run", "test:watch": "vitest", "lint": "eslint .", - "format": "prettier --write ." + "format": "prettier --write .", + "render:icons": "node scripts/render-icons.mjs" }, "devDependencies": { "@sveltejs/adapter-node": "^5.2.0", @@ -21,6 +22,7 @@ "@types/node": "^22.9.0", "prettier": "^3.3.3", "prettier-plugin-svelte": "^3.2.7", + "sharp": "^0.34.5", "svelte": "^5.1.0", "svelte-check": "^4.0.5", "typescript": "^5.6.3", diff --git a/scripts/render-icons.mjs b/scripts/render-icons.mjs new file mode 100644 index 0000000..b59f414 --- /dev/null +++ b/scripts/render-icons.mjs @@ -0,0 +1,19 @@ +// Rendert PWA-Icons aus static/icon.svg in die Größen, die Android/iOS +// für Home-Screen-Icons bevorzugen. Einmal lokal ausführen und die +// PNGs committen — keine CI-Abhängigkeit. +import sharp from 'sharp'; +import { readFile } from 'node:fs/promises'; +import { fileURLToPath } from 'node:url'; +import { dirname, join } from 'node:path'; + +const here = dirname(fileURLToPath(import.meta.url)); +const root = join(here, '..'); +const src = await readFile(join(root, 'static/icon.svg')); + +for (const size of [192, 512]) { + await sharp(src, { density: 400 }) + .resize(size, size, { fit: 'contain', background: { r: 248, g: 250, b: 248, alpha: 1 } }) + .png() + .toFile(join(root, `static/icon-${size}.png`)); + console.log(`wrote static/icon-${size}.png`); +} diff --git a/static/icon-192.png b/static/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..f8b788773e021adee182557cdd79d6194f9cb41d GIT binary patch literal 6192 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 literal 0 HcmV?d00001 diff --git a/static/icon-512.png b/static/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..cc5f0dfb06467650628a75310eea28c10d0a009c GIT binary patch literal 21833 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 literal 0 HcmV?d00001 diff --git a/static/manifest.webmanifest b/static/manifest.webmanifest index 563d18f..08fb156 100644 --- a/static/manifest.webmanifest +++ b/static/manifest.webmanifest @@ -13,7 +13,19 @@ "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml", - "purpose": "any" + "purpose": "any maskable" + }, + { + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any maskable" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "any maskable" } ] }