All files / src/features/project-actions handleExportPNG.ts

0% Statements 0/16
0% Branches 0/4
0% Functions 0/1
0% Lines 0/15

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38                                                                           
import { exportMergedPNG } from './exportMergedPNG';
import type { Project } from '@/shared/types';
 
export async function handleExportPNG(activeProject: Project) {
	if (!activeProject) return;
 
	const dataUrl = await exportMergedPNG();
	const fileName = `${activeProject.name}.png`;
 
	// --- File System Access API (Save As)
	if (typeof window.showSaveFilePicker === 'function') {
		const picker = window.showSaveFilePicker.bind(window);
 
		const handle = await picker({
			suggestedName: fileName,
			types: [
				{
					description: 'PNG Image',
					accept: { 'image/png': ['.png'] },
				},
			],
		});
 
		const writable = await handle.createWritable();
		const blob = await (await fetch(dataUrl)).blob();
 
		await writable.write(blob);
		await writable.close();
		return;
	}
 
	// --- Fallback (download)
	const link = document.createElement('a');
	link.href = dataUrl;
	link.download = fileName;
	link.click();
}