import type { FileContents, FileDiffMetadata, SupportedLanguages } from "@pierre/diffs"; export const DIFF_LAYOUTS = ["unified", "split"] as const; export const DIFF_MODES = ["view", "image", "file", "both"] as const; export const DIFF_THEMES = ["light", "dark"] as const; export const DIFF_INDICATORS = ["bars", "classic", "none"] as const; export const DIFF_IMAGE_QUALITY_PRESETS = ["standard", "hq", "print"] as const; export const DIFF_OUTPUT_FORMATS = ["png", "pdf"] as const; export type DiffLayout = (typeof DIFF_LAYOUTS)[number]; export type DiffMode = (typeof DIFF_MODES)[number]; export type DiffTheme = (typeof DIFF_THEMES)[number]; export type DiffIndicators = (typeof DIFF_INDICATORS)[number]; export type DiffImageQualityPreset = (typeof DIFF_IMAGE_QUALITY_PRESETS)[number]; export type DiffOutputFormat = (typeof DIFF_OUTPUT_FORMATS)[number]; export type DiffPresentationDefaults = { fontFamily: string; fontSize: number; lineSpacing: number; layout: DiffLayout; showLineNumbers: boolean; diffIndicators: DiffIndicators; wordWrap: boolean; background: boolean; theme: DiffTheme; }; export type DiffFileDefaults = { fileFormat: DiffOutputFormat; fileQuality: DiffImageQualityPreset; fileScale: number; fileMaxWidth: number; }; export type DiffToolDefaults = DiffPresentationDefaults & DiffFileDefaults & { mode: DiffMode; }; export type BeforeAfterDiffInput = { kind: "before_after"; before: string; after: string; path?: string; lang?: string; title?: string; }; export type PatchDiffInput = { kind: "patch"; patch: string; title?: string; }; export type DiffInput = BeforeAfterDiffInput | PatchDiffInput; export type DiffRenderOptions = { presentation: DiffPresentationDefaults; image: { format: DiffOutputFormat; qualityPreset: DiffImageQualityPreset; scale: number; maxWidth: number; maxPixels: number; }; expandUnchanged: boolean; }; export type DiffViewerOptions = { theme: { light: "pierre-light"; dark: "pierre-dark"; }; diffStyle: DiffLayout; diffIndicators: DiffIndicators; disableLineNumbers: boolean; expandUnchanged: boolean; themeType: DiffTheme; backgroundEnabled: boolean; overflow: "scroll" | "wrap"; unsafeCSS: string; }; export type DiffViewerPayload = { prerenderedHTML: string; options: DiffViewerOptions; langs: SupportedLanguages[]; oldFile?: FileContents; newFile?: FileContents; fileDiff?: FileDiffMetadata; }; export type RenderedDiffDocument = { html: string; imageHtml: string; title: string; fileCount: number; inputKind: DiffInput["kind"]; }; export type DiffArtifactMeta = { id: string; token: string; createdAt: string; expiresAt: string; title: string; inputKind: DiffInput["kind"]; fileCount: number; viewerPath: string; htmlPath: string; filePath?: string; imagePath?: string; }; export const DIFF_ARTIFACT_ID_PATTERN = /^[0-9a-f]{20}$/; export const DIFF_ARTIFACT_TOKEN_PATTERN = /^[0-9a-f]{48}$/;