Skip to content

Commit 22d6be3

Browse files
committed
feat: replace all app icons with thunder/lightning bolt design
- Generated new icon set from thunder SVG used in UI - Updated all PNG sizes (32, 128, 256, 512, 1024, Windows Store logos) - Regenerated icon.ico and icon.icns with new design - Added icon generation script (generate-icons.mjs) - Added npm run icons command for easy regeneration
1 parent 1f6e3e5 commit 22d6be3

22 files changed

Lines changed: 151 additions & 3 deletions

bun.lock

Lines changed: 75 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generate-icons.mjs

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#!/usr/bin/env node
2+
import sharp from 'sharp';
3+
import { readFileSync, writeFileSync } from 'fs';
4+
import { fileURLToPath } from 'url';
5+
import { dirname, join } from 'path';
6+
7+
const __filename = fileURLToPath(import.meta.url);
8+
const __dirname = dirname(__filename);
9+
10+
const svgBuffer = readFileSync(join(__dirname, 'icon.svg'));
11+
const iconsDir = join(__dirname, 'src-tauri', 'icons');
12+
13+
const sizes = [32, 128, 256, 512, 1024];
14+
15+
async function generateIcons() {
16+
console.log('Generating icons from SVG...');
17+
18+
// Generate PNG files at various sizes
19+
for (const size of sizes) {
20+
await sharp(svgBuffer)
21+
.resize(size, size)
22+
.png()
23+
.toFile(join(iconsDir, `${size}x${size}.png`));
24+
console.log(`✓ ${size}x${size}.png`);
25+
26+
// 2x version for 128px
27+
if (size === 128) {
28+
await sharp(svgBuffer)
29+
.resize(256, 256)
30+
.png()
31+
.toFile(join(iconsDir, '128x128@2x.png'));
32+
console.log('✓ 128x128@2x.png');
33+
}
34+
}
35+
36+
// Base icon.png
37+
await sharp(svgBuffer)
38+
.resize(512, 512)
39+
.png()
40+
.toFile(join(iconsDir, 'icon.png'));
41+
console.log('✓ icon.png');
42+
43+
// Windows Store icons
44+
const storeLogos = [30, 44, 71, 89, 107, 142, 150, 284, 310];
45+
for (const size of storeLogos) {
46+
await sharp(svgBuffer)
47+
.resize(size, size)
48+
.png()
49+
.toFile(join(iconsDir, `Square${size}x${size}Logo.png`));
50+
console.log(`✓ Square${size}x${size}Logo.png`);
51+
}
52+
53+
await sharp(svgBuffer)
54+
.resize(50, 50)
55+
.png()
56+
.toFile(join(iconsDir, 'StoreLogo.png'));
57+
console.log('✓ StoreLogo.png');
58+
59+
console.log('\n✅ All icons generated!');
60+
console.log('\nNote: .ico and .icns files need platform-specific tools.');
61+
console.log('Windows: Use png2ico or similar tool to create icon.ico from the PNGs');
62+
console.log('macOS: Use iconutil or similar tool to create icon.icns');
63+
}
64+
65+
generateIcons().catch(console.error);

icon.svg

Lines changed: 4 additions & 0 deletions
Loading

package.json

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
"dev": "vite",
88
"build": "vue-tsc --noEmit && vite build",
99
"preview": "vite preview",
10-
"tauri": "tauri"
10+
"tauri": "tauri",
11+
"icons": "node generate-icons.mjs && npx png-to-ico src-tauri/icons/256x256.png -o src-tauri/icons/icon.ico && npx png2icons src-tauri/icons/1024x1024.png src-tauri/icons/icon -icns"
1112
},
1213
"dependencies": {
1314
"@tauri-apps/api": "^2",
@@ -16,10 +17,13 @@
1617
"vue": "^3.5.13"
1718
},
1819
"devDependencies": {
20+
"@tauri-apps/cli": "^2",
1921
"@vitejs/plugin-vue": "^5.2.1",
22+
"png-to-ico": "^3.0.1",
23+
"png2icons": "^2.0.1",
24+
"sharp": "^0.34.5",
2025
"typescript": "~5.6.2",
2126
"vite": "^6.0.3",
22-
"vue-tsc": "^2.1.10",
23-
"@tauri-apps/cli": "^2"
27+
"vue-tsc": "^2.1.10"
2428
}
2529
}

src-tauri/icons/1024x1024.png

43.5 KB
Loading

src-tauri/icons/128x128.png

-1.63 KB
Loading

src-tauri/icons/128x128@2x.png

-2.63 KB
Loading

src-tauri/icons/256x256.png

4.21 KB
Loading

src-tauri/icons/32x32.png

-276 Bytes
Loading

src-tauri/icons/512x512.png

15.7 KB
Loading

0 commit comments

Comments
 (0)