From 9e4811b6ccc03afa8e26a80f6565ec947dd2b712 Mon Sep 17 00:00:00 2001 From: James Magahern Date: Mon, 2 Nov 2026 21:16:49 -0800 Subject: [PATCH] Restore compact maskable PWA icon --- .../icons/icon-maskable-compact-512.png | Bin 0 -> 14076 bytes web/public/manifest.webmanifest | 6 ++++++ web/tests/pwa-manifest.test.mjs | 18 ++++++++++++++++++ 3 files changed, 24 insertions(+) create mode 100644 web/public/icons/icon-maskable-compact-512.png create mode 100644 web/tests/pwa-manifest.test.mjs diff --git a/web/public/icons/icon-maskable-compact-512.png b/web/public/icons/icon-maskable-compact-512.png new file mode 100644 index 0000000000000000000000000000000000000000..57dcc06e0b7c13fb1f2680162c2f28b09cb41024 GIT binary patch literal 14076 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 { + const manifest = JSON.parse(await readFile(new URL('../public/manifest.webmanifest', import.meta.url), 'utf8')); + for (const size of ['192x192', '512x512']) { + assert.ok(manifest.icons.some(icon => icon.sizes === size && (icon.purpose ?? 'any').split(/\s+/).includes('any'))); + } + const maskable = manifest.icons.filter(icon => (icon.purpose ?? 'any').split(/\s+/).includes('maskable')); + assert.equal(maskable.length, 1); + assert.equal(maskable[0].sizes, '512x512'); + assert.equal(maskable[0].type, 'image/png'); + const image = await readFile(new URL(`../public${maskable[0].src}`, import.meta.url)); + assert.ok(image.length <= 32 * 1024); + assert.equal(image.readUInt32BE(16), 512); + assert.equal(image.readUInt32BE(20), 512); +});