import type { SchemeColorName, ColorMapIndex, ColorTransformType, PresetGeometry, TextAlignment, TextAnchorType, WrapType, FlowType, TextAutoFitType, UnderlineType, StrikeThroughType, CapsType, DashType, LineCapType, LineJoinType, CompoundType, LineEndType, LineEndSize, FontReferenceIndex, PlaceholderType, SlideLayoutType, BulletType, AutoNumberScheme, PatternType, ShadowAlignment } from "./enums.js"; export interface Presentation { slides: Slide[]; slideMasters: SlideMaster[]; slideSize: Size; notesSize: Size; defaultTextStyle?: TextListStyle; } export interface SlideBase { name?: string; background?: Background; drawables: Drawable[]; } export interface SlideMaster extends SlideBase { theme: Theme; colorMap: ColorMap; slideLayouts: SlideLayout[]; bodyTextStyle?: TextListStyle; titleTextStyle?: TextListStyle; otherTextStyle?: TextListStyle; } export interface SlideLayout extends SlideBase { slideMaster: SlideMaster; layoutType?: SlideLayoutType; colorMapOverride?: ColorMap; } export interface Slide extends SlideBase { slideLayout: SlideLayout; colorMapOverride?: ColorMap; } export interface Theme { name: string; colorScheme: ColorScheme; fontScheme: FontScheme; styleMatrix: StyleMatrix; } export interface ColorScheme { name: string; colors: Record; } export interface ColorMap { mappings: Record; } export interface FontScheme { name: string; majorFont: FontCollection; minorFont: FontCollection; } export interface FontCollection { latin: string; eastAsian: string; complexScript: string; scriptFonts: Record; } export interface StyleMatrix { fillStyles: Fill[]; lineStyles: Stroke[]; effectStyles: Effect[][]; bgFillStyles: Fill[]; } export type Color = RgbColor | SchemeColor | SystemColor | HslColor | PresetColor | ScRgbColor; export interface RgbColor { type: "rgb"; r: number; g: number; b: number; transforms?: ColorTransform[]; } export interface SchemeColor { type: "scheme"; val: SchemeColorName; transforms?: ColorTransform[]; } export interface SystemColor { type: "system"; val: string; lastClr?: string; transforms?: ColorTransform[]; } export interface HslColor { type: "hsl"; hue: number; sat: number; lum: number; transforms?: ColorTransform[]; } export interface PresetColor { type: "preset"; val: string; transforms?: ColorTransform[]; } export interface ScRgbColor { type: "scRgb"; r: number; g: number; b: number; transforms?: ColorTransform[]; } export interface ColorTransform { type: ColorTransformType; val?: number; } export type Fill = SolidFill | GradientFill | ImageFill | PatternFill | NullFill | GroupFill | BackgroundFill; export interface SolidFill { type: "solid"; color: Color; } export interface GradientFill { type: "gradient"; stops: GradientStop[]; linear?: { angle: number; scaled: boolean; }; path?: { type: "circle" | "rect" | "shape"; fillToRect?: RelativeRect; }; rotateWithShape?: boolean; } export interface GradientStop { position: number; color: Color; } export interface ImageFill { type: "image"; blipRId?: string; blipData?: Buffer; stretch?: { fillRect?: RelativeRect; }; tile?: { tx: number; ty: number; sx: number; sy: number; flip?: string; algn?: string; }; } export interface PatternFill { type: "pattern"; preset: PatternType; foreground?: Color; background?: Color; } export interface NullFill { type: "noFill"; } export interface GroupFill { type: "grpFill"; } export interface BackgroundFill { type: "bgFill"; } export interface Stroke { width?: number; fill?: Fill; dash?: DashType; cap?: LineCapType; join?: LineJoinType; miterLimit?: number; compound?: CompoundType; headEnd?: LineEnd; tailEnd?: LineEnd; } export interface LineEnd { type: LineEndType; width?: LineEndSize; length?: LineEndSize; } export type Effect = OuterShadow | InnerShadow | Glow | Reflection | Blur; export interface OuterShadow { type: "outerShdw"; blurRad?: number; dist?: number; dir?: number; sx?: number; sy?: number; kx?: number; ky?: number; algn?: ShadowAlignment; rotWithShape?: boolean; color?: Color; } export interface InnerShadow { type: "innerShdw"; blurRad?: number; dist?: number; dir?: number; color?: Color; } export interface Glow { type: "glow"; rad?: number; color?: Color; } export interface Reflection { type: "reflection"; blurRad?: number; stA?: number; endA?: number; dist?: number; dir?: number; fadeDir?: number; sx?: number; sy?: number; kx?: number; ky?: number; algn?: string; rotWithShape?: boolean; } export interface Blur { type: "blur"; rad?: number; grow?: boolean; } export type Drawable = Shape | Picture | Group | Connector | GraphicFrame; export interface DrawableBase { id: number; name: string; description?: string; hidden?: boolean; placeholder?: PlaceholderInfo; hyperlink?: string; } export interface PlaceholderInfo { type?: PlaceholderType; idx?: number; } export interface OrientedBounds { x: number; y: number; cx: number; cy: number; rot?: number; flipH?: boolean; flipV?: boolean; } export interface Shape extends DrawableBase { drawableType: "sp"; bounds?: OrientedBounds; geometry?: ShapeGeometry; fill?: Fill; stroke?: Stroke; effects?: Effect[]; textBody?: TextBody; shapeStyle?: ShapeStyle; } export interface Picture extends DrawableBase { drawableType: "pic"; bounds?: OrientedBounds; blipRId?: string; blipData?: Buffer; fill?: Fill; geometry?: ShapeGeometry; shapeProperties?: { fill?: Fill; stroke?: Stroke; effects?: Effect[]; }; } export interface Group extends DrawableBase { drawableType: "grpSp"; bounds?: OrientedBounds; childBounds?: OrientedBounds; children: Drawable[]; } export interface Connector extends DrawableBase { drawableType: "cxnSp"; bounds?: OrientedBounds; geometry?: ShapeGeometry; stroke?: Stroke; fill?: Fill; } export interface GraphicFrame extends DrawableBase { drawableType: "graphicFrame"; bounds?: OrientedBounds; chartRId?: string; smartArtRId?: string; oleRId?: string; fallbackImageData?: Buffer; chartData?: ChartData; tableData?: TableData; } export interface ChartSeries { name: string; values: number[]; } export interface ChartData { type: "bar" | "line" | "pie" | "area" | "scatter"; direction?: "col" | "bar"; grouping?: string; categories: string[]; series: ChartSeries[]; legendPos?: "r" | "l" | "t" | "b" | "tr"; } export interface ShapeGeometry { preset?: PresetGeometry; adjustValues?: Record; } export interface ShapeStyle { fillRef?: StyleMatrixReference; lnRef?: StyleMatrixReference; effectRef?: StyleMatrixReference; fontRef?: FontReference; } export interface StyleMatrixReference { idx: number; color?: Color; } export interface FontReference { idx: FontReferenceIndex; color?: Color; } export interface TextBody { paragraphs: Paragraph[]; properties?: TextBodyProperties; listStyle?: TextListStyle; } export interface TextBodyProperties { wrap?: WrapType; lIns?: number; tIns?: number; rIns?: number; bIns?: number; anchor?: TextAnchorType; anchorCtr?: boolean; rtlCol?: boolean; autoFit?: TextAutoFitType; fontScale?: number; lnSpcReduction?: number; numCol?: number; spcCol?: number; rot?: number; vert?: FlowType; } export interface TextListStyle { levels: (ParagraphProperties | undefined)[]; } export interface Paragraph { runs: TextRun[]; properties?: ParagraphProperties; endParaRPr?: CharacterProperties; } export type TextRun = RegularRun | LineBreak | TextField; export interface RegularRun { type: "r"; text: string; properties?: CharacterProperties; } export interface LineBreak { type: "br"; properties?: CharacterProperties; } export interface TextField { type: "fld"; fieldType?: string; text: string; properties?: CharacterProperties; } export interface CharacterProperties { latinFont?: string; eastAsianFont?: string; complexScriptFont?: string; hAnsiFont?: string; symbolFont?: string; fontSize?: number; bold?: boolean; italic?: boolean; fill?: Fill; stroke?: Stroke; spacing?: number; kerning?: number; underline?: UnderlineType; underlineFill?: Fill; strikethrough?: StrikeThroughType; caps?: CapsType; baseline?: number; highlight?: Color; effects?: Effect[]; hyperlink?: string; lang?: string; opacity?: number; dirty?: boolean; } export interface ParagraphProperties extends CharacterProperties { level?: number; align?: TextAlignment; marL?: number; marR?: number; indent?: number; lineSpacing?: TextSpacing; spaceBefore?: TextSpacing; spaceAfter?: TextSpacing; bullet?: BulletProperties; bulletColor?: Color; bulletFont?: string; bulletSizePercent?: number; bulletSizePoints?: number; defTabSz?: number; rtl?: boolean; } export interface TextSpacing { type: "pct" | "pts"; val: number; } export interface BulletProperties { type: BulletType; char?: string; autoNumScheme?: AutoNumberScheme; startAt?: number; blipRId?: string; } export interface Background { fill?: Fill; shadeToTitle?: boolean; } export interface TableData { rows: TableRow[]; gridCols: number[]; properties?: { firstRow?: boolean; lastRow?: boolean; bandRow?: boolean; bandCol?: boolean; }; tableStyleId?: string; } export interface TableRow { height: number; cells: TableCell[]; } export interface TableCell { textBody?: TextBody; fill?: Fill; borders?: { left?: Stroke; right?: Stroke; top?: Stroke; bottom?: Stroke; }; gridSpan?: number; rowSpan?: number; hMerge?: boolean; vMerge?: boolean; anchor?: string; } export interface Size { cx: number; cy: number; } export interface RelativeRect { l?: number; t?: number; r?: number; b?: number; } export interface BleedEntry { /** The style value (position:absolute; top:...; ...) */ style: string; /** Insert after this many own elements (0-indexed count) */ afterOwnElement: number; } export interface BleedRemoval { pos: { top: number; left: number; width: number; height: number; }; /** Element type that was replaced */ type: "img" | "div" | "table" | "other"; } export interface QLBleedData { /** Bleed entries per slide (0-indexed) — elements to ADD */ entries: Map; /** Own elements per slide that were replaced by bleed — elements to REMOVE */ removals: Map; /** PDF buffers keyed by the style string (unique identifier) */ pdfs: Map; }