/** `getDisplayMedia` → single PNG frame (data URL). */ function getImageCaptureCtor(): | (new ( track: MediaStreamTrack ) => { grabFrame: () => Promise }) | undefined { if (typeof window === "undefined") return undefined; const IC = ( window as unknown as { ImageCapture?: new (track: MediaStreamTrack) => { grabFrame: () => Promise }; } ).ImageCapture; return typeof IC === "function" ? IC : undefined; } function stopAllTracks(stream: MediaStream): void { for (const t of stream.getTracks()) { t.stop(); } } async function captureTrackToPngDataUrl( track: MediaStreamTrack, stream: MediaStream ): Promise { const ImageCtor = getImageCaptureCtor(); if (ImageCtor !== undefined) { try { const ic = new ImageCtor(track); const bitmap = await ic.grabFrame(); try { const canvas = document.createElement("canvas"); canvas.width = bitmap.width; canvas.height = bitmap.height; const ctx = canvas.getContext("2d"); if (!ctx) { stopAllTracks(stream); return null; } ctx.drawImage(bitmap, 0, 0); stopAllTracks(stream); return canvas.toDataURL("image/png"); } finally { if ("close" in bitmap && typeof bitmap.close === "function") { bitmap.close(); } } } catch { /* fall through to