import { PDFFont, Color } from "pdf-lib"; export type Alignment = "left" | "center" | "right"; export declare enum BreakWordMode { Essential = "essential", Optimal = "optimal" } export type GenColumnWidthOptions = { columnWidthMode: "equal" | "auto" | "wrapHeader"; availableWidth: number; tableData: CellContent[][]; font: PDFFont; headerFont?: PDFFont; headerTextSize?: number; textSize: number; borderWidth: number; horizontalMargin: number; headerHorizontalMargin: number; hasHeader: boolean; }; export interface CustomStyledText { type: "text"; text: string; alignment?: Alignment; font?: PDFFont; textSize?: number; textColor?: Color; } export interface LinkBase { type: "link"; url?: string; page?: number; text: string; alignment?: Alignment; font?: PDFFont; textSize?: number; textColor?: Color; } export type Link = LinkBase & ({ url: string; } | { page: number; }); export interface ImageBase { type: "image"; src?: string; data?: Uint8Array; width: number; height: number; alignment?: Alignment; horizontalMargin?: number; } export type Image = ImageBase & ({ src: string; } | { data: Uint8Array; }); export type CellElement = string | Link | Image | CustomStyledText; export type CellContent = CellElement | Array; export interface TableObject { rows: { [key: string]: CellElement[] | undefined; }[]; columns: { title: string; key: string; }[]; } export interface TableDataConverterValidatorInput { data: CellContent[][] | TableObject; hasHeader: boolean; fillEmpty?: boolean; } /** * *SPECIAL* DeepPartial type * * This utility type creates a deep partial version of an existing type, T. * It recursively makes all properties of T and its nested objects optional. It also does the same for specifiedFunctions */ export type TableOptionsDeepPartial = { [K in keyof T]?: T[K] extends (...args: any[]) => any ? T[K] | undefined : T[K] extends Color ? T[K] | undefined : T[K] extends PDFFont ? T[K] | undefined : T[K] extends object ? TableOptionsDeepPartial : T[K]; }; export interface DrawTableOptions { textSize: number; textColor: Color; contentAlignment: Alignment; font: PDFFont; linkColor: Color; lineHeight: number; column: ColumnOptions; row: RowOptions; header: HeaderOptions; title: TitleOptions; border: BorderOptions; pageMargin: PageMarginOptions; contentMargin: ContentMarginOptions; fillUndefCells: boolean; } export interface HeaderOptions { hasHeaderRow: boolean; font: PDFFont; textSize: number; textColor: Color; backgroundColor: Color; contentAlignment: Alignment; } export type ColumnOptions = { widthMode: "equal" | "auto" | "wrapHeader"; overrideWidths: number[]; }; export interface RowOptions { backgroundColors: (Color | undefined)[]; overrideHeights: number[]; } export interface TitleOptions { text: string; textSize: number; font: PDFFont; textColor: Color; alignment: Alignment; } export interface BorderOptions { color: Color; width: number; } export interface PageMarginOptions { bottom: number; right: number; } export interface ContentMarginOptions { horizontal: number; vertical: number; } export interface TableDimensions { endX: number; endY: number; width: number; height: number; }