import type { PlimiPlugin } from "../../core/plugins/plugin-types"; import { runPdfWatermark } from "./run"; import { COLOR_PRESETS, MAX_WATERMARK_CHARS } from "./watermark"; import PdfWorker from "./worker?worker"; export interface PdfWatermarkOptions { text: string; orientation: "horizontal" | "vertical" | "diagonal"; opacity: number; color: string; } export const pdfWatermarkPlugin: PlimiPlugin = { manifest: { id: "pdf-watermark", name: "PDF Watermark", description: "Stamp custom text over every page of a PDF, entirely in your browser. The text auto-sizes to fit each page.", category: "pdf", version: "1.0.0", tags: ["pdf", "watermark", "stamp", "text"], input: { type: "files", accept: ["application/pdf"], multiple: false, }, output: { type: "files" }, offlineReady: true, }, optionsSchema: { fields: [ { type: "text", key: "text", label: `Watermark Text (max ${MAX_WATERMARK_CHARS} chars)`, defaultValue: "CONFIDENTIAL", placeholder: "e.g. CONFIDENTIAL", }, { type: "select", key: "orientation", label: "Orientation", defaultValue: "diagonal", options: [ { label: "Diagonal", value: "diagonal" }, { label: "Horizontal", value: "horizontal" }, { label: "Vertical", value: "vertical" }, ], }, { type: "slider", key: "opacity", label: "Opacity (%)", defaultValue: 30, min: 5, max: 100, step: 5, }, { type: "select", key: "color", label: "Color", defaultValue: "light-grey", options: Object.entries(COLOR_PRESETS).map(([value, { label }]) => ({ label, value, })), }, ], }, capabilities: { cancelable: true, worker: true, }, run: runPdfWatermark, worker: () => new PdfWorker(), };