This commit is contained in:
Andrew Pimenov 2026-09-04 10:07:45 +03:00 • committed by GitHub
commit ab6805daf5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -11,8 +11,8 @@ export interface ExportImageDeps {
t(key: string): string;
}
export async function exportSheetImage(deps: ExportImageDeps): Promise<void> {
const { lines: rawLines, results: doc, fontSize, toast, t } = deps;
function createImageCanvas(deps: ExportImageDeps): HTMLCanvasElement {
const { lines: rawLines, results: doc, fontSize } = deps;
const dpr = window.devicePixelRatio || 1;
const style = getComputedStyle(document.documentElement);
const bgColor = style.getPropertyValue("--bg").trim() || "#ffffff";
@ -49,9 +49,11 @@ export async function exportSheetImage(deps: ExportImageDeps): Promise<void> {
}
}
const blob = await new Promise<Blob | null>((res) => canvas.toBlob(res, "image/png"));
if (!blob) { toast(t("imageFailed")); return; }
return canvas;
}
async function copyOrSaveImage(blob: Blob, deps: ExportImageDeps): Promise<void> {
const { toast, t } = deps;
try {
await navigator.clipboard.write([new ClipboardItem({ "image/png": blob })]);
toast(t("imageCopied"));
@ -69,6 +71,18 @@ export async function exportSheetImage(deps: ExportImageDeps): Promise<void> {
}
}
export async function exportSheetImage(deps: ExportImageDeps): Promise<void> {
const canvas = createImageCanvas(deps);
const blob = await new Promise<Blob | null>((res) => canvas.toBlob(res, "image/png"));
if (!blob) {
deps.toast(deps.t("imageFailed"));
return;
}
await copyOrSaveImage(blob, deps);
}
/** chunked to avoid "Maximum call stack size exceeded" from spreading a large array as args */
function bytesToBase64(bytes: Uint8Array): string {
let bin = "";