pptx-automizer
Version:
A template based pptx generator
161 lines (160 loc) • 4.89 kB
TypeScript
import IArchive from '../interfaces/iarchive';
import { TableInfo } from './table-types';
import { Color } from './modify-types';
export type DefaultAttribute = {
Extension: string;
ContentType: string;
};
export type RelationshipAttribute = {
Id: string;
Type: string;
Target: string;
};
export type SlideListAttribute = {
id: (xml: XmlDocument) => number;
'r:id': string;
};
export type OverrideAttribute = {
PartName: string;
ContentType: string;
};
export type XmlDocument = XMLDocument;
export type XmlElement = Element;
export type HelperElement = {
archive: IArchive;
assert?: (xml: XmlDocument) => void;
clause?: (xml: XmlDocument, element?: XmlElement) => boolean;
parent?: (xml: XmlDocument) => XmlElement;
file: string;
tag: string;
attributes?: DefaultAttribute | OverrideAttribute | SlideListAttribute | RelationshipAttribute;
};
export type TemplateInfo = {
name: string;
slides: SlideInfo[];
};
export type SlideInfo = {
id: number;
number: number;
info: TemplateSlideInfo;
elements: ElementInfo[];
};
export type TemplateSlideInfo = {
name: string;
layoutName: string;
layoutPlaceholders: PlaceholderInfo[];
};
export type ElementType = 'sp' | 'chart' | 'chartEx' | 'table' | 'pic' | 'cxnSp' | 'grpSp';
export type ElementVisualType = 'chart' | 'smartArt' | 'diagram' | 'graphicFrame' | 'table' | '3dModel' | 'pictogram' | 'picture' | 'svgImage' | 'imageFilledShape' | 'vectorShape' | 'textBox' | 'rectangle' | 'vectorLine' | 'group' | 'unknown';
/**
* body - Body text placeholder
* title - Title placeholder
* ctrTitle - Center title placeholder
* subTitle - Subtitle placeholder
* dt - Date placeholder
* ftr - Footer placeholder
* sldNum - Slide number placeholder
* pic - Picture placeholder
* chart - Chart placeholder
* tbl - Table placeholder
* media - Media clip placeholder
* obj - Object placeholder
* dgm - Diagram placeholder
* clipArt - Clip art placeholder
* orgChart - Organization chart placeholder
* bitmap - Bitmap placeholder
* hdr - Header placeholder
* unknown - For cases where the type cannot be determined
*/
export type PlaceholderType = 'body' | 'title' | 'ctrTitle' | 'subTitle' | 'dt' | 'ftr' | 'sldNum' | 'pic' | 'chart' | 'tbl' | 'media' | 'obj' | 'dgm' | 'clipArt' | 'orgChart' | 'bitmap' | 'hdr' | 'unknown';
export type PlaceholderInfo = {
type: PlaceholderType;
sz: string;
idx: number;
elementType?: ElementType;
position?: ElementPosition;
};
export type ElementInfo = {
name: string;
type: ElementType;
visualType: ElementVisualType;
id: string;
creationId: string;
nameIdx: number;
position: ElementPosition;
getPlaceholderInfo: () => PlaceholderInfo;
hasTextBody: boolean;
getText: () => string[];
getParagraphs: () => TextParagraph[];
getParagraphGroups: () => TextParagraphGroup[];
getAltText: () => string;
getTableInfo: () => TableInfo[];
getXmlElement: () => XmlElement;
getGroupInfo: () => GroupInfo;
};
export type ShapeBackgroundInfo = {
color?: Color;
isDark: boolean;
};
export type LayoutInfo = {
layoutName: string;
placeholders: PlaceholderInfo[];
};
/**
* Result object for tracking placeholder mapping operations
*/
export type PlaceholderMappingResult = {
/** Array of placeholders that have been assigned to elements */
usedPlaceholders: PlaceholderInfo[];
/** All source elements that could be assigned to a target placeholder */
matchedSourceElements: ElementInfo[];
/** Array of source placeholder elements that couldn't be matched to target placeholders */
unmatchedSourcePlaceholderElements: ElementInfo[];
};
export type ElementPosition = {
x: number;
y: number;
cx: number;
cy: number;
rot?: number;
};
export type SlideHelperProps = {
sourceArchive: IArchive;
slideNumber: number;
sourceLayoutId?: number;
};
export type GroupInfo = {
isChild: boolean;
isParent: boolean;
getParent: () => XmlElement;
getChildren: () => XmlElement[];
};
export type TextParagraphProps = {
isBold?: boolean;
isItalic?: boolean;
isUnderlined?: boolean;
fontSize?: number;
align?: 'l' | 'ctr' | 'r';
indent?: number;
bullet?: string;
isNumbered?: boolean;
numberingType?: string;
startAt?: string;
};
export type TextParagraph = {
texts: string[];
} & TextParagraphProps;
export type TextParagraphGroup = {
properties: TextParagraphProps;
texts: string[];
};
export type ContentMapType = 'slideMaster' | 'slideLayout';
export type ContentMap = {
type: ContentMapType;
key: string;
sourceId: number;
targetId: number;
name?: string;
creationId?: string;
};
export type ModifyXmlCallback = (xml: XmlDocument | XmlElement, index?: number, archive?: IArchive) => void;