Spaces:
No application file
No application file
| /* eslint-disable @typescript-eslint/no-explicit-any */ | |
| /** | |
| * PptxGenJS Interfaces | |
| */ | |
| import { CHART_NAME, PLACEHOLDER_TYPE, SHAPE_NAME, SLIDE_OBJECT_TYPES, TEXT_HALIGN, TEXT_VALIGN, WRITE_OUTPUT_TYPE } from './core-enums' | |
| // Core Types | |
| // ========== | |
| /** | |
| * Coordinate number - either: | |
| * - Inches (0-n) | |
| * - Percentage (0-100) | |
| * | |
| * @example 10.25 // coordinate in inches | |
| * @example '75%' // coordinate as percentage of slide size | |
| */ | |
| export type Coord = number | `${number}%` | |
| export interface PositionProps { | |
| /** | |
| * Horizontal position | |
| * - inches or percentage | |
| * @example 10.25 // position in inches | |
| * @example '75%' // position as percentage of slide size | |
| */ | |
| x?: Coord | |
| /** | |
| * Vertical position | |
| * - inches or percentage | |
| * @example 10.25 // position in inches | |
| * @example '75%' // position as percentage of slide size | |
| */ | |
| y?: Coord | |
| /** | |
| * Height | |
| * - inches or percentage | |
| * @example 10.25 // height in inches | |
| * @example '75%' // height as percentage of slide size | |
| */ | |
| h?: Coord | |
| /** | |
| * Width | |
| * - inches or percentage | |
| * @example 10.25 // width in inches | |
| * @example '75%' // width as percentage of slide size | |
| */ | |
| w?: Coord | |
| } | |
| /** | |
| * Either `data` or `path` is required | |
| */ | |
| export interface DataOrPathProps { | |
| /** | |
| * URL or relative path | |
| * | |
| * @example 'https://onedrives.com/myimg.png` // retrieve image via URL | |
| * @example '/home/gitbrent/images/myimg.png` // retrieve image via local path | |
| */ | |
| path?: string | |
| /** | |
| * base64-encoded string | |
| * - Useful for avoiding potential path/server issues | |
| * | |
| * @example 'image/png;base64,iVtDafDrBF[...]=' // pre-encoded image in base-64 | |
| */ | |
| data?: string | |
| } | |
| export interface BackgroundProps extends DataOrPathProps, ShapeFillProps { | |
| /** | |
| * Color (hex format) | |
| * @deprecated v3.6.0 - use `ShapeFillProps` instead | |
| */ | |
| fill?: HexColor | |
| /** | |
| * source URL | |
| * @deprecated v3.6.0 - use `DataOrPathProps` instead - remove in v4.0.0 | |
| */ | |
| src?: string | |
| } | |
| /** | |
| * Color in Hex format | |
| * @example 'FF3399' | |
| */ | |
| export type HexColor = string | |
| export type ThemeColor = 'tx1' | 'tx2' | 'bg1' | 'bg2' | 'accent1' | 'accent2' | 'accent3' | 'accent4' | 'accent5' | 'accent6' | |
| export type Color = HexColor | ThemeColor | |
| export type Margin = number | [number, number, number, number] | |
| export type HAlign = 'left' | 'center' | 'right' | 'justify' | |
| export type VAlign = 'top' | 'middle' | 'bottom' | |
| // used by charts, shape, text | |
| export interface BorderProps { | |
| /** | |
| * Border type | |
| * @default solid | |
| */ | |
| type?: 'none' | 'dash' | 'solid' | |
| /** | |
| * Border color (hex) | |
| * @example 'FF3399' | |
| * @default '666666' | |
| */ | |
| color?: HexColor | |
| // TODO: add `transparency` prop to Borders (0-100%) | |
| // TODO: add `width` - deprecate `pt` | |
| /** | |
| * Border size (points) | |
| * @default 1 | |
| */ | |
| pt?: number | |
| } | |
| // used by: image, object, text, | |
| export interface HyperlinkProps { | |
| _rId: number | |
| /** | |
| * Slide number to link to | |
| */ | |
| slide?: number | |
| /** | |
| * Url to link to | |
| */ | |
| url?: string | |
| /** | |
| * Hyperlink Tooltip | |
| */ | |
| tooltip?: string | |
| } | |
| // used by: chart, text, image | |
| export interface ShadowProps { | |
| /** | |
| * shadow type | |
| * @default 'none' | |
| */ | |
| type: 'outer' | 'inner' | 'none' | |
| /** | |
| * opacity (percent) | |
| * - range: 0.0-1.0 | |
| * @example 0.5 // 50% opaque | |
| */ | |
| opacity?: number // TODO: "Transparency (0-100%)" in PPT // TODO: deprecate and add `transparency` | |
| /** | |
| * blur (points) | |
| * - range: 0-100 | |
| * @default 0 | |
| */ | |
| blur?: number | |
| /** | |
| * angle (degrees) | |
| * - range: 0-359 | |
| * @default 0 | |
| */ | |
| angle?: number | |
| /** | |
| * shadow offset (points) | |
| * - range: 0-200 | |
| * @default 0 | |
| */ | |
| offset?: number // TODO: "Distance" in PPT | |
| /** | |
| * shadow color (hex format) | |
| * @example 'FF3399' | |
| */ | |
| color?: HexColor | |
| /** | |
| * whether to rotate shadow with shape | |
| * @default false | |
| */ | |
| rotateWithShape?: boolean | |
| } | |
| // used by: shape, table, text | |
| export interface ShapeFillProps { | |
| /** | |
| * Fill color | |
| * - `HexColor` or `ThemeColor` | |
| * @example 'FF0000' // hex color (red) | |
| * @example pptx.SchemeColor.text1 // Theme color (Text1) | |
| */ | |
| color?: Color | |
| /** | |
| * Transparency (percent) | |
| * - MS-PPT > Format Shape > Fill & Line > Fill > Transparency | |
| * - range: 0-100 | |
| * @default 0 | |
| */ | |
| transparency?: number | |
| /** | |
| * Fill type | |
| * @default 'solid' | |
| */ | |
| type?: 'none' | 'solid' | |
| /** | |
| * Transparency (percent) | |
| * @deprecated v3.3.0 - use `transparency` | |
| */ | |
| alpha?: number | |
| } | |
| export interface ShapeLineProps extends ShapeFillProps { | |
| /** | |
| * Line width (pt) | |
| * @default 1 | |
| */ | |
| width?: number | |
| /** | |
| * Dash type | |
| * @default 'solid' | |
| */ | |
| dashType?: 'solid' | 'dash' | 'dashDot' | 'lgDash' | 'lgDashDot' | 'lgDashDotDot' | 'sysDash' | 'sysDot' | |
| /** | |
| * Begin arrow type | |
| * @since v3.3.0 | |
| */ | |
| beginArrowType?: 'none' | 'arrow' | 'diamond' | 'oval' | 'stealth' | 'triangle' | |
| /** | |
| * End arrow type | |
| * @since v3.3.0 | |
| */ | |
| endArrowType?: 'none' | 'arrow' | 'diamond' | 'oval' | 'stealth' | 'triangle' | |
| // FUTURE: beginArrowSize (1-9) | |
| // FUTURE: endArrowSize (1-9) | |
| /** | |
| * Dash type | |
| * @deprecated v3.3.0 - use `dashType` | |
| */ | |
| lineDash?: 'solid' | 'dash' | 'dashDot' | 'lgDash' | 'lgDashDot' | 'lgDashDotDot' | 'sysDash' | 'sysDot' | |
| /** | |
| * @deprecated v3.3.0 - use `beginArrowType` | |
| */ | |
| lineHead?: 'none' | 'arrow' | 'diamond' | 'oval' | 'stealth' | 'triangle' | |
| /** | |
| * @deprecated v3.3.0 - use `endArrowType` | |
| */ | |
| lineTail?: 'none' | 'arrow' | 'diamond' | 'oval' | 'stealth' | 'triangle' | |
| /** | |
| * Line width (pt) | |
| * @deprecated v3.3.0 - use `width` | |
| */ | |
| pt?: number | |
| /** | |
| * Line size (pt) | |
| * @deprecated v3.3.0 - use `width` | |
| */ | |
| size?: number | |
| } | |
| // used by: chart, slide, table, text | |
| export interface TextBaseProps { | |
| /** | |
| * Horizontal alignment | |
| * @default 'left' | |
| */ | |
| align?: HAlign | |
| /** | |
| * Bold style | |
| * @default false | |
| */ | |
| bold?: boolean | |
| /** | |
| * Add a line-break | |
| * @default false | |
| */ | |
| breakLine?: boolean | |
| /** | |
| * Add standard or custom bullet | |
| * - use `true` for standard bullet | |
| * - pass object options for custom bullet | |
| * @default false | |
| */ | |
| bullet?: | |
| | boolean | |
| | { | |
| /** | |
| * Bullet type | |
| * @default bullet | |
| */ | |
| type?: 'bullet' | 'number' | |
| /** | |
| * Bullet character code (unicode) | |
| * @since v3.3.0 | |
| * @example '25BA' // 'BLACK RIGHT-POINTING POINTER' (U+25BA) | |
| */ | |
| characterCode?: string | |
| /** | |
| * Indentation (space between bullet and text) (points) | |
| * @since v3.3.0 | |
| * @default 27 // DEF_BULLET_MARGIN | |
| * @example 10 // Indents text 10 points from bullet | |
| */ | |
| indent?: number | |
| /** | |
| * Number type | |
| * @since v3.3.0 | |
| * @example 'romanLcParenR' // roman numerals lower-case with paranthesis right | |
| */ | |
| numberType?: | |
| | 'alphaLcParenBoth' | |
| | 'alphaLcParenR' | |
| | 'alphaLcPeriod' | |
| | 'alphaUcParenBoth' | |
| | 'alphaUcParenR' | |
| | 'alphaUcPeriod' | |
| | 'arabicParenBoth' | |
| | 'arabicParenR' | |
| | 'arabicPeriod' | |
| | 'arabicPlain' | |
| | 'romanLcParenBoth' | |
| | 'romanLcParenR' | |
| | 'romanLcPeriod' | |
| | 'romanUcParenBoth' | |
| | 'romanUcParenR' | |
| | 'romanUcPeriod' | |
| /** | |
| * Number bullets start at | |
| * @since v3.3.0 | |
| * @default 1 | |
| * @example 10 // numbered bullets start with 10 | |
| */ | |
| numberStartAt?: number | |
| // DEPRECATED | |
| /** | |
| * Bullet code (unicode) | |
| * @deprecated v3.3.0 - use `characterCode` | |
| */ | |
| code?: string | |
| /** | |
| * Margin between bullet and text | |
| * @since v3.2.1 | |
| * @deplrecated v3.3.0 - use `indent` | |
| */ | |
| marginPt?: number | |
| /** | |
| * Number to start with (only applies to type:number) | |
| * @deprecated v3.3.0 - use `numberStartAt` | |
| */ | |
| startAt?: number | |
| /** | |
| * Number type | |
| * @deprecated v3.3.0 - use `numberType` | |
| */ | |
| style?: string | |
| } | |
| /** | |
| * Text color | |
| * - `HexColor` or `ThemeColor` | |
| * - MS-PPT > Format Shape > Text Options > Text Fill & Outline > Text Fill > Color | |
| * @example 'FF0000' // hex color (red) | |
| * @example pptx.SchemeColor.text1 // Theme color (Text1) | |
| */ | |
| color?: Color | |
| /** | |
| * Font face name | |
| * @example 'Arial' // Arial font | |
| */ | |
| fontFace?: string | |
| /** | |
| * Font size | |
| * @example 12 // Font size 12 | |
| */ | |
| fontSize?: number | |
| /** | |
| * Text highlight color (hex format) | |
| * @example 'FFFF00' // yellow | |
| */ | |
| highlight?: HexColor | |
| /** | |
| * italic style | |
| * @default false | |
| */ | |
| italic?: boolean | |
| /** | |
| * language | |
| * - ISO 639-1 standard language code | |
| * @default 'en-US' // english US | |
| * @example 'fr-CA' // french Canadian | |
| */ | |
| lang?: string | |
| /** | |
| * Add a soft line-break (shift+enter) before line text content | |
| * @default false | |
| * @since v3.5.0 | |
| */ | |
| softBreakBefore?: boolean | |
| /** | |
| * tab stops | |
| * - PowerPoint: Paragraph > Tabs > Tab stop position | |
| * @example [{ position:1 }, { position:3 }] // Set first tab stop to 1 inch, set second tab stop to 3 inches | |
| */ | |
| tabStops?: Array<{ position: number, alignment?: 'l' | 'r' | 'ctr' | 'dec' }> | |
| /** | |
| * text direction | |
| * `horz` = horizontal | |
| * `vert` = rotate 90^ | |
| * `vert270` = rotate 270^ | |
| * `wordArtVert` = stacked | |
| * @default 'horz' | |
| */ | |
| textDirection?: 'horz' | 'vert' | 'vert270' | 'wordArtVert' | |
| /** | |
| * Transparency (percent) | |
| * - MS-PPT > Format Shape > Text Options > Text Fill & Outline > Text Fill > Transparency | |
| * - range: 0-100 | |
| * @default 0 | |
| */ | |
| transparency?: number | |
| /** | |
| * underline properties | |
| * - PowerPoint: Font > Color & Underline > Underline Style/Underline Color | |
| * @default (none) | |
| */ | |
| underline?: { | |
| style?: | |
| | 'dash' | |
| | 'dashHeavy' | |
| | 'dashLong' | |
| | 'dashLongHeavy' | |
| | 'dbl' | |
| | 'dotDash' | |
| | 'dotDashHeave' | |
| | 'dotDotDash' | |
| | 'dotDotDashHeavy' | |
| | 'dotted' | |
| | 'dottedHeavy' | |
| | 'heavy' | |
| | 'none' | |
| | 'sng' | |
| | 'wavy' | |
| | 'wavyDbl' | |
| | 'wavyHeavy' | |
| color?: Color | |
| } | |
| /** | |
| * vertical alignment | |
| * @default 'top' | |
| */ | |
| valign?: VAlign | |
| } | |
| export interface PlaceholderProps extends PositionProps, TextBaseProps { | |
| name: string | |
| type: PLACEHOLDER_TYPE | |
| /** | |
| * margin (points) | |
| */ | |
| margin?: Margin | |
| } | |
| export interface ObjectNameProps { | |
| /** | |
| * Object name | |
| * - used instead of default "Object N" name | |
| * - PowerPoint: Home > Arrange > Selection Pane... | |
| * @since v3.10.0 | |
| * @default 'Object 1' | |
| * @example 'Antenna Design 9' | |
| */ | |
| objectName?: string | |
| } | |
| export interface ThemeProps { | |
| /** | |
| * Headings font face name | |
| * @example 'Arial Narrow' | |
| * @default 'Calibri Light' | |
| */ | |
| headFontFace?: string | |
| /** | |
| * Body font face name | |
| * @example 'Arial' | |
| * @default 'Calibri' | |
| */ | |
| bodyFontFace?: string | |
| } | |
| // image / media ================================================================================== | |
| export type MediaType = 'audio' | 'online' | 'video' | |
| export interface ImageProps extends PositionProps, DataOrPathProps, ObjectNameProps { | |
| /** | |
| * Alt Text value ("How would you describe this object and its contents to someone who is blind?") | |
| * - PowerPoint: [right-click on an image] > "Edit Alt Text..." | |
| */ | |
| altText?: string | |
| /** | |
| * Flip horizontally? | |
| * @default false | |
| */ | |
| flipH?: boolean | |
| /** | |
| * Flip vertical? | |
| * @default false | |
| */ | |
| flipV?: boolean | |
| hyperlink?: HyperlinkProps | |
| /** | |
| * Placeholder type | |
| * - values: 'body' | 'header' | 'footer' | 'title' | et. al. | |
| * @example 'body' | |
| * @see https://docs.microsoft.com/en-us/office/vba/api/powerpoint.ppplaceholdertype | |
| */ | |
| placeholder?: string | |
| /** | |
| * Image rotation (degrees) | |
| * - range: -360 to 360 | |
| * @default 0 | |
| * @example 180 // rotate image 180 degrees | |
| */ | |
| rotate?: number | |
| /** | |
| * Enable image rounding | |
| * @default false | |
| */ | |
| rounding?: boolean | |
| /** | |
| * Shadow Props | |
| * - MS-PPT > Format Picture > Shadow | |
| * @example | |
| * { type: 'outer', color: '000000', opacity: 0.5, blur: 20, offset: 20, angle: 270 } | |
| */ | |
| shadow?: ShadowProps | |
| /** | |
| * Image sizing options | |
| */ | |
| sizing?: { | |
| /** | |
| * Sizing type | |
| */ | |
| type: 'contain' | 'cover' | 'crop' | |
| /** | |
| * Image width | |
| * - inches or percentage | |
| * @example 10.25 // position in inches | |
| * @example '75%' // position as percentage of slide size | |
| */ | |
| w: Coord | |
| /** | |
| * Image height | |
| * - inches or percentage | |
| * @example 10.25 // position in inches | |
| * @example '75%' // position as percentage of slide size | |
| */ | |
| h: Coord | |
| /** | |
| * Offset from left to crop image | |
| * - `crop` only | |
| * - inches or percentage | |
| * @example 10.25 // position in inches | |
| * @example '75%' // position as percentage of slide size | |
| */ | |
| x?: Coord | |
| /** | |
| * Offset from top to crop image | |
| * - `crop` only | |
| * - inches or percentage | |
| * @example 10.25 // position in inches | |
| * @example '75%' // position as percentage of slide size | |
| */ | |
| y?: Coord | |
| } | |
| /** | |
| * Transparency (percent) | |
| * - MS-PPT > Format Picture > Picture > Picture Transparency > Transparency | |
| * - range: 0-100 | |
| * @default 0 | |
| * @example 25 // 25% transparent | |
| */ | |
| transparency?: number | |
| } | |
| /** | |
| * Add media (audio/video) to slide | |
| * @requires either `link` or `path` | |
| */ | |
| export interface MediaProps extends PositionProps, DataOrPathProps, ObjectNameProps { | |
| /** | |
| * Media type | |
| * - Use 'online' to embed a YouTube video (only supported in recent versions of PowerPoint) | |
| */ | |
| type: MediaType | |
| /** | |
| * Cover image | |
| * @since 3.9.0 | |
| * @default "play button" image, gray background | |
| */ | |
| cover?: string | |
| /** | |
| * media file extension | |
| * - use when the media file path does not already have an extension, ex: "/folder/SomeSong" | |
| * @since 3.9.0 | |
| * @default extension from file provided | |
| */ | |
| extn?: string | |
| /** | |
| * video embed link | |
| * - works with YouTube | |
| * - other sites may not show correctly in PowerPoint | |
| * @example 'https://www.youtube.com/embed/Dph6ynRVyUc' // embed a youtube video | |
| */ | |
| link?: string | |
| /** | |
| * full or local path | |
| * @example 'https://freesounds/simpsons/bart.mp3' // embed mp3 audio clip from server | |
| * @example '/sounds/simpsons_haha.mp3' // embed mp3 audio clip from local directory | |
| */ | |
| path?: string | |
| } | |
| // formula ========================================================================================= | |
| /** | |
| * Add a formula (Office Math / OMML) to slide | |
| */ | |
| export interface FormulaProps extends PositionProps, ObjectNameProps { | |
| /** | |
| * OMML XML string representing the formula | |
| */ | |
| omml: string | |
| /** | |
| * Font size for the formula (points) | |
| */ | |
| fontSize?: number | |
| /** | |
| * Font color (hex) | |
| */ | |
| color?: string | |
| /** | |
| * Horizontal alignment of the formula: 'left' | 'center' | 'right' | |
| * @default 'center' | |
| */ | |
| align?: 'left' | 'center' | 'right' | |
| } | |
| // shapes ========================================================================================= | |
| export interface ShapeProps extends PositionProps, ObjectNameProps { | |
| /** | |
| * Horizontal alignment | |
| * @default 'left' | |
| */ | |
| align?: HAlign | |
| /** | |
| * Radius (only for pptx.shapes.PIE, pptx.shapes.ARC, pptx.shapes.BLOCK_ARC) | |
| * - In the case of pptx.shapes.BLOCK_ARC you have to setup the arcThicknessRatio | |
| * - values: [0-359, 0-359] | |
| * @since v3.4.0 | |
| * @default [270, 0] | |
| */ | |
| angleRange?: [number, number] | |
| /** | |
| * Radius (only for pptx.shapes.BLOCK_ARC) | |
| * - You have to setup the angleRange values too | |
| * - values: 0.0-1.0 | |
| * @since v3.4.0 | |
| * @default 0.5 | |
| */ | |
| arcThicknessRatio?: number | |
| /** | |
| * Shape fill color properties | |
| * @example { color:'FF0000' } // hex color (red) | |
| * @example { color:'0088CC', transparency:50 } // hex color, 50% transparent | |
| * @example { color:pptx.SchemeColor.accent1 } // Theme color Accent1 | |
| */ | |
| fill?: ShapeFillProps | |
| /** | |
| * Flip shape horizontally? | |
| * @default false | |
| */ | |
| flipH?: boolean | |
| /** | |
| * Flip shape vertical? | |
| * @default false | |
| */ | |
| flipV?: boolean | |
| /** | |
| * Add hyperlink to shape | |
| * @example hyperlink: { url: "https://github.com/gitbrent/pptxgenjs", tooltip: "Visit Homepage" }, | |
| */ | |
| hyperlink?: HyperlinkProps | |
| /** | |
| * Line options | |
| */ | |
| line?: ShapeLineProps | |
| /** | |
| * Points (only for pptx.shapes.CUSTOM_GEOMETRY) | |
| * - type: 'arc' | |
| * - `hR` Shape Arc Height Radius | |
| * - `wR` Shape Arc Width Radius | |
| * - `stAng` Shape Arc Start Angle | |
| * - `swAng` Shape Arc Swing Angle | |
| * @see http://www.datypic.com/sc/ooxml/e-a_arcTo-1.html | |
| * @example [{ x: 0, y: 0 }, { x: 10, y: 10 }] // draw a line between those two points | |
| */ | |
| points?: Array< | |
| | { x: Coord, y: Coord, moveTo?: boolean } | |
| | { x: Coord, y: Coord, curve: { type: 'arc', hR: Coord, wR: Coord, stAng: number, swAng: number } } | |
| | { x: Coord, y: Coord, curve: { type: 'cubic', x1: Coord, y1: Coord, x2: Coord, y2: Coord } } | |
| | { x: Coord, y: Coord, curve: { type: 'quadratic', x1: Coord, y1: Coord } } | |
| | { close: true } | |
| > | |
| /** | |
| * Rounded rectangle radius (only for pptx.shapes.ROUNDED_RECTANGLE) | |
| * - values: 0.0 to 1.0 | |
| * @default 0 | |
| */ | |
| rectRadius?: number | |
| /** | |
| * Rotation (degrees) | |
| * - range: -360 to 360 | |
| * @default 0 | |
| * @example 180 // rotate 180 degrees | |
| */ | |
| rotate?: number | |
| /** | |
| * Shadow options | |
| * TODO: need new demo.js entry for shape shadow | |
| */ | |
| shadow?: ShadowProps | |
| /** | |
| * @deprecated v3.3.0 | |
| */ | |
| lineSize?: number | |
| /** | |
| * @deprecated v3.3.0 | |
| */ | |
| lineDash?: 'dash' | 'dashDot' | 'lgDash' | 'lgDashDot' | 'lgDashDotDot' | 'solid' | 'sysDash' | 'sysDot' | |
| /** | |
| * @deprecated v3.3.0 | |
| */ | |
| lineHead?: 'arrow' | 'diamond' | 'none' | 'oval' | 'stealth' | 'triangle' | |
| /** | |
| * @deprecated v3.3.0 | |
| */ | |
| lineTail?: 'arrow' | 'diamond' | 'none' | 'oval' | 'stealth' | 'triangle' | |
| /** | |
| * Shape name (used instead of default "Shape N" name) | |
| * @deprecated v3.10.0 - use `objectName` | |
| */ | |
| shapeName?: string | |
| } | |
| // tables ========================================================================================= | |
| export interface TableToSlidesProps extends TableProps { | |
| _arrObjTabHeadRows?: TableRow[] | |
| // _masterSlide?: SlideLayout | |
| /** | |
| * Add an image to slide(s) created during autopaging | |
| * - `image` prop requires either `path` or `data` | |
| * - see `DataOrPathProps` for details on `image` props | |
| * - see `PositionProps` for details on `options` props | |
| */ | |
| addImage?: { image: DataOrPathProps, options: PositionProps } | |
| /** | |
| * Add a shape to slide(s) created during autopaging | |
| */ | |
| addShape?: { shapeName: SHAPE_NAME, options: ShapeProps } | |
| /** | |
| * Add a table to slide(s) created during autopaging | |
| */ | |
| addTable?: { rows: TableRow[], options: TableProps } | |
| /** | |
| * Add a text object to slide(s) created during autopaging | |
| */ | |
| addText?: { text: TextProps[], options: TextPropsOptions } | |
| /** | |
| * Whether to enable auto-paging | |
| * - auto-paging creates new slides as content overflows a slide | |
| * @default true | |
| */ | |
| autoPage?: boolean | |
| /** | |
| * Auto-paging character weight | |
| * - adjusts how many characters are used before lines wrap | |
| * - range: -1.0 to 1.0 | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/api-tables.html | |
| * @default 0.0 | |
| * @example 0.5 // lines are longer (increases the number of characters that can fit on a given line) | |
| */ | |
| autoPageCharWeight?: number | |
| /** | |
| * Auto-paging line weight | |
| * - adjusts how many lines are used before slides wrap | |
| * - range: -1.0 to 1.0 | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/api-tables.html | |
| * @default 0.0 | |
| * @example 0.5 // tables are taller (increases the number of lines that can fit on a given slide) | |
| */ | |
| autoPageLineWeight?: number | |
| /** | |
| * Whether to repeat head row(s) on new tables created by autopaging | |
| * @since v3.3.0 | |
| * @default false | |
| */ | |
| autoPageRepeatHeader?: boolean | |
| /** | |
| * The `y` location to use on subsequent slides created by autopaging | |
| * @default (top margin of Slide) | |
| */ | |
| autoPageSlideStartY?: number | |
| /** | |
| * Column widths (inches) | |
| */ | |
| colW?: number | number[] | |
| /** | |
| * Master slide name | |
| * - define a master slide to have your auto-paged slides have corporate design, etc. | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/masters.html | |
| */ | |
| masterSlideName?: string | |
| /** | |
| * Slide margin | |
| * - this margin will be across all slides created by auto-paging | |
| */ | |
| slideMargin?: Margin | |
| /** | |
| * @deprecated v3.3.0 - use `autoPageRepeatHeader` | |
| */ | |
| addHeaderToEach?: boolean | |
| /** | |
| * @deprecated v3.3.0 - use `autoPageSlideStartY` | |
| */ | |
| newSlideStartY?: number | |
| } | |
| export interface TableCellProps extends TextBaseProps { | |
| /** | |
| * Auto-paging character weight | |
| * - adjusts how many characters are used before lines wrap | |
| * - range: -1.0 to 1.0 | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/api-tables.html | |
| * @default 0.0 | |
| * @example 0.5 // lines are longer (increases the number of characters that can fit on a given line) | |
| */ | |
| autoPageCharWeight?: number | |
| /** | |
| * Auto-paging line weight | |
| * - adjusts how many lines are used before slides wrap | |
| * - range: -1.0 to 1.0 | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/api-tables.html | |
| * @default 0.0 | |
| * @example 0.5 // tables are taller (increases the number of lines that can fit on a given slide) | |
| */ | |
| autoPageLineWeight?: number | |
| /** | |
| * Cell border | |
| */ | |
| border?: BorderProps | [BorderProps, BorderProps, BorderProps, BorderProps] | |
| /** | |
| * Cell colspan | |
| */ | |
| colspan?: number | |
| /** | |
| * Fill color | |
| * @example { color:'FF0000' } // hex color (red) | |
| * @example { color:'0088CC', transparency:50 } // hex color, 50% transparent | |
| * @example { color:pptx.SchemeColor.accent1 } // theme color Accent1 | |
| */ | |
| fill?: ShapeFillProps | |
| hyperlink?: HyperlinkProps | |
| /** | |
| * Cell margin (inches) | |
| * @default 0 | |
| */ | |
| margin?: Margin | |
| /** | |
| * Cell rowspan | |
| */ | |
| rowspan?: number | |
| } | |
| export interface TableProps extends PositionProps, TextBaseProps, ObjectNameProps { | |
| _arrObjTabHeadRows?: TableRow[] | |
| /** | |
| * Whether to enable auto-paging | |
| * - auto-paging creates new slides as content overflows a slide | |
| * @default false | |
| */ | |
| autoPage?: boolean | |
| /** | |
| * Auto-paging character weight | |
| * - adjusts how many characters are used before lines wrap | |
| * - range: -1.0 to 1.0 | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/api-tables.html | |
| * @default 0.0 | |
| * @example 0.5 // lines are longer (increases the number of characters that can fit on a given line) | |
| */ | |
| autoPageCharWeight?: number | |
| /** | |
| * Auto-paging line weight | |
| * - adjusts how many lines are used before slides wrap | |
| * - range: -1.0 to 1.0 | |
| * @see https://gitbrent.github.io/PptxGenJS/docs/api-tables.html | |
| * @default 0.0 | |
| * @example 0.5 // tables are taller (increases the number of lines that can fit on a given slide) | |
| */ | |
| autoPageLineWeight?: number | |
| /** | |
| * Whether table header row(s) should be repeated on each new slide creating by autoPage. | |
| * Use `autoPageHeaderRows` to designate how many rows comprise the table header (1+). | |
| * @default false | |
| * @since v3.3.0 | |
| */ | |
| autoPageRepeatHeader?: boolean | |
| /** | |
| * Number of rows that comprise table headers | |
| * - required when `autoPageRepeatHeader` is set to true. | |
| * @example 2 - repeats the first two table rows on each new slide created | |
| * @default 1 | |
| * @since v3.3.0 | |
| */ | |
| autoPageHeaderRows?: number | |
| /** | |
| * The `y` location to use on subsequent slides created by autopaging | |
| * @default (top margin of Slide) | |
| */ | |
| autoPageSlideStartY?: number | |
| /** | |
| * Table border | |
| * - single value is applied to all 4 sides | |
| * - array of values in TRBL order for individual sides | |
| */ | |
| border?: BorderProps | [BorderProps, BorderProps, BorderProps, BorderProps] | |
| /** | |
| * Width of table columns (inches) | |
| * - single value is applied to every column equally based upon `w` | |
| * - array of values in applied to each column in order | |
| * @default columns of equal width based upon `w` | |
| */ | |
| colW?: number | number[] | |
| /** | |
| * Cell background color | |
| * @example { color:'FF0000' } // hex color (red) | |
| * @example { color:'0088CC', transparency:50 } // hex color, 50% transparent | |
| * @example { color:pptx.SchemeColor.accent1 } // theme color Accent1 | |
| */ | |
| fill?: ShapeFillProps | |
| /** | |
| * Cell margin (inches) | |
| * - affects all table cells, is superceded by cell options | |
| */ | |
| margin?: Margin | |
| /** | |
| * Height of table rows (inches) | |
| * - single value is applied to every row equally based upon `h` | |
| * - array of values in applied to each row in order | |
| * @default rows of equal height based upon `h` | |
| */ | |
| rowH?: number | number[] | |
| /** | |
| * DEV TOOL: Verbose Mode (to console) | |
| * - tell the library to provide an almost ridiculous amount of detail during auto-paging calculations | |
| * @default false // obviously | |
| */ | |
| verbose?: boolean // Undocumented; shows verbose output | |
| /** | |
| * @deprecated v3.3.0 - use `autoPageSlideStartY` | |
| */ | |
| newSlideStartY?: number | |
| } | |
| export interface TableCell { | |
| _type: SLIDE_OBJECT_TYPES.tablecell | |
| /** lines in this cell (autoPage) */ | |
| _lines?: TableCell[][] | |
| /** `text` prop but guaranteed to hold "TableCell[]" */ | |
| _tableCells?: TableCell[] | |
| /** height in EMU */ | |
| _lineHeight?: number | |
| _hmerge?: boolean | |
| _vmerge?: boolean | |
| _rowContinue?: number | |
| _optImp?: any | |
| text?: string | TableCell[] // TODO: FUTURE: 20210815: ONly allow `TableCell[]` dealing with string|TableCell[] *SUCKS* | |
| options?: TableCellProps | |
| } | |
| export interface TableRowSlide { | |
| rows: TableRow[] | |
| } | |
| export type TableRow = TableCell[] | |
| // text =========================================================================================== | |
| export interface TextGlowProps { | |
| /** | |
| * Border color (hex format) | |
| * @example 'FF3399' | |
| */ | |
| color?: HexColor | |
| /** | |
| * opacity (0.0 - 1.0) | |
| * @example 0.5 | |
| * 50% opaque | |
| */ | |
| opacity?: number | |
| /** | |
| * size (points) | |
| */ | |
| size: number | |
| } | |
| export interface TextPropsOptions extends PositionProps, DataOrPathProps, TextBaseProps, ObjectNameProps { | |
| _bodyProp?: { | |
| // Note: Many of these duplicated as user options are transformed to _bodyProp options for XML processing | |
| autoFit?: boolean | |
| align?: TEXT_HALIGN | |
| anchor?: TEXT_VALIGN | |
| lIns?: number | |
| rIns?: number | |
| tIns?: number | |
| bIns?: number | |
| vert?: 'eaVert' | 'horz' | 'mongolianVert' | 'vert' | 'vert270' | 'wordArtVert' | 'wordArtVertRtl' | |
| wrap?: boolean | |
| } | |
| _lineIdx?: number | |
| baseline?: number | |
| /** | |
| * Character spacing | |
| */ | |
| charSpacing?: number | |
| /** | |
| * Text fit options | |
| * | |
| * MS-PPT > Format Shape > Shape Options > Text Box > "[unlabeled group]": [3 options below] | |
| * - 'none' = Do not Autofit | |
| * - 'shrink' = Shrink text on overflow | |
| * - 'resize' = Resize shape to fit text | |
| * | |
| * **Note** 'shrink' and 'resize' only take effect after editing text/resize shape. | |
| * Both PowerPoint and Word dynamically calculate a scaling factor and apply it when edit/resize occurs. | |
| * | |
| * There is no way for this library to trigger that behavior, sorry. | |
| * @since v3.3.0 | |
| * @default "none" | |
| */ | |
| fit?: 'none' | 'shrink' | 'resize' | |
| /** | |
| * Shape fill | |
| * @example { color:'FF0000' } // hex color (red) | |
| * @example { color:'0088CC', transparency:50 } // hex color, 50% transparent | |
| * @example { color:pptx.SchemeColor.accent1 } // theme color Accent1 | |
| */ | |
| fill?: ShapeFillProps | |
| /** | |
| * Flip shape horizontally? | |
| * @default false | |
| */ | |
| flipH?: boolean | |
| /** | |
| * Flip shape vertical? | |
| * @default false | |
| */ | |
| flipV?: boolean | |
| glow?: TextGlowProps | |
| hyperlink?: HyperlinkProps | |
| indentLevel?: number | |
| isTextBox?: boolean | |
| line?: ShapeLineProps | |
| /** | |
| * Line spacing (pt) | |
| * - PowerPoint: Paragraph > Indents and Spacing > Line Spacing: > "Exactly" | |
| * @example 28 // 28pt | |
| */ | |
| lineSpacing?: number | |
| /** | |
| * line spacing multiple (percent) | |
| * - range: 0.0-9.99 | |
| * - PowerPoint: Paragraph > Indents and Spacing > Line Spacing: > "Multiple" | |
| * @example 1.5 // 1.5X line spacing | |
| * @since v3.5.0 | |
| */ | |
| lineSpacingMultiple?: number | |
| // TODO: [20220219] powerpoint uses inches but library has always been pt... @future @deprecated - update in v4.0? [range: 0.0-22.0] | |
| /** | |
| * Margin (points) | |
| * - PowerPoint: Format Shape > Shape Options > Size & Properties > Text Box > Left/Right/Top/Bottom margin | |
| * @default "Normal" margin in PowerPoint [3.5, 7.0, 3.5, 7.0] // (this library sets no value, but PowerPoint defaults to "Normal" [0.05", 0.1", 0.05", 0.1"]) | |
| * @example 0 // Top/Right/Bottom/Left margin 0 [0.0" in powerpoint] | |
| * @example 10 // Top/Right/Bottom/Left margin 10 [0.14" in powerpoint] | |
| * @example [10,5,10,5] // Top margin 10, Right margin 5, Bottom margin 10, Left margin 5 | |
| */ | |
| margin?: Margin | |
| outline?: { color: Color, size: number } | |
| paraSpaceAfter?: number | |
| paraSpaceBefore?: number | |
| placeholder?: string | |
| /** | |
| * Rounded rectangle radius (only for pptx.shapes.ROUNDED_RECTANGLE) | |
| * - values: 0.0 to 1.0 | |
| * @default 0 | |
| */ | |
| rectRadius?: number | |
| /** | |
| * Rotation (degrees) | |
| * - range: -360 to 360 | |
| * @default 0 | |
| * @example 180 // rotate 180 degrees | |
| */ | |
| rotate?: number | |
| /** | |
| * Whether to enable right-to-left mode | |
| * @default false | |
| */ | |
| rtlMode?: boolean | |
| shadow?: ShadowProps | |
| shape?: SHAPE_NAME | |
| strike?: boolean | 'dblStrike' | 'sngStrike' | |
| subscript?: boolean | |
| superscript?: boolean | |
| /** | |
| * Vertical alignment | |
| * @default middle | |
| */ | |
| valign?: VAlign | |
| vert?: 'eaVert' | 'horz' | 'mongolianVert' | 'vert' | 'vert270' | 'wordArtVert' | 'wordArtVertRtl' | |
| /** | |
| * Text wrap | |
| * @since v3.3.0 | |
| * @default true | |
| */ | |
| wrap?: boolean | |
| /** | |
| * Whether "Fit to Shape?" is enabled | |
| * @deprecated v3.3.0 - use `fit` | |
| */ | |
| autoFit?: boolean | |
| /** | |
| * Whather "Shrink Text on Overflow?" is enabled | |
| * @deprecated v3.3.0 - use `fit` | |
| */ | |
| shrinkText?: boolean | |
| /** | |
| * Inset | |
| * @deprecated v3.10.0 - use `margin` | |
| */ | |
| inset?: number | |
| /** | |
| * Dash type | |
| * @deprecated v3.3.0 - use `line.dashType` | |
| */ | |
| lineDash?: 'solid' | 'dash' | 'dashDot' | 'lgDash' | 'lgDashDot' | 'lgDashDotDot' | 'sysDash' | 'sysDot' | |
| /** | |
| * @deprecated v3.3.0 - use `line.beginArrowType` | |
| */ | |
| lineHead?: 'none' | 'arrow' | 'diamond' | 'oval' | 'stealth' | 'triangle' | |
| /** | |
| * @deprecated v3.3.0 - use `line.width` | |
| */ | |
| lineSize?: number | |
| /** | |
| * @deprecated v3.3.0 - use `line.endArrowType` | |
| */ | |
| lineTail?: 'none' | 'arrow' | 'diamond' | 'oval' | 'stealth' | 'triangle' | |
| } | |
| export interface TextProps { | |
| text?: string | |
| options?: TextPropsOptions | |
| } | |
| // charts ========================================================================================= | |
| // FUTURE: BREAKING-CHANGE: (soln: use `OptsDataLabelPosition|string` until 3.5/4.0) | |
| /* | |
| export interface OptsDataLabelPosition { | |
| pie: 'ctr' | 'inEnd' | 'outEnd' | 'bestFit' | |
| scatter: 'b' | 'ctr' | 'l' | 'r' | 't' | |
| // TODO: add all othere chart types | |
| } | |
| */ | |
| export type ChartAxisTickMark = 'none' | 'inside' | 'outside' | 'cross' | |
| export type ChartLineCap = 'flat' | 'round' | 'square' | |
| export interface OptsChartData { | |
| _dataIndex?: number | |
| /** | |
| * category labels | |
| * @example ['Year 2000', 'Year 2010', 'Year 2020'] // single-level category axes labels | |
| * @example [['Year 2000', 'Year 2010', 'Year 2020'], ['Decades', '', '']] // multi-level category axes labels | |
| * @since `labels` string[][] type added v3.11.0 | |
| */ | |
| labels?: string[] | string[][] | |
| /** | |
| * series name | |
| * @example 'Locations' | |
| */ | |
| name?: string | |
| /** | |
| * bubble sizes | |
| * @example [5, 1, 5, 1] | |
| */ | |
| sizes?: number[] | |
| /** | |
| * category values | |
| * @example [2000, 2010, 2020] | |
| */ | |
| values?: number[] | |
| /** | |
| * Override `chartColors` | |
| */ | |
| // color?: string // TODO: WIP: (Pull #727) | |
| } | |
| // Used internally, probably shouldn't be used by end users | |
| export interface IOptsChartData extends OptsChartData { | |
| labels?: string[][] | |
| } | |
| export interface OptsChartGridLine { | |
| /** | |
| * MS-PPT > Chart format > Format Major Gridlines > Line > Cap type | |
| * - line cap type | |
| * @default flat | |
| */ | |
| cap?: ChartLineCap | |
| /** | |
| * Gridline color (hex) | |
| * @example 'FF3399' | |
| */ | |
| color?: HexColor | |
| /** | |
| * Gridline size (points) | |
| */ | |
| size?: number | |
| /** | |
| * Gridline style | |
| */ | |
| style?: 'solid' | 'dash' | 'dot' | 'none' | |
| } | |
| // TODO: 202008: chart types remain with predicated with "I" in v3.3.0 (ran out of time!) | |
| export interface IChartMulti { | |
| type: CHART_NAME | |
| data: IOptsChartData[] | |
| options: IChartOptsLib | |
| } | |
| export interface IChartPropsFillLine { | |
| /** | |
| * PowerPoint: Format Chart Area/Plot > Border ["Line"] | |
| * @example border: {color: 'FF0000', pt: 1} // hex RGB color, 1 pt line | |
| */ | |
| border?: BorderProps | |
| /** | |
| * PowerPoint: Format Chart Area/Plot Area > Fill | |
| * @example fill: {color: '696969'} // hex RGB color value | |
| * @example fill: {color: pptx.SchemeColor.background2} // Theme color value | |
| * @example fill: {transparency: 50} // 50% transparency | |
| */ | |
| fill?: ShapeFillProps | |
| } | |
| export interface IChartAreaProps extends IChartPropsFillLine { | |
| /** | |
| * Whether the chart area has rounded corners | |
| * - only applies when either `fill` or `border` is used | |
| * @default true | |
| * @since v3.11 | |
| */ | |
| roundedCorners?: boolean | |
| } | |
| export interface IChartPropsBase { | |
| /** | |
| * Axis position | |
| */ | |
| axisPos?: 'b' | 'l' | 'r' | 't' | |
| chartColors?: HexColor[] | |
| /** | |
| * opacity (0 - 100) | |
| * @example 50 // 50% opaque | |
| */ | |
| chartColorsOpacity?: number | |
| dataBorder?: BorderProps | |
| displayBlanksAs?: string | |
| invertedColors?: HexColor[] | |
| lang?: string | |
| layout?: PositionProps | |
| shadow?: ShadowProps | |
| /** | |
| * @default false | |
| */ | |
| showLabel?: boolean | |
| showLeaderLines?: boolean | |
| /** | |
| * @default false | |
| */ | |
| showLegend?: boolean | |
| /** | |
| * @default false | |
| */ | |
| showPercent?: boolean | |
| /** | |
| * @default false | |
| */ | |
| showSerName?: boolean | |
| /** | |
| * @default false | |
| */ | |
| showTitle?: boolean | |
| /** | |
| * @default false | |
| */ | |
| showValue?: boolean | |
| /** | |
| * 3D Perspecitve | |
| * - range: 0-120 | |
| * @default 30 | |
| */ | |
| v3DPerspective?: number | |
| /** | |
| * Right Angle Axes | |
| * - Shows chart from first-person perspective | |
| * - Overrides `v3DPerspective` when true | |
| * - PowerPoint: Chart Options > 3-D Rotation | |
| * @default false | |
| */ | |
| v3DRAngAx?: boolean | |
| /** | |
| * X Rotation | |
| * - PowerPoint: Chart Options > 3-D Rotation | |
| * - range: 0-359.9 | |
| * @default 30 | |
| */ | |
| v3DRotX?: number | |
| /** | |
| * Y Rotation | |
| * - range: 0-359.9 | |
| * @default 30 | |
| */ | |
| v3DRotY?: number | |
| /** | |
| * PowerPoint: Format Chart Area (Fill & Border/Line) | |
| * @since v3.11 | |
| */ | |
| chartArea?: IChartAreaProps | |
| /** | |
| * PowerPoint: Format Plot Area (Fill & Border/Line) | |
| * @since v3.11 | |
| */ | |
| plotArea?: IChartPropsFillLine | |
| /** | |
| * @deprecated v3.11.0 - use `plotArea.border` | |
| */ | |
| border?: BorderProps | |
| /** | |
| * @deprecated v3.11.0 - use `plotArea.fill` | |
| */ | |
| fill?: HexColor | |
| } | |
| export interface IChartPropsAxisCat { | |
| /** | |
| * Multi-Chart prop: array of cat axes | |
| */ | |
| catAxes?: IChartPropsAxisCat[] | |
| catAxisBaseTimeUnit?: string | |
| catAxisCrossesAt?: number | 'autoZero' | |
| catAxisHidden?: boolean | |
| catAxisLabelColor?: string | |
| catAxisLabelFontBold?: boolean | |
| catAxisLabelFontFace?: string | |
| catAxisLabelFontItalic?: boolean | |
| catAxisLabelFontSize?: number | |
| catAxisLabelFrequency?: string | |
| catAxisLabelPos?: 'none' | 'low' | 'high' | 'nextTo' | |
| catAxisLabelRotate?: number | |
| catAxisLineColor?: string | |
| catAxisLineShow?: boolean | |
| catAxisLineSize?: number | |
| catAxisLineStyle?: 'solid' | 'dash' | 'dot' | |
| catAxisMajorTickMark?: ChartAxisTickMark | |
| catAxisMajorTimeUnit?: string | |
| catAxisMajorUnit?: number | |
| catAxisMaxVal?: number | |
| catAxisMinorTickMark?: ChartAxisTickMark | |
| catAxisMinorTimeUnit?: string | |
| catAxisMinorUnit?: number | |
| catAxisMinVal?: number | |
| /** @since v3.11.0 */ | |
| catAxisMultiLevelLabels?: boolean | |
| catAxisOrientation?: 'minMax' | |
| catAxisTitle?: string | |
| catAxisTitleColor?: string | |
| catAxisTitleFontFace?: string | |
| catAxisTitleFontSize?: number | |
| catAxisTitleRotate?: number | |
| catGridLine?: OptsChartGridLine | |
| catLabelFormatCode?: string | |
| /** | |
| * Whether data should use secondary category axis (instead of primary) | |
| * @default false | |
| */ | |
| secondaryCatAxis?: boolean | |
| showCatAxisTitle?: boolean | |
| } | |
| export interface IChartPropsAxisSer { | |
| serAxisBaseTimeUnit?: string | |
| serAxisHidden?: boolean | |
| serAxisLabelColor?: string | |
| serAxisLabelFontBold?: boolean | |
| serAxisLabelFontFace?: string | |
| serAxisLabelFontItalic?: boolean | |
| serAxisLabelFontSize?: number | |
| serAxisLabelFrequency?: string | |
| serAxisLabelPos?: 'none' | 'low' | 'high' | 'nextTo' | |
| serAxisLineColor?: string | |
| serAxisLineShow?: boolean | |
| serAxisMajorTimeUnit?: string | |
| serAxisMajorUnit?: number | |
| serAxisMinorTimeUnit?: string | |
| serAxisMinorUnit?: number | |
| serAxisOrientation?: string | |
| serAxisTitle?: string | |
| serAxisTitleColor?: string | |
| serAxisTitleFontFace?: string | |
| serAxisTitleFontSize?: number | |
| serAxisTitleRotate?: number | |
| serGridLine?: OptsChartGridLine | |
| serLabelFormatCode?: string | |
| showSerAxisTitle?: boolean | |
| } | |
| export interface IChartPropsAxisVal { | |
| /** | |
| * Whether data should use secondary value axis (instead of primary) | |
| * @default false | |
| */ | |
| secondaryValAxis?: boolean | |
| showValAxisTitle?: boolean | |
| /** | |
| * Multi-Chart prop: array of val axes | |
| */ | |
| valAxes?: IChartPropsAxisVal[] | |
| valAxisCrossesAt?: number | 'autoZero' | |
| valAxisDisplayUnit?: 'billions' | 'hundredMillions' | 'hundreds' | 'hundredThousands' | 'millions' | 'tenMillions' | 'tenThousands' | 'thousands' | 'trillions' | |
| valAxisDisplayUnitLabel?: boolean | |
| valAxisHidden?: boolean | |
| valAxisLabelColor?: string | |
| valAxisLabelFontBold?: boolean | |
| valAxisLabelFontFace?: string | |
| valAxisLabelFontItalic?: boolean | |
| valAxisLabelFontSize?: number | |
| valAxisLabelFormatCode?: string | |
| valAxisLabelPos?: 'none' | 'low' | 'high' | 'nextTo' | |
| valAxisLabelRotate?: number | |
| valAxisLineColor?: string | |
| valAxisLineShow?: boolean | |
| valAxisLineSize?: number | |
| valAxisLineStyle?: 'solid' | 'dash' | 'dot' | |
| /** | |
| * PowerPoint: Format Axis > Axis Options > Logarithmic scale - Base | |
| * - range: 2-99 | |
| * @since v3.5.0 | |
| */ | |
| valAxisLogScaleBase?: number | |
| valAxisMajorTickMark?: ChartAxisTickMark | |
| valAxisMajorUnit?: number | |
| valAxisMaxVal?: number | |
| valAxisMinorTickMark?: ChartAxisTickMark | |
| valAxisMinVal?: number | |
| valAxisOrientation?: 'minMax' | |
| valAxisTitle?: string | |
| valAxisTitleColor?: string | |
| valAxisTitleFontFace?: string | |
| valAxisTitleFontSize?: number | |
| valAxisTitleRotate?: number | |
| valGridLine?: OptsChartGridLine | |
| /** | |
| * Value label format code | |
| * - this also directs Data Table formatting | |
| * @since v3.3.0 | |
| * @example '#%' // round percent | |
| * @example '0.00%' // shows values as '0.00%' | |
| * @example '$0.00' // shows values as '$0.00' | |
| */ | |
| valLabelFormatCode?: string | |
| } | |
| export interface IChartPropsChartBar { | |
| bar3DShape?: string | |
| barDir?: string | |
| barGapDepthPct?: number | |
| /** | |
| * MS-PPT > Format chart > Format Data Point > Series Options > "Gap Width" | |
| * - width (percent) | |
| * - range: `0`-`500` | |
| * @default 150 | |
| */ | |
| barGapWidthPct?: number | |
| barGrouping?: string | |
| /** | |
| * MS-PPT > Format chart > Format Data Point > Series Options > "Series Overlap" | |
| * - overlap (percent) | |
| * - range: `-100`-`100` | |
| * @since v3.9.0 | |
| * @default 0 | |
| */ | |
| barOverlapPct?: number | |
| } | |
| export interface IChartPropsChartDoughnut { | |
| dataNoEffects?: boolean | |
| holeSize?: number | |
| } | |
| export interface IChartPropsChartLine { | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > Line > Cap type | |
| * - line cap type | |
| * @default flat | |
| */ | |
| lineCap?: ChartLineCap | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > Marker Options > Built-in > Type | |
| * - line dash type | |
| * @default solid | |
| */ | |
| lineDash?: 'dash' | 'dashDot' | 'lgDash' | 'lgDashDot' | 'lgDashDotDot' | 'solid' | 'sysDash' | 'sysDot' | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > Marker Options > Built-in > Type | |
| * - marker type | |
| * @default circle | |
| */ | |
| lineDataSymbol?: 'circle' | 'dash' | 'diamond' | 'dot' | 'none' | 'square' | 'triangle' | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > [Marker Options] > Border > Color | |
| * - border color | |
| * @default circle | |
| */ | |
| lineDataSymbolLineColor?: string | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > [Marker Options] > Border > Width | |
| * - border width (points) | |
| * @default 0.75 | |
| */ | |
| lineDataSymbolLineSize?: number | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > Marker Options > Built-in > Size | |
| * - marker size | |
| * - range: 2-72 | |
| * @default 6 | |
| */ | |
| lineDataSymbolSize?: number | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > Line > Width | |
| * - line width (points) | |
| * - range: 0-1584 | |
| * @default 2 | |
| */ | |
| lineSize?: number | |
| /** | |
| * MS-PPT > Chart format > Format Data Series > Line > Smoothed line | |
| * - "Smoothed line" | |
| * @default false | |
| */ | |
| lineSmooth?: boolean | |
| } | |
| export interface IChartPropsChartPie { | |
| dataNoEffects?: boolean | |
| /** | |
| * MS-PPT > Format chart > Format Data Series > Series Options > "Angle of first slice" | |
| * - angle (degrees) | |
| * - range: 0-359 | |
| * @since v3.4.0 | |
| * @default 0 | |
| */ | |
| firstSliceAng?: number | |
| } | |
| export interface IChartPropsChartRadar { | |
| /** | |
| * MS-PPT > Chart Type > Waterfall | |
| * - radar chart type | |
| * @default standard | |
| */ | |
| radarStyle?: 'standard' | 'marker' | 'filled' // TODO: convert to 'radar'|'markers'|'filled' in 4.0 (verbatim with PPT app UI) | |
| } | |
| export interface IChartPropsDataLabel { | |
| dataLabelBkgrdColors?: boolean | |
| dataLabelColor?: string | |
| dataLabelFontBold?: boolean | |
| dataLabelFontFace?: string | |
| dataLabelFontItalic?: boolean | |
| dataLabelFontSize?: number | |
| /** | |
| * Data label format code | |
| * @example '#%' // round percent | |
| * @example '0.00%' // shows values as '0.00%' | |
| * @example '$0.00' // shows values as '$0.00' | |
| */ | |
| dataLabelFormatCode?: string | |
| dataLabelFormatScatter?: 'custom' | 'customXY' | 'XY' | |
| dataLabelPosition?: 'b' | 'bestFit' | 'ctr' | 'l' | 'r' | 't' | 'inEnd' | 'outEnd' | |
| } | |
| export interface IChartPropsDataTable { | |
| dataTableFontSize?: number | |
| /** | |
| * Data table format code | |
| * @since v3.3.0 | |
| * @example '#%' // round percent | |
| * @example '0.00%' // shows values as '0.00%' | |
| * @example '$0.00' // shows values as '$0.00' | |
| */ | |
| dataTableFormatCode?: string | |
| /** | |
| * Whether to show a data table adjacent to the chart | |
| * @default false | |
| */ | |
| showDataTable?: boolean | |
| showDataTableHorzBorder?: boolean | |
| showDataTableKeys?: boolean | |
| showDataTableOutline?: boolean | |
| showDataTableVertBorder?: boolean | |
| } | |
| export interface IChartPropsLegend { | |
| legendColor?: string | |
| legendFontFace?: string | |
| legendFontSize?: number | |
| legendPos?: 'b' | 'l' | 'r' | 't' | 'tr' | |
| } | |
| export interface IChartPropsTitle extends TextBaseProps { | |
| title?: string | |
| titleAlign?: string | |
| titleBold?: boolean | |
| titleColor?: string | |
| titleFontFace?: string | |
| titleFontSize?: number | |
| titlePos?: { x: number, y: number } | |
| titleRotate?: number | |
| } | |
| export interface IChartOpts | |
| extends IChartPropsAxisCat, | |
| IChartPropsAxisSer, | |
| IChartPropsAxisVal, | |
| IChartPropsBase, | |
| IChartPropsChartBar, | |
| IChartPropsChartDoughnut, | |
| IChartPropsChartLine, | |
| IChartPropsChartPie, | |
| IChartPropsChartRadar, | |
| IChartPropsDataLabel, | |
| IChartPropsDataTable, | |
| IChartPropsLegend, | |
| IChartPropsTitle, | |
| ObjectNameProps, | |
| OptsChartGridLine, | |
| PositionProps { | |
| /** | |
| * Alt Text value ("How would you describe this object and its contents to someone who is blind?") | |
| * - PowerPoint: [right-click on a chart] > "Edit Alt Text..." | |
| */ | |
| altText?: string | |
| } | |
| export interface IChartOptsLib extends IChartOpts { | |
| _type?: CHART_NAME | IChartMulti[] // TODO: v3.4.0 - move to `IChartOpts`, remove `IChartOptsLib` | |
| } | |
| export interface ISlideRelChart extends OptsChartData { | |
| type: CHART_NAME | IChartMulti[] | |
| opts: IChartOptsLib | |
| data: IOptsChartData[] | |
| // internal below | |
| rId: number | |
| Target: string | |
| globalId: number | |
| fileName: string | |
| } | |
| // Core | |
| // ==== | |
| // PRIVATE vvv | |
| export interface ISlideRel { | |
| type: SLIDE_OBJECT_TYPES | |
| Target: string | |
| fileName?: string | |
| data: any[] | string | |
| opts?: IChartOpts | |
| path?: string | |
| extn?: string | |
| globalId?: number | |
| rId: number | |
| } | |
| export interface ISlideRelMedia { | |
| type: string | |
| opts?: MediaProps | |
| path?: string | |
| extn?: string | |
| data?: string | ArrayBuffer | |
| /** used to indicate that a media file has already been read/enocded (PERF) */ | |
| isDuplicate?: boolean | |
| isSvgPng?: boolean | |
| svgSize?: { w: number, h: number } | |
| rId: number | |
| Target: string | |
| } | |
| export interface ISlideObject { | |
| _type: SLIDE_OBJECT_TYPES | |
| options?: ObjectOptions | |
| // text | |
| text?: TextProps[] | |
| // table | |
| arrTabRows?: TableCell[][] | |
| // chart | |
| chartRid?: number | |
| // image: | |
| image?: string | |
| imageRid?: number | |
| hyperlink?: HyperlinkProps | |
| // media | |
| media?: string | |
| mtype?: MediaType | |
| mediaRid?: number | |
| shape?: SHAPE_NAME | |
| formula?: string | |
| formulaAlign?: 'left' | 'center' | 'right' | |
| } | |
| // PRIVATE ^^^ | |
| export interface WriteBaseProps { | |
| /** | |
| * Whether to compress export (can save substantial space, but takes a bit longer to export) | |
| * @default false | |
| * @since v3.5.0 | |
| */ | |
| compression?: boolean | |
| } | |
| export interface WriteProps extends WriteBaseProps { | |
| /** | |
| * Output type | |
| * - values: 'arraybuffer' | 'base64' | 'binarystring' | 'blob' | 'nodebuffer' | 'uint8array' | 'STREAM' | |
| * @default 'blob' | |
| */ | |
| outputType?: WRITE_OUTPUT_TYPE | |
| } | |
| export interface WriteFileProps extends WriteBaseProps { | |
| /** | |
| * Export file name | |
| * @default 'Presentation.pptx' | |
| */ | |
| fileName?: string | |
| } | |
| export interface SectionProps { | |
| _type: 'user' | 'default' | |
| _slides: PresSlide[] | |
| /** | |
| * Section title | |
| */ | |
| title: string | |
| /** | |
| * Section order - uses to add section at any index | |
| * - values: 1-n | |
| */ | |
| order?: number | |
| } | |
| export interface PresLayout { | |
| _sizeW?: number | |
| _sizeH?: number | |
| /** | |
| * Layout Name | |
| * @example 'LAYOUT_WIDE' | |
| */ | |
| name: string | |
| width: number | |
| height: number | |
| } | |
| export interface SlideNumberProps extends PositionProps, TextBaseProps { | |
| /** | |
| * margin (points) | |
| */ | |
| margin?: Margin // TODO: convert to inches in 4.0 (valid values are 0-22) | |
| } | |
| export interface SlideMasterProps { | |
| /** | |
| * Unique name for this master | |
| */ | |
| title: string | |
| background?: BackgroundProps | |
| margin?: Margin | |
| slideNumber?: SlideNumberProps | |
| objects?: Array< | { chart: IChartOpts } | |
| | { image: ImageProps } | |
| | { line: ShapeProps } | |
| | { rect: ShapeProps } | |
| | { text: TextProps } | |
| | { | |
| placeholder: { | |
| options: PlaceholderProps | |
| /** | |
| * Text to be shown in placeholder (shown until user focuses textbox or adds text) | |
| * - Leave blank to have powerpoint show default phrase (ex: "Click to add title") | |
| */ | |
| text?: string | |
| } | |
| }> | |
| /** | |
| * @deprecated v3.3.0 - use `background` | |
| */ | |
| bkgd?: string | BackgroundProps | |
| } | |
| export interface ObjectOptions extends ImageProps, PositionProps, ShapeProps, TableCellProps, TextPropsOptions { | |
| _placeholderIdx?: number | |
| _placeholderType?: PLACEHOLDER_TYPE | |
| cx?: Coord | |
| cy?: Coord | |
| margin?: Margin | |
| colW?: number | number[] // table | |
| rowH?: number | number[] // table | |
| } | |
| export interface SlideBaseProps { | |
| _bkgdImgRid?: number | |
| _margin?: Margin | |
| _name?: string | |
| _presLayout: PresLayout | |
| _rels: ISlideRel[] | |
| _relsChart: ISlideRelChart[] // needed as we use args:"PresSlide|SlideLayout" often | |
| _relsMedia: ISlideRelMedia[] // needed as we use args:"PresSlide|SlideLayout" often | |
| _slideNum: number | |
| _slideNumberProps?: SlideNumberProps | |
| _slideObjects?: ISlideObject[] | |
| background?: BackgroundProps | |
| /** | |
| * @deprecated v3.3.0 - use `background` | |
| */ | |
| bkgd?: string | BackgroundProps | |
| } | |
| export interface SlideLayout extends SlideBaseProps { | |
| _slide?: { | |
| _bkgdImgRid?: number | |
| back: string | |
| color: string | |
| hidden?: boolean | |
| } | |
| } | |
| export interface PresSlide extends SlideBaseProps { | |
| _rId: number | |
| _slideLayout: SlideLayout | |
| _slideId: number | |
| addChart: (type: CHART_NAME | IChartMulti[], data: IOptsChartData[], options?: IChartOpts) => PresSlide | |
| addImage: (options: ImageProps) => PresSlide | |
| addMedia: (options: MediaProps) => PresSlide | |
| addNotes: (notes: string) => PresSlide | |
| addShape: (shapeName: SHAPE_NAME, options?: ShapeProps) => PresSlide | |
| addTable: (tableRows: TableRow[], options?: TableProps) => PresSlide | |
| addText: (text: string | TextProps[], options?: TextPropsOptions) => PresSlide | |
| /** | |
| * Background color or image (`color` | `path` | `data`) | |
| * @example { color: 'FF3399' } - hex color | |
| * @example { color: 'FF3399', transparency:50 } - hex color with 50% transparency | |
| * @example { path: 'https://onedrives.com/myimg.png` } - retrieve image via URL | |
| * @example { path: '/home/gitbrent/images/myimg.png` } - retrieve image via local path | |
| * @example { data: 'image/png;base64,iVtDaDrF[...]=' } - base64 string | |
| * @since v3.3.0 | |
| */ | |
| background?: BackgroundProps | |
| /** | |
| * Default text color (hex format) | |
| * @example 'FF3399' | |
| * @default '000000' (DEF_FONT_COLOR) | |
| */ | |
| color?: HexColor | |
| /** | |
| * Whether slide is hidden | |
| * @default false | |
| */ | |
| hidden?: boolean | |
| /** | |
| * Slide number options | |
| */ | |
| slideNumber?: SlideNumberProps | |
| } | |
| export interface AddSlideProps { | |
| masterName?: string // TODO: 20200528: rename to "masterTitle" (createMaster uses `title` so lets be consistent) | |
| sectionTitle?: string | |
| } | |
| export interface PresentationProps { | |
| author: string | |
| company: string | |
| layout: string | |
| masterSlide: PresSlide | |
| /** | |
| * Presentation's layout | |
| * read-only | |
| */ | |
| presLayout: PresLayout | |
| revision: string | |
| /** | |
| * Whether to enable right-to-left mode | |
| * @default false | |
| */ | |
| rtlMode: boolean | |
| subject: string | |
| theme: ThemeProps | |
| title: string | |
| } | |
| // PRIVATE interface | |
| export interface IPresentationProps extends PresentationProps { | |
| sections: SectionProps[] | |
| slideLayouts: SlideLayout[] | |
| slides: PresSlide[] | |
| } | |