export interface PPTElementShadow { h: number; v: number; blur: number; color: string; } export enum ElementTypes { TEXT = 'text', IMAGE = 'image', SHAPE = 'shape', LINE = 'line', CHART = 'chart', TABLE = 'table', } export interface PPTElementOutline { style?: 'dashed' | 'solid'; width?: number; color?: string; } export interface PPTTextElement { type: 'text'; id: string; left: number; top: number; lock?: boolean; groupId?: string; width: number; height: number; content: string; rotate?: number; outline?: PPTElementOutline; fill?: string; lineHeight?: number; wordSpace?: number; opacity?: number; shadow?: PPTElementShadow; } export interface ImageElementFilters { 'blur': string; 'brightness': string; 'contrast': string; 'grayscale': string; 'saturate': string; 'hue-rotate': string; 'opacity': string; } export interface PPTImageElement { type: 'image'; id: string; left: number; top: number; lock?: boolean; groupId?: string; width: number; height: number; fixedRatio: boolean; src: string; rotate?: number; outline?: PPTElementOutline; filters?: ImageElementFilters; clip?: { range: [[number, number], [number, number]]; shape: 'rect' | 'roundRect' | 'ellipse' | 'triangle' | 'pentagon' | 'rhombus' | 'star'; }; flip?: { x?: number; y?: number }; shadow?: PPTElementShadow; } export interface PPTShapeElement { type: 'shape'; id: string; left: number; top: number; lock?: boolean; groupId?: string; width: number; height: number; viewBox: number; path: string; fixedRatio: boolean; fill: string; rotate?: number; outline?: PPTElementOutline; opacity?: number; shadow?: PPTElementShadow; } export interface PPTLineElement { type: 'line'; id: string; left: number; top: number; lock?: boolean; groupId?: string; start: [number, number]; end: [number, number]; width: number; style: string; color: string; points: [string, string]; shadow?: PPTElementShadow; } export interface PPTChartElement { type: 'chart'; id: string; left: number; top: number; lock?: boolean; groupId?: string; width: number; height: number; chartType: string; data: string; outline?: PPTElementOutline; theme?: string; } export interface TableElementCell { colspan: number; rowspan: number; content: string; bgColor: string; } export interface PPTTableElement { type: 'table'; id: string; left: number; top: number; lock?: boolean; groupId?: string; width: number; height: number; borderTheme?: string; theme?: string; rowSizes: number[]; colSizes: number[]; data: TableElementCell[][]; } export type PPTElement = PPTTextElement | PPTImageElement | PPTShapeElement | PPTLineElement | PPTChartElement | PPTTableElement export interface PPTAnimation { elId: string; type: string; duration: number; } export interface SlideBackground { type: 'solid' | 'image'; value: string; } export interface Slide { id: string; elements: PPTElement[]; background?: SlideBackground; animations?: PPTAnimation[]; }