/** * Creates minimal placeholder PNG icons without any dependencies. * Run: node assets/create-placeholder-icons.js */ const fs = require('fs') const path = require('path') // Minimal valid 16x16 PNG (dark blue background) function createSimplePng(size) { // Use a canvas-like approach with raw PNG data // This creates a simple colored square PNG const { createCanvas } = (() => { try { return require('canvas') } catch { return null } })() || {} if (createCanvas) { const canvas = createCanvas(size, size) const ctx = canvas.getContext('2d') // Background ctx.fillStyle = '#1a1a2e' const r = size * 0.19 ctx.beginPath() ctx.moveTo(r, 0) ctx.lineTo(size - r, 0) ctx.quadraticCurveTo(size, 0, size, r) ctx.lineTo(size, size - r) ctx.quadraticCurveTo(size, size, size - r, size) ctx.lineTo(r, size) ctx.quadraticCurveTo(0, size, 0, size - r) ctx.lineTo(0, r) ctx.quadraticCurveTo(0, 0, r, 0) ctx.closePath() ctx.fill() // Play triangle const cx = size / 2, cy = size / 2 const s = size * 0.3 ctx.fillStyle = '#4f8ef7' ctx.beginPath() ctx.moveTo(cx - s * 0.5, cy - s * 0.6) ctx.lineTo(cx + s * 0.7, cy) ctx.lineTo(cx - s * 0.5, cy + s * 0.6) ctx.closePath() ctx.fill() // Red dot ctx.fillStyle = '#ef4444' ctx.beginPath() ctx.arc(size * 0.75, size * 0.25, size * 0.1, 0, Math.PI * 2) ctx.fill() return canvas.toBuffer('image/png') } // Fallback: minimal 1x1 PNG return Buffer.from( '89504e470d0a1a0a0000000d4948445200000001000000010802000000' + '9001' + '2e00000000c4944415408d7626060600000000200014fd7181000000049454e44ae426082', 'hex' ) } const sizes = [ { name: 'icon.png', size: 512 }, { name: 'tray-icon.png', size: 32 } ] for (const { name, size } of sizes) { const buf = createSimplePng(size) fs.writeFileSync(path.join(__dirname, name), buf) console.log(`Created ${name}`) }