From 8114103117fc56de9d49ae79da8c3e18533b97ce Mon Sep 17 00:00:00 2001 From: Gwadaking Date: Tue, 14 Apr 2026 17:29:10 -0400 Subject: [PATCH] =?UTF-8?q?fix:=20ic=C3=B4nes=20PNG=20+=20fetch=20handler?= =?UTF-8?q?=20pour=20d=C3=A9clencher=20le=20prompt=20PWA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Sonnet 4.6 --- frontend/index.html | 2 +- frontend/package-lock.json | 550 +++++++++++++++++++++++++++++++++- frontend/package.json | 1 + frontend/public/icon-192.png | Bin 0 -> 10993 bytes frontend/public/icon-512.png | Bin 0 -> 39382 bytes frontend/public/manifest.json | 12 +- frontend/public/sw.js | 8 +- frontend/scripts/gen-icons.js | 17 ++ 8 files changed, 584 insertions(+), 6 deletions(-) create mode 100644 frontend/public/icon-192.png create mode 100644 frontend/public/icon-512.png create mode 100644 frontend/scripts/gen-icons.js diff --git a/frontend/index.html b/frontend/index.html index dcece1f..caa4a5d 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,7 +3,7 @@ - + diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 96c3514..28faffa 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -25,6 +25,7 @@ "eslint-plugin-react-refresh": "^0.5.2", "globals": "^17.4.0", "jsdom": "^29.0.2", + "sharp": "^0.34.5", "vite": "^8.0.1", "vitest": "^4.1.4" } @@ -498,7 +499,6 @@ "dev": true, "license": "MIT", "optional": true, - "peer": true, "dependencies": { "tslib": "^2.4.0" } @@ -742,6 +742,496 @@ "url": "https://github.com/sponsors/nzakas" } }, + "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/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -3571,6 +4061,64 @@ "node": ">=0.10.0" } }, + "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/sharp/node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", diff --git a/frontend/package.json b/frontend/package.json index 74cc8b0..bc47383 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -29,6 +29,7 @@ "eslint-plugin-react-refresh": "^0.5.2", "globals": "^17.4.0", "jsdom": "^29.0.2", + "sharp": "^0.34.5", "vite": "^8.0.1", "vitest": "^4.1.4" } diff --git a/frontend/public/icon-192.png b/frontend/public/icon-192.png new file mode 100644 index 0000000000000000000000000000000000000000..d99664265ad22e5fa3b919ab8df24aa89e3cb3d5 GIT binary patch literal 10993 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 LN)o@t4E_EOfg=bF literal 0 HcmV?d00001 diff --git a/frontend/public/icon-512.png b/frontend/public/icon-512.png new file mode 100644 index 0000000000000000000000000000000000000000..6ab82c29e844ac710839e83b8e78b5700c9ac049 GIT binary patch literal 39382 zcmZU4cU)83()LaWp?9Qr5kx_%fYcyes$iiBC{m;=y(R>t2neWv^eUjzkzNu&1f>c{ z6$qmA5|k1k<;ywe-uJujegEJWvUm2(tXZ>WJu~as3FfBy475D7001x;8t7O60GRwQ z7@&rdKMsN?PstxNz6REQ06@p~*B=PT&gB9CA;3^a>sD~?cBgCV!|4FA_@#!1`HlCR z&KY~}By+0e2A#96On+M}RG+(*ksHM%Zvz9E$^F#_iTZ_};4elKPtJ zQi#q3E3D8J7KS(ic0h9!AE;RKL!l}0_CQoV=${L2Ok)BD%%DOO7}bAXF^3`)LHv*p zRDazsRELELXH-T{ILx^a%k3{&6JSgX zi_iT31~F++hybh|5U@JMzsENgPyW&W_Q0$EV?YJuzkCAY`EPFvvHUM5k#(B?W20R? zmCXlH?S>4bm=ptx6vcfn$aNbIqzxl-?xHq~mjXqxf{~Z)u6=sH9w3bRufv&0yl126 z0`7-g&M2lRRJ-9|Z6hW-=`bPE6cP$0N3F9ug*!#5G+l(X=qv@7+96s4e4k@d-x}M8 z*ruPU*A{1O3B=Rmtg-S}Jsycrvu?|i$NR5{!RIQZo^p9A*wEi-yCA;&=uW(j809u3W}0+2Hx8cYLe%-2fHc&*Ys@2K4zmK9}H} zppIJKV-yx9$P0mm$V*`$xVIl+wh{giFn&T+TI=36L0K@{!#pHMWdg*2s?pU^s!0k~8FMs}*Y7FOrEWdG&`hNG_ zPuqYCqT&{8Ep4^vUv~=&rBwjd?T3!J13;b;=IOsKSM13b=4enJgtG9UBt%3rud9@^ zR{zVAm{Y55i_iiv{JcE3@;q?NmBsuu>sN++&fiPLJSWs)Z?qhv|0p~%4CpJFF@Y`J zQ$Z;_{mV)kdvH;`D?&-8BOy(KDNW$o$LLq*3gsn>e*Vh^w*u!mBi7m0xjkQ<6G{Q8 zOepB)|MT4aKl2)=U6z#C+}xnj%zk~~A9S$5KY5o>`7STF|jIT#;Ml^5TGot3dgS!iBf$=JeGTJ?L^ z;)B)-;T{~&uzHzE)dwOs#b%cFKKH=PG6=a{yL<;6V-r_t@8y+j2Ys6RRP@Fxsp
  • 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 AL;wH) literal 0 HcmV?d00001 diff --git a/frontend/public/manifest.json b/frontend/public/manifest.json index 2c45676..004e472 100644 --- a/frontend/public/manifest.json +++ b/frontend/public/manifest.json @@ -11,9 +11,15 @@ "lang": "fr", "icons": [ { - "src": "/icon.svg", - "sizes": "any", - "type": "image/svg+xml", + "src": "/icon-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "any" + }, + { + "src": "/icon-512.png", + "sizes": "512x512", + "type": "image/png", "purpose": "any maskable" } ], diff --git a/frontend/public/sw.js b/frontend/public/sw.js index 57081c1..bc4e50d 100644 --- a/frontend/public/sw.js +++ b/frontend/public/sw.js @@ -1,4 +1,10 @@ -// Service Worker — Sargasse-Sentry push notifications +// Service Worker — Sargasse-Sentry +// fetch handler requis par Chrome pour le critère d'installabilité PWA +self.addEventListener('fetch', (event) => { + // Pass-through : on ne met rien en cache pour l'instant (app data-driven, pas offline) + event.respondWith(fetch(event.request)); +}); + self.addEventListener('push', (event) => { if (!event.data) return; diff --git a/frontend/scripts/gen-icons.js b/frontend/scripts/gen-icons.js new file mode 100644 index 0000000..768b335 --- /dev/null +++ b/frontend/scripts/gen-icons.js @@ -0,0 +1,17 @@ +// Génère icon-192.png et icon-512.png depuis icon.svg +import sharp from 'sharp'; +import { readFileSync } from 'fs'; +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const svgPath = resolve(__dirname, '../public/icon.svg'); +const svg = readFileSync(svgPath); + +for (const size of [192, 512]) { + await sharp(svg) + .resize(size, size) + .png() + .toFile(resolve(__dirname, `../public/icon-${size}.png`)); + console.log(`icon-${size}.png generated`); +}