export function openPdfBlob(blob: Blob, filename: string, targetWindow?: Window | null) { const url = URL.createObjectURL(blob); if (targetWindow && !targetWindow.closed) { targetWindow.location.href = url; setTimeout(() => URL.revokeObjectURL(url), 60_000); return true; } const opened = window.open(url, '_blank'); if (opened) { setTimeout(() => URL.revokeObjectURL(url), 60_000); return true; } const a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); a.remove(); URL.revokeObjectURL(url); return false; } /** Force a browser download of a blob under the given filename (no preview tab). */ export function saveBlob(blob: Blob, filename: string) { const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; document.body.appendChild(a); a.click(); a.remove(); // Delay revoke so the download has time to start (esp. for rapid multi-saves). setTimeout(() => URL.revokeObjectURL(url), 10_000); }