PPTist/src/types/slides.ts
2021-01-03 17:26:02 +08:00

163 lines
3.1 KiB
TypeScript

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[];
}