feat(pdf): add configurable PDF export and improve print rendering

This commit is contained in:
Mateusz Gruszczyński
2026-09-12 00:01:25 +02:00
parent f9cf17554a
commit c5e01916c8
12 changed files with 584 additions and 14 deletions
+9
View File
@@ -20,6 +20,7 @@ import { applyFormat, bindFormatShortcuts, bindIndentationShortcuts } from "@rus
import { bindEmojiPicker } from "@rustpad/emoji-picker";
import { updateImageAliasInLineBySource } from "@rustpad/image-alias";
import { previewEditingHost } from "@rustpad/preview-edit";
import { bindPdfExport } from "@rustpad/pdf-export";
import { createRenderQueue } from "@rustpad/render-queue";
import { alignPreviewLineNumbers, renderMarkdown, setMarkdownFiles, unresolvedMarkdownFileAliases } from "@rustpad/markdown";
import { getNickname, getGuestId, getAuthToken, getAccessToken, setAccessToken } from "@rustpad/session";
@@ -957,6 +958,7 @@ export function startNoteEditor(adapter) {
if (primary && !event.shiftKey && event.key.toLowerCase() === "k") return "link";
if (primary && event.shiftKey && event.key === "7") return "number";
if (primary && event.shiftKey && event.key === "8") return "bullet";
if (primary && !event.shiftKey && event.key === "Enter") return "page-break";
if (primary && event.shiftKey && event.key === "9") return "task";
if (event.altKey && /^[1-4]$/.test(event.key)) return `heading${event.key}`;
return null;
@@ -2051,6 +2053,13 @@ export function startNoteEditor(adapter) {
});
bindFormatShortcuts(editor);
bindIndentationShortcuts(editor, { size: 2 });
bindPdfExport({
button: document.querySelector("#export-pdf"),
dialog: document.querySelector("#pdf-export-dialog"),
form: document.querySelector("#pdf-export-form"),
preview,
title: () => document.querySelector("#document-title")?.textContent?.trim() || document.title,
});
bindEmojiPicker({ editor, details: document.querySelector("#emoji-picker"), search: document.querySelector("#emoji-search"), categories: document.querySelector("#emoji-categories"), grid: document.querySelector("#emoji-grid"), empty: document.querySelector("#emoji-empty") });
document.querySelector("#shortcuts-button").addEventListener("click", () => document.querySelector("#shortcuts-dialog").showModal());
document.querySelector("#close-shortcuts").addEventListener("click", () => document.querySelector("#shortcuts-dialog").close());