@office-open/pptx
Advanced tools
| export * from "@office-open/core/chart"; |
| export * from "@office-open/core/chart"; | ||
| export {}; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| export * from "@office-open/core/drawingml"; |
| export * from "@office-open/core/drawingml"; | ||
| export {}; |
| import { AppPropertiesOptions, CorePropertiesOptions, CustomPropertyOptions, DataType, Relationships, ShapeLockingOptions, TableStyleListOptions, UniversalMeasure } from "@office-open/core"; | ||
| import { BlipFillConfigOptions, BlipFillMediaData, CustomGeometryOptions, FillOptions as FillOptions$1, GradientStopOptions, PresetGeometryOptions, buildFill, extractBlipFillMedia } from "@office-open/core/drawingml"; | ||
| import { ColorSchemeOptions, FontSchemeOptions, ThemeOptions, createThemeXml } from "@office-open/core/theme"; | ||
| import { ChartSpaceOptions } from "@office-open/core/chart"; | ||
| import { TreeNode } from "@office-open/core/smartart"; | ||
| //#region src/shared/drawingml/effects.d.ts | ||
| declare const ReflectionAlignment: { | ||
| readonly TOP_LEFT: "topLeft"; | ||
| readonly TOP: "top"; | ||
| readonly TOP_RIGHT: "topRight"; | ||
| readonly LEFT: "left"; | ||
| readonly CENTER: "center"; | ||
| readonly RIGHT: "right"; | ||
| readonly BOTTOM_LEFT: "bottomLeft"; | ||
| readonly BOTTOM: "bottom"; | ||
| readonly BOTTOM_RIGHT: "bottomRight"; | ||
| }; | ||
| interface ShadowOptions { | ||
| blur?: number; | ||
| distance?: number; | ||
| direction?: number; | ||
| color?: string; | ||
| alpha?: number; | ||
| rotateWithShape?: boolean; | ||
| } | ||
| interface GlowOptions { | ||
| radius?: number; | ||
| color?: string; | ||
| alpha?: number; | ||
| } | ||
| interface ReflectionOptions { | ||
| blurRadius?: number; | ||
| distance?: number; | ||
| direction?: number; | ||
| startAlpha?: number; | ||
| startPosition?: number; | ||
| endAlpha?: number; | ||
| endPosition?: number; | ||
| fadeDirection?: number; | ||
| scaleX?: number; | ||
| scaleY?: number; | ||
| skewX?: number; | ||
| skewY?: number; | ||
| alignment?: (typeof ReflectionAlignment)[keyof typeof ReflectionAlignment]; | ||
| rotateWithShape?: boolean; | ||
| } | ||
| interface SoftEdgeOptions { | ||
| radius?: number; | ||
| } | ||
| interface PPTXBevelOptions { | ||
| width?: number; | ||
| height?: number; | ||
| preset?: string; | ||
| } | ||
| interface Rotation3DOptions { | ||
| x?: number; | ||
| y?: number; | ||
| z?: number; | ||
| perspective?: number; | ||
| } | ||
| interface EffectsOptions { | ||
| outerShadow?: ShadowOptions; | ||
| innerShadow?: ShadowOptions; | ||
| glow?: GlowOptions; | ||
| reflection?: ReflectionOptions; | ||
| softEdge?: SoftEdgeOptions; | ||
| rotation3D?: Rotation3DOptions; | ||
| bevelTop?: PPTXBevelOptions; | ||
| bevelBottom?: PPTXBevelOptions; | ||
| extrusionH?: number; | ||
| depth?: number; | ||
| contourWidth?: number; | ||
| material?: "plastic" | "metal" | "matte" | "warmMatte" | "softEdge" | "flat" | "powder"; | ||
| lighting?: "flat" | "legacyFlat1" | "legacyFlat2" | "legacyFlat3" | "legacyFlat4" | "legacyHarsh1" | "legacyHarsh2" | "legacyHarsh3" | "legacyHarsh4" | "legacyNormal1" | "legacyNormal2" | "legacyNormal3" | "legacyNormal4" | "threePt" | "balanced" | "soft" | "harsh" | "flood" | "contrasting" | "morning" | "sunrise" | "sunset" | "chilly" | "freezing" | "twoPt" | "brightRoom" | "gallery"; | ||
| } | ||
| declare function createPptxEffectList(options: EffectsOptions): string | null; | ||
| //#endregion | ||
| //#region src/parts/background.d.ts | ||
| interface BackgroundOptions { | ||
| fill?: FillOptions$1; | ||
| effects?: EffectsOptions; | ||
| shadeToTitle?: boolean; | ||
| blackWhiteMode?: "clr" | "gray" | "ltGray" | "invGray" | "gmGray" | "bw" | "auto" | "black" | "white"; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/handout-master.d.ts | ||
| interface ColorMapOptions { | ||
| bg1?: string; | ||
| tx1?: string; | ||
| bg2?: string; | ||
| tx2?: string; | ||
| accent1?: string; | ||
| accent2?: string; | ||
| accent3?: string; | ||
| accent4?: string; | ||
| accent5?: string; | ||
| accent6?: string; | ||
| hlink?: string; | ||
| folHlink?: string; | ||
| } | ||
| interface HeaderFooterOptions { | ||
| date?: boolean; | ||
| header?: boolean; | ||
| footer?: boolean; | ||
| slideNumber?: boolean; | ||
| } | ||
| interface HandoutMasterOptions { | ||
| colorMap?: ColorMapOptions; | ||
| headerFooter?: HeaderFooterOptions; | ||
| } | ||
| declare function buildHandoutMasterXml(options?: HandoutMasterOptions): string; | ||
| //#endregion | ||
| //#region src/parts/notes-master.d.ts | ||
| interface NotesLevelProperties { | ||
| fontSize?: number | UniversalMeasure; | ||
| marginLeft?: number | UniversalMeasure; | ||
| alignment?: string; | ||
| } | ||
| interface NotesMasterOptions { | ||
| colorMap?: ColorMapOptions; | ||
| headerFooter?: HeaderFooterOptions; | ||
| notesStyle?: NotesLevelProperties[]; | ||
| } | ||
| declare function buildNotesMasterXml(options?: NotesMasterOptions): string; | ||
| //#endregion | ||
| //#region src/parts/presentation.d.ts | ||
| interface PhotoAlbumOptions { | ||
| blackWhite?: boolean; | ||
| showCaptions?: boolean; | ||
| layout?: "fitToSlide" | "1pic" | "2pic" | "4pic" | "1picTitle" | "2picTitle" | "4picTitle"; | ||
| frame?: "frameStyle1" | "frameStyle2" | "frameStyle3" | "frameStyle4" | "frameStyle5" | "frameStyle6" | "frameStyle7" | "none"; | ||
| } | ||
| interface ModifyVerifierOptions { | ||
| password?: string; | ||
| algorithmName?: string; | ||
| hashValue?: string; | ||
| saltValue?: string; | ||
| spinValue?: number; | ||
| cryptoProviderType?: string; | ||
| cryptoAlgorithmClass?: string; | ||
| cryptoAlgorithmType?: string; | ||
| cryptoAlgorithmSid?: number; | ||
| spinCount?: number; | ||
| saltData?: string; | ||
| hashData?: string; | ||
| cryptoProvider?: string; | ||
| algorithmExtensionId?: number; | ||
| algorithmExtensionSource?: string; | ||
| cryptoProviderTypeExtension?: number; | ||
| cryptoProviderTypeExtensionSource?: string; | ||
| } | ||
| interface EmbeddedFontOptions { | ||
| font: { | ||
| typeface: string; | ||
| panose?: string; | ||
| pitchFamily?: number; | ||
| charset?: number; | ||
| }; | ||
| regular?: string; | ||
| bold?: string; | ||
| italic?: string; | ||
| boldItalic?: string; | ||
| } | ||
| interface CustomShowOptions { | ||
| name: string; | ||
| id: number; | ||
| slides: { | ||
| rId: string; | ||
| }[]; | ||
| } | ||
| interface KinsokuOptions { | ||
| lang?: string; | ||
| invalStChars: string; | ||
| invalEndChars: string; | ||
| } | ||
| interface StringTagOptions { | ||
| name: string; | ||
| val: string; | ||
| } | ||
| interface CustomerDataOptions { | ||
| data?: { | ||
| rId: string; | ||
| }[]; | ||
| tags?: { | ||
| rId: string; | ||
| }; | ||
| tagList?: StringTagOptions[]; | ||
| } | ||
| interface PresentationPartOptions { | ||
| slideWidth?: number; | ||
| slideHeight?: number; | ||
| slideIds: number[]; | ||
| masterCount: number; | ||
| notesMasterRId?: number; | ||
| handoutMasterRId?: number; | ||
| serverZoom?: string; | ||
| firstSlideNum?: number; | ||
| showSpecialPlsOnTitleSld?: boolean; | ||
| rtl?: boolean; | ||
| removePersonalInfoOnSave?: boolean; | ||
| compatMode?: boolean; | ||
| strictFirstAndLastChars?: boolean; | ||
| embedTrueTypeFonts?: boolean; | ||
| saveSubsetFonts?: boolean; | ||
| autoCompressPictures?: boolean; | ||
| bookmarkIdSeed?: number; | ||
| conformance?: "strict" | "transitional"; | ||
| photoAlbum?: PhotoAlbumOptions; | ||
| modifyVerifier?: ModifyVerifierOptions; | ||
| embeddedFonts?: EmbeddedFontOptions[]; | ||
| customShows?: CustomShowOptions[]; | ||
| kinsoku?: KinsokuOptions[]; | ||
| customerData?: CustomerDataOptions; | ||
| sections?: PresentationSectionGroup[]; | ||
| } | ||
| interface PresentationSectionGroup { | ||
| name: string; | ||
| slideIndices: number[]; | ||
| } | ||
| interface ViewWrapper { | ||
| view: { | ||
| currentOptions: unknown; | ||
| }; | ||
| relationships: Relationships; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/presentation-properties.d.ts | ||
| interface WebPropertiesOptions { | ||
| showAnimation?: boolean; | ||
| resizeGraphics?: boolean; | ||
| allowPng?: boolean; | ||
| relyOnVml?: boolean; | ||
| organizeInFolders?: boolean; | ||
| useLongFilenames?: boolean; | ||
| imageSize?: string; | ||
| encoding?: string; | ||
| color?: string; | ||
| } | ||
| interface PrintPropertiesOptions { | ||
| printWhat?: "slides" | "handouts1" | "handouts2" | "handouts3" | "handouts4" | "handouts6" | "handouts9" | "notes" | "outline"; | ||
| colorMode?: "blackWhite" | "gray" | "color"; | ||
| hiddenSlides?: boolean; | ||
| scaleToFitPaper?: boolean; | ||
| frameSlides?: boolean; | ||
| } | ||
| interface HtmlPublishPropertiesOptions { | ||
| showSpeakerNotes?: boolean; | ||
| target?: string; | ||
| title?: string; | ||
| rId?: string; | ||
| } | ||
| interface PresentationPropertiesFullOptions { | ||
| show?: ShowOptions; | ||
| web?: WebPropertiesOptions; | ||
| print?: PrintPropertiesOptions; | ||
| htmlPublish?: HtmlPublishPropertiesOptions; | ||
| colorMru?: string[]; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/slide-layout.d.ts | ||
| type SlideLayoutType = "blank" | "title" | "tx" | "twoColTx" | "titleOnly" | "obj" | "secHead" | "chart" | "tbl" | "picTx" | "twoObj" | "twoTxTwoObj" | "objTx" | "vertTx" | "vertTitleAndTx"; | ||
| declare function buildLayoutXml(layoutType: SlideLayoutType, slideWidth?: number): string; | ||
| declare function buildCustomLayoutXml(def: LayoutDefinition): string; | ||
| //#endregion | ||
| //#region src/shared/header-footer.d.ts | ||
| interface SlideHeaderFooterOptions { | ||
| slideNumber?: boolean; | ||
| dateTime?: boolean; | ||
| footer?: string | boolean; | ||
| header?: boolean; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/slide-master.d.ts | ||
| interface MasterPlaceholderPosition { | ||
| x: number | UniversalMeasure; | ||
| y: number | UniversalMeasure; | ||
| width: number | UniversalMeasure; | ||
| height: number | UniversalMeasure; | ||
| } | ||
| interface MasterPlaceholderOptions { | ||
| title?: boolean | MasterPlaceholderPosition; | ||
| body?: boolean | MasterPlaceholderPosition; | ||
| date?: boolean | MasterPlaceholderPosition; | ||
| footer?: boolean | MasterPlaceholderPosition; | ||
| slideNumber?: boolean | MasterPlaceholderPosition; | ||
| } | ||
| interface SlideMasterOptions { | ||
| background?: BackgroundOptions; | ||
| children?: MasterChild[]; | ||
| placeholders?: MasterPlaceholderOptions; | ||
| } | ||
| declare function buildSlideMasterXml(layoutCount: number, _headerFooter?: SlideHeaderFooterOptions, masterOptions?: SlideMasterOptions, slideWidth?: number, masterIndex?: number): string; | ||
| //#endregion | ||
| //#region src/parts/slide/slide.d.ts | ||
| interface ControlOptions { | ||
| shapeId?: number; | ||
| name?: string; | ||
| showAsIcon?: boolean; | ||
| rId?: string; | ||
| imageWidth?: number; | ||
| imageHeight?: number; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/chart-frame.d.ts | ||
| interface ChartOptions extends ChartSpaceOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/paragraph-properties.d.ts | ||
| type TextAlignment = "left" | "center" | "right" | "justify"; | ||
| type BulletCharOptions = { | ||
| type: "char"; | ||
| char?: string; | ||
| color?: string; | ||
| size?: number; | ||
| }; | ||
| type BulletAutoNumOptions = { | ||
| type: "autoNum"; | ||
| format?: string; | ||
| startAt?: number; | ||
| color?: string; | ||
| size?: number; | ||
| }; | ||
| type BulletNoneOption = { | ||
| type: "none"; | ||
| }; | ||
| type BulletOptions = BulletCharOptions | BulletAutoNumOptions | BulletNoneOption; | ||
| interface ParagraphPropertiesOptions { | ||
| alignment?: TextAlignment; | ||
| indentLevel?: number; | ||
| marginBottom?: number; | ||
| marginTop?: number; | ||
| bullet?: BulletOptions; | ||
| lineSpacing?: number; | ||
| lineSpacingPoints?: number; | ||
| marginIndent?: number; | ||
| marginRight?: number; | ||
| defTabSize?: number; | ||
| fontAlignment?: "auto" | "t" | "ctr" | "b" | "base"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/run-properties.d.ts | ||
| declare const UnderlineStyle: { | ||
| readonly SINGLE: "single"; | ||
| readonly DOUBLE: "double"; | ||
| readonly NONE: "none"; | ||
| }; | ||
| declare const StrikeStyle: { | ||
| readonly SINGLE: "sngStrike"; | ||
| readonly DOUBLE: "dblStrike"; | ||
| readonly NONE: "noStrike"; | ||
| }; | ||
| declare const TextCapitalization: { | ||
| readonly NONE: "none"; | ||
| readonly ALL: "all"; | ||
| readonly SMALL: "small"; | ||
| }; | ||
| interface HyperlinkOptions { | ||
| url: string; | ||
| referenceId?: string; | ||
| tooltip?: string; | ||
| action?: string; | ||
| highlightClick?: boolean; | ||
| endSound?: boolean; | ||
| invalidUrl?: boolean; | ||
| } | ||
| interface RunPropertiesOptions { | ||
| size?: number; | ||
| bold?: boolean; | ||
| italic?: boolean; | ||
| underline?: (typeof UnderlineStyle)[keyof typeof UnderlineStyle]; | ||
| font?: string; | ||
| lang?: string; | ||
| fill?: FillOptions$1; | ||
| hyperlink?: HyperlinkOptions; | ||
| strike?: (typeof StrikeStyle)[keyof typeof StrikeStyle]; | ||
| baseline?: number; | ||
| spacing?: number; | ||
| capitalization?: (typeof TextCapitalization)[keyof typeof TextCapitalization]; | ||
| shadow?: boolean; | ||
| outline?: boolean; | ||
| rightToLeft?: boolean; | ||
| noProof?: boolean; | ||
| dirty?: boolean; | ||
| kumimoji?: boolean; | ||
| alternateLanguage?: string; | ||
| normalizeHeight?: boolean; | ||
| bookmarkMark?: string; | ||
| smartTagId?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/run.d.ts | ||
| interface RunOptions extends RunPropertiesOptions { | ||
| text?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/paragraph.d.ts | ||
| interface ParagraphOptions { | ||
| text?: string; | ||
| properties?: ParagraphPropertiesOptions; | ||
| children?: (RunOptions | string)[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-cell-properties.d.ts | ||
| interface CellBorderOptions { | ||
| width?: number | UniversalMeasure; | ||
| color?: string; | ||
| dashStyle?: "solid" | "dash" | "dashDot" | "lgDash" | "sysDot" | "sysDash"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-cell.d.ts | ||
| type VerticalAlignment = "top" | "center" | "bottom" | "justify" | "distribute"; | ||
| interface TableCellOptions { | ||
| text?: string; | ||
| children?: (ParagraphOptions | string)[]; | ||
| fill?: FillOptions$1; | ||
| borders?: { | ||
| top?: CellBorderOptions; | ||
| bottom?: CellBorderOptions; | ||
| left?: CellBorderOptions; | ||
| right?: CellBorderOptions; | ||
| }; | ||
| columnSpan?: number; | ||
| rowSpan?: number; | ||
| horizontalMerge?: "continue" | "restart"; | ||
| verticalMerge?: "continue" | "restart"; | ||
| verticalAlign?: VerticalAlignment; | ||
| margins?: { | ||
| top?: number | UniversalMeasure; | ||
| bottom?: number | UniversalMeasure; | ||
| left?: number | UniversalMeasure; | ||
| right?: number | UniversalMeasure; | ||
| }; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/text-body.d.ts | ||
| interface TextBodyOptions { | ||
| text?: string; | ||
| children?: (ParagraphOptions | string)[]; | ||
| vertical?: "horz" | "vert" | "vert270" | "wordArtVert" | "eaVert" | "mongolianVert" | "wordArtVertRtl"; | ||
| anchor?: VerticalAlignment; | ||
| autoFit?: "normal" | "shape" | "none"; | ||
| wrap?: "square" | "none"; | ||
| margins?: { | ||
| top?: number | UniversalMeasure; | ||
| bottom?: number | UniversalMeasure; | ||
| left?: number | UniversalMeasure; | ||
| right?: number | UniversalMeasure; | ||
| }; | ||
| marginTop?: number | UniversalMeasure; | ||
| marginBottom?: number | UniversalMeasure; | ||
| columns?: number; | ||
| columnSpacing?: number; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/locked-canvas-frame.d.ts | ||
| interface LockedCanvasShapeOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| geometry?: string; | ||
| fill?: string; | ||
| textBody?: TextBodyOptions; | ||
| } | ||
| interface LockedCanvasFrameOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| id?: number; | ||
| name?: string; | ||
| children?: LockedCanvasShapeOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/ole-frame.d.ts | ||
| interface OleEmbedOptions { | ||
| rId: string; | ||
| lastEdited?: string; | ||
| } | ||
| interface OleLinkOptions { | ||
| rId: string; | ||
| updateLastEdited?: string; | ||
| autoUpdate?: boolean; | ||
| } | ||
| interface OleOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| progId?: string; | ||
| spid?: string; | ||
| name?: string; | ||
| showAsIcon?: boolean; | ||
| imgW?: number; | ||
| imgH?: number; | ||
| embed?: OleEmbedOptions; | ||
| link?: OleLinkOptions; | ||
| imgRId?: string; | ||
| followColorScheme?: "none" | "full" | "textAndBackground"; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/smartart.d.ts | ||
| interface SmartArtOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| nodes: TreeNode[]; | ||
| name?: string; | ||
| layout?: string; | ||
| style?: string; | ||
| color?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/animation/types.d.ts | ||
| type AnimationType = "appear" | "fade" | "fly" | "wipe" | "dissolve" | "split" | "blinds" | "checker" | "randomBars" | "wheel" | "zoom" | "cover" | "push" | "strips"; | ||
| type AnimationTrigger = "onClick" | "withPrevious" | "afterPrevious"; | ||
| type AnimationDirection = "left" | "right" | "up" | "down" | "horizontal" | "vertical"; | ||
| type AnimationClass = "entr" | "exit" | "emph" | "mediacall"; | ||
| type EmphasisType = "growShrink" | "spin" | "growWithTurn" | "colorChange" | "transparency" | "boldFlash" | "wave" | "pulse"; | ||
| type PathAnimationType = "customPath" | "arc" | "bounce" | "circle" | "curve" | "figureEight" | "line" | "loop"; | ||
| type MediaAnimationType = "playAudio" | "playVideo" | "play"; | ||
| type AnimationCalcMode = "discrete" | "lin" | "fmla"; | ||
| type AnimationValueType = "str" | "num" | "clr"; | ||
| interface AnimationVariantOptions { | ||
| bool?: boolean; | ||
| int?: number; | ||
| float?: number; | ||
| string?: string; | ||
| color?: string; | ||
| } | ||
| interface EndConditionOptions { | ||
| event?: string; | ||
| delay?: string; | ||
| timeNodeId?: number; | ||
| runtimeNode?: "first" | "last" | "all"; | ||
| } | ||
| interface AnimationBuildOptions { | ||
| type: "paragraph" | "diagram" | "oleChart" | "graphic"; | ||
| spid: number; | ||
| grpId: number; | ||
| uiExpand?: boolean; | ||
| build?: "allAtOnce" | "p" | "cust" | "whole"; | ||
| bldLvl?: number; | ||
| animBg?: boolean; | ||
| autoUpdateAnimBg?: boolean; | ||
| rev?: boolean; | ||
| advAuto?: number; | ||
| templates?: AnimationTemplateOptions[]; | ||
| diagramBuild?: string; | ||
| oleChartBuild?: string; | ||
| oleChartAnimBg?: boolean; | ||
| graphicBuildAsOne?: boolean; | ||
| } | ||
| interface AnimationTemplateOptions { | ||
| lvl?: number; | ||
| children: AnimationOptions[]; | ||
| } | ||
| interface AnimationOptions { | ||
| type?: AnimationType; | ||
| duration?: number; | ||
| delay?: number; | ||
| trigger?: AnimationTrigger; | ||
| direction?: AnimationDirection; | ||
| class?: AnimationClass; | ||
| emphasisType?: EmphasisType; | ||
| pathType?: PathAnimationType; | ||
| path?: string; | ||
| speed?: number; | ||
| repeatCount?: number; | ||
| autoReverse?: boolean; | ||
| color?: string; | ||
| mediaType?: MediaAnimationType; | ||
| isNarration?: boolean; | ||
| fullScreen?: boolean; | ||
| volume?: number; | ||
| mute?: boolean; | ||
| attributeName?: string; | ||
| calcMode?: AnimationCalcMode; | ||
| valueType?: AnimationValueType; | ||
| from?: string; | ||
| to?: string; | ||
| animBy?: string; | ||
| charRange?: [number, number]; | ||
| paragraphRange?: [number, number]; | ||
| setBehavior?: { | ||
| attributeName: string; | ||
| toValue: string; | ||
| toType?: "string" | "number"; | ||
| }; | ||
| commandType?: "call" | "evt" | "verb"; | ||
| command?: string; | ||
| iterate?: { | ||
| type?: "el" | "wd" | "lt"; | ||
| interval?: number; | ||
| backwards?: boolean; | ||
| iteratePercentage?: number; | ||
| }; | ||
| repeatDuration?: string; | ||
| acceleration?: number; | ||
| deceleration?: number; | ||
| restart?: "always" | "whenNotActive" | "never"; | ||
| syncBehavior?: "canSlip" | "isLocked" | "stoppable"; | ||
| timeFilter?: string; | ||
| eventFilter?: string; | ||
| display?: boolean; | ||
| masterRelation?: "clearConn" | "keepConn" | "resume"; | ||
| buildLevel?: number; | ||
| groupId?: number; | ||
| afterEffect?: boolean; | ||
| nodePlaceholder?: boolean; | ||
| advanceAfterTime?: string; | ||
| animateBackground?: boolean; | ||
| autoUpdateAnimationBackground?: boolean; | ||
| additive?: "base" | "sum" | "repl" | "mult" | "none"; | ||
| accumulate?: "none" | "always"; | ||
| transformType?: "pt" | "img"; | ||
| runtimeContext?: string; | ||
| override?: "normal" | "childStyle"; | ||
| paragraphBuild?: "whole" | "allAtOnce" | "p" | "cust"; | ||
| formula?: string; | ||
| colorSpace?: "rgb" | "hsl"; | ||
| pathEditMode?: "relative" | "fixed" | "none"; | ||
| previousAction?: "none" | "skipTimed"; | ||
| pointsTypes?: string; | ||
| rotationAngle?: number; | ||
| zoomContents?: boolean; | ||
| showWhenStopped?: boolean; | ||
| numberOfSlides?: number; | ||
| propertyList?: string; | ||
| endConditions?: EndConditionOptions[]; | ||
| endSyncCondition?: EndConditionOptions; | ||
| subTimeNodes?: AnimationOptions[]; | ||
| exclusiveMode?: boolean; | ||
| inkTargetShapeId?: number; | ||
| soundTarget?: string; | ||
| subShapeId?: number; | ||
| graphicElementType?: string; | ||
| oleChartElementType?: string; | ||
| oleChartElementLevel?: number; | ||
| variantBool?: boolean; | ||
| variantInt?: number; | ||
| variantFloat?: number; | ||
| variantColor?: string; | ||
| colorFrom?: string; | ||
| colorTo?: string; | ||
| colorByRgb?: { | ||
| r: string; | ||
| g: string; | ||
| b: string; | ||
| }; | ||
| colorByHsl?: { | ||
| h: string; | ||
| s: string; | ||
| l: string; | ||
| }; | ||
| effectProgress?: AnimationVariantOptions; | ||
| motionFrom?: { | ||
| x: string; | ||
| y: string; | ||
| }; | ||
| motionRotationCenter?: { | ||
| x: string; | ||
| y: string; | ||
| }; | ||
| builds?: AnimationBuildOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/media/data.d.ts | ||
| interface MediaDataTransformation { | ||
| pixels: { | ||
| x: number; | ||
| y: number; | ||
| }; | ||
| emus: { | ||
| x: number; | ||
| y: number; | ||
| }; | ||
| flip?: { | ||
| vertical?: boolean; | ||
| horizontal?: boolean; | ||
| }; | ||
| rotation?: number; | ||
| } | ||
| interface CoreMediaData { | ||
| fileName: string; | ||
| transformation: MediaDataTransformation; | ||
| data: Uint8Array; | ||
| } | ||
| interface RegularMediaData { | ||
| type: "jpg" | "png" | "gif" | "bmp" | "tif" | "ico" | "emf" | "wmf"; | ||
| } | ||
| interface SvgMediaData { | ||
| type: "svg"; | ||
| fallback: RegularMediaData & CoreMediaData; | ||
| } | ||
| interface VideoMediaData { | ||
| type: "mp4" | "mov" | "wmv" | "avi"; | ||
| } | ||
| interface AudioMediaData { | ||
| type: "mp3" | "wav" | "wma" | "aac"; | ||
| } | ||
| type MediaData = (RegularMediaData | SvgMediaData | VideoMediaData | AudioMediaData) & CoreMediaData; | ||
| //#endregion | ||
| //#region src/shared/media/media-frame-base.d.ts | ||
| interface MediaFrameBaseOptions { | ||
| id?: number; | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| data: DataType; | ||
| type: MediaData["type"]; | ||
| name?: string; | ||
| animation?: AnimationOptions; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/media/audio-frame.d.ts | ||
| type AudioType = "mp3" | "wav" | "wma" | "aac"; | ||
| interface AudioFrameOptions extends MediaFrameBaseOptions { | ||
| type: AudioType; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/media/video-frame.d.ts | ||
| type VideoType = "mp4" | "mov" | "wmv" | "avi"; | ||
| type PosterType = "png" | "jpg"; | ||
| interface VideoFrameOptions extends MediaFrameBaseOptions { | ||
| type: VideoType; | ||
| poster?: DataType; | ||
| posterType?: PosterType; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/picture.d.ts | ||
| interface PictureOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| data: DataType; | ||
| type: "png" | "jpg" | "gif" | "bmp" | "emf" | "wmf"; | ||
| name?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/group-shape.d.ts | ||
| interface GroupShapeOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| rotation?: number; | ||
| flipHorizontal?: boolean; | ||
| children: SlideChild[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/drawingml/outline.d.ts | ||
| interface OutlineOptions { | ||
| width?: number | UniversalMeasure; | ||
| color?: string; | ||
| dashStyle?: "solid" | "dash" | "dashDot" | "lgDash" | "sysDot" | "sysDash"; | ||
| } | ||
| declare const createOutlineCompat: (options?: OutlineOptions, arrowheads?: { | ||
| beginType?: string; | ||
| endType?: string; | ||
| width?: string; | ||
| length?: string; | ||
| }) => string; | ||
| //#endregion | ||
| //#region src/shared/shape/line-shape.d.ts | ||
| interface LineShapeOptions { | ||
| id?: number; | ||
| name?: string; | ||
| x1?: number | UniversalMeasure; | ||
| y1?: number | UniversalMeasure; | ||
| x2?: number | UniversalMeasure; | ||
| y2?: number | UniversalMeasure; | ||
| fill?: FillOptions$1; | ||
| outline?: OutlineOptions; | ||
| } | ||
| type ArrowheadType = "triangle" | "stealth" | "diamond" | "oval" | "open" | "none"; | ||
| interface ConnectorShapeOptions { | ||
| id?: number; | ||
| name?: string; | ||
| x1?: number | UniversalMeasure; | ||
| y1?: number | UniversalMeasure; | ||
| x2?: number | UniversalMeasure; | ||
| y2?: number | UniversalMeasure; | ||
| fill?: FillOptions$1; | ||
| outline?: OutlineOptions; | ||
| beginArrowhead?: ArrowheadType; | ||
| endArrowhead?: ArrowheadType; | ||
| arrowheadWidth?: "small" | "medium" | "large"; | ||
| arrowheadLength?: "small" | "medium" | "large"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/drawingml/shape-properties.d.ts | ||
| interface ConnectionSiteOptions { | ||
| x: number; | ||
| y: number; | ||
| angle?: number; | ||
| } | ||
| interface ShapePropertiesOptions { | ||
| x?: number; | ||
| y?: number; | ||
| width?: number; | ||
| height?: number; | ||
| flipHorizontal?: boolean; | ||
| rotation?: number; | ||
| geometry?: string | PresetGeometryOptions; | ||
| customGeometry?: CustomGeometryOptions; | ||
| fill?: FillOptions$1; | ||
| outline?: OutlineOptions; | ||
| effects?: EffectsOptions; | ||
| connectionSites?: ConnectionSiteOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/shape.d.ts | ||
| interface ShapeStyleOptions { | ||
| lineReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| fillReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| effectReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| fontReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| } | ||
| interface ShapeOptions { | ||
| id?: number; | ||
| name?: string; | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| geometry?: string | PresetGeometryOptions; | ||
| customGeometry?: CustomGeometryOptions; | ||
| fill?: ShapePropertiesOptions["fill"]; | ||
| outline?: OutlineOptions; | ||
| effects?: EffectsOptions; | ||
| flipHorizontal?: boolean; | ||
| rotation?: number; | ||
| textBody?: TextBodyOptions; | ||
| animation?: AnimationOptions; | ||
| locking?: ShapeLockingOptions; | ||
| placeholder?: "title" | "body" | "subTitle" | "sldNum" | "dt" | "ftr" | "hdr" | "obj"; | ||
| placeholderIndex?: number; | ||
| useBackgroundFill?: boolean; | ||
| isPhoto?: boolean; | ||
| userDrawn?: boolean; | ||
| hasCustomPrompt?: boolean; | ||
| style?: ShapeStyleOptions; | ||
| blackWhiteMode?: "clr" | "auto" | "gray" | "ltGray" | "invGray" | "grayWhite" | "blackGray" | "blackWhite" | "black" | "white" | "hidden"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-row.d.ts | ||
| interface TableRowOptions { | ||
| height?: number | UniversalMeasure; | ||
| cells: TableCellOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-frame.d.ts | ||
| interface TableOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| rows: TableRowOptions[]; | ||
| columnWidths?: number[]; | ||
| firstRow?: boolean; | ||
| lastRow?: boolean; | ||
| bandRow?: boolean; | ||
| firstCol?: boolean; | ||
| lastCol?: boolean; | ||
| bandCol?: boolean; | ||
| tableStyleId?: string; | ||
| borders?: { | ||
| top?: CellBorderOptions; | ||
| bottom?: CellBorderOptions; | ||
| left?: CellBorderOptions; | ||
| right?: CellBorderOptions; | ||
| }; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/slide/slide-child.d.ts | ||
| type SlideChild = { | ||
| shape: ShapeOptions; | ||
| } | { | ||
| picture: PictureOptions; | ||
| } | { | ||
| table: TableOptions; | ||
| } | { | ||
| chart: ChartOptions; | ||
| } | { | ||
| line: LineShapeOptions; | ||
| } | { | ||
| connector: ConnectorShapeOptions; | ||
| } | { | ||
| video: VideoFrameOptions; | ||
| } | { | ||
| audio: AudioFrameOptions; | ||
| } | { | ||
| group: GroupShapeOptions; | ||
| } | { | ||
| smartart: SmartArtOptions; | ||
| } | { | ||
| lockedCanvas: LockedCanvasFrameOptions; | ||
| } | { | ||
| ole: OleOptions; | ||
| } | { | ||
| contentPart: { | ||
| rId: string; | ||
| }; | ||
| }; | ||
| //#endregion | ||
| //#region src/parts/slide/slide-sync-properties.d.ts | ||
| interface SlideSyncOptions { | ||
| serverSldId: string; | ||
| serverSldModifiedTime: string; | ||
| clientInsertedTime: string; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/view-properties.d.ts | ||
| type SplitterBarState = "restored" | "maximized" | "minimized"; | ||
| interface NormalViewOptions { | ||
| showOutlineIcons?: boolean; | ||
| snapVertSplitter?: boolean; | ||
| vertBarState?: SplitterBarState; | ||
| horzBarState?: SplitterBarState; | ||
| preferSingleView?: boolean; | ||
| } | ||
| interface SlideViewOptions { | ||
| snapToGrid?: boolean; | ||
| snapToObjects?: boolean; | ||
| showGuides?: boolean; | ||
| varScale?: boolean; | ||
| } | ||
| interface ViewPropertiesOptions { | ||
| lastView?: "slideView" | "slideMasterView" | "notesView" | "handoutView" | "outlineView" | "slideSorterView"; | ||
| showComments?: boolean; | ||
| gridSpacing?: { | ||
| cx: number; | ||
| cy: number; | ||
| }; | ||
| zoomScaleNumerator?: number; | ||
| zoomScaleDenominator?: number; | ||
| normalView?: NormalViewOptions; | ||
| slideView?: SlideViewOptions; | ||
| guides?: { | ||
| orient?: "vert" | "horz"; | ||
| pos?: number; | ||
| }[]; | ||
| outlineView?: { | ||
| slides?: { | ||
| rId: string; | ||
| collapse?: boolean; | ||
| }[]; | ||
| }; | ||
| sorterView?: { | ||
| showFormatting?: boolean; | ||
| }; | ||
| notesView?: boolean; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/transition.d.ts | ||
| type TransitionType = "fade" | "push" | "wipe" | "split" | "blinds" | "checker" | "comb" | "randomBar" | "cover" | "pull" | "strips" | "wheel" | "zoom" | "circle" | "dissolve" | "diamond" | "newsflash" | "plus" | "wedge" | "random" | "cut"; | ||
| type TransitionDirection = "left" | "up" | "right" | "down" | "leftUp" | "rightUp" | "leftDown" | "rightDown" | "out" | "in"; | ||
| interface TransitionOptions { | ||
| type?: TransitionType; | ||
| speed?: "slow" | "med" | "fast"; | ||
| advanceOnClick?: boolean; | ||
| advanceAfterTime?: number; | ||
| direction?: TransitionDirection; | ||
| orient?: "horz" | "vert"; | ||
| thruBlk?: boolean; | ||
| spokes?: number; | ||
| startSound?: { | ||
| rId: string; | ||
| name?: string; | ||
| loop?: boolean; | ||
| }; | ||
| stopPreviousSound?: boolean; | ||
| } | ||
| declare function buildTransition(options: TransitionOptions): string; | ||
| //#endregion | ||
| //#region src/shared/file.d.ts | ||
| type MasterChild = { | ||
| shape: ShapeOptions; | ||
| }; | ||
| type SlideSize = "16:9" | "4:3" | { | ||
| width: number; | ||
| height: number; | ||
| }; | ||
| interface LayoutPlaceholderOptions { | ||
| title?: MasterPlaceholderPosition | false; | ||
| body?: MasterPlaceholderPosition | false; | ||
| subtitle?: MasterPlaceholderPosition | false; | ||
| date?: MasterPlaceholderPosition | false; | ||
| footer?: MasterPlaceholderPosition | false; | ||
| slideNumber?: MasterPlaceholderPosition | false; | ||
| } | ||
| interface LayoutDefinition { | ||
| type?: SlideLayoutType; | ||
| name?: string; | ||
| matchingName?: string; | ||
| placeholders?: LayoutPlaceholderOptions; | ||
| children?: MasterChild[]; | ||
| layout?: string; | ||
| } | ||
| interface MasterDefinition extends SlideMasterOptions { | ||
| name?: string; | ||
| theme?: ThemeOptions; | ||
| layouts?: LayoutDefinition[]; | ||
| } | ||
| interface SlideCommentOptions { | ||
| author: string; | ||
| text: string; | ||
| x: number | UniversalMeasure; | ||
| y: number | UniversalMeasure; | ||
| initials?: string; | ||
| date?: string; | ||
| modified?: boolean; | ||
| } | ||
| interface SlideAnimation { | ||
| shapeId: number; | ||
| options: AnimationOptions; | ||
| } | ||
| interface SlideOptions { | ||
| children?: SlideChild[]; | ||
| background?: BackgroundOptions; | ||
| notes?: string; | ||
| transition?: TransitionOptions; | ||
| headerFooter?: SlideHeaderFooterOptions; | ||
| comments?: SlideCommentOptions[]; | ||
| layout?: SlideLayoutType | string; | ||
| master?: string; | ||
| showMasterShapes?: boolean; | ||
| showMasterPlaceholderAnimations?: boolean; | ||
| hidden?: boolean; | ||
| controls?: ControlOptions[]; | ||
| customerData?: { | ||
| rId: string; | ||
| }[]; | ||
| slideSync?: SlideSyncOptions; | ||
| animations?: SlideAnimation[]; | ||
| section?: string; | ||
| } | ||
| interface ShowOptions { | ||
| loop?: boolean; | ||
| type?: "present" | "browse" | "kiosk"; | ||
| showScrollbar?: boolean; | ||
| restart?: number; | ||
| showNarration?: boolean; | ||
| showAnimation?: boolean; | ||
| useTimings?: boolean; | ||
| slideRange?: { | ||
| start: number; | ||
| end: number; | ||
| }; | ||
| penColor?: string; | ||
| } | ||
| interface PresentationOptions extends CorePropertiesOptions { | ||
| size?: SlideSize; | ||
| masters?: MasterDefinition[]; | ||
| slides?: SlideOptions[]; | ||
| show?: ShowOptions; | ||
| view?: ViewPropertiesOptions; | ||
| includeHandoutMaster?: boolean; | ||
| includeNotesMaster?: boolean; | ||
| handoutMasterOptions?: HandoutMasterOptions; | ||
| notesMasterOptions?: NotesMasterOptions; | ||
| tableStyles?: TableStyleListOptions; | ||
| web?: WebPropertiesOptions; | ||
| print?: PrintPropertiesOptions; | ||
| htmlPublish?: HtmlPublishPropertiesOptions; | ||
| serverZoom?: string; | ||
| firstSlideNum?: number; | ||
| showSpecialPlsOnTitleSld?: boolean; | ||
| rtl?: boolean; | ||
| removePersonalInfoOnSave?: boolean; | ||
| compatMode?: boolean; | ||
| strictFirstAndLastChars?: boolean; | ||
| embedTrueTypeFonts?: boolean; | ||
| saveSubsetFonts?: boolean; | ||
| autoCompressPictures?: boolean; | ||
| bookmarkIdSeed?: number; | ||
| conformance?: "strict" | "transitional"; | ||
| photoAlbum?: PhotoAlbumOptions; | ||
| modifyVerifier?: ModifyVerifierOptions; | ||
| embeddedFonts?: EmbeddedFontOptions[]; | ||
| customShows?: CustomShowOptions[]; | ||
| kinsoku?: KinsokuOptions[]; | ||
| customerData?: CustomerDataOptions; | ||
| colorMru?: string[]; | ||
| appProperties?: AppPropertiesOptions; | ||
| customProperties?: CustomPropertyOptions[]; | ||
| } | ||
| //#endregion | ||
| export { ParagraphOptions as $, PosterType as A, BlipFillMediaData as At, AnimationOptions as B, SoftEdgeOptions as Bt, ShapePropertiesOptions as C, PhotoAlbumOptions as Ct, createOutlineCompat as D, buildHandoutMasterXml as Dt, OutlineOptions as E, buildNotesMasterXml as Et, MediaData as F, EffectsOptions as Ft, MediaAnimationType as G, AnimationType as H, MediaDataTransformation as I, GlowOptions as It, LockedCanvasFrameOptions as J, PathAnimationType as K, AnimationCalcMode as L, ReflectionAlignment as Lt, VideoType as M, GradientStopOptions as Mt, AudioFrameOptions as N, buildFill as Nt, GroupShapeOptions as O, BackgroundOptions as Ot, AudioType as P, extractBlipFillMedia as Pt, CellBorderOptions as Q, AnimationClass as R, ReflectionOptions as Rt, ShapeOptions as S, ModifyVerifierOptions as St, LineShapeOptions as T, ViewWrapper as Tt, AnimationValueType as U, AnimationTrigger as V, createPptxEffectList as Vt, EmphasisType as W, TableCellOptions as X, TextBodyOptions as Y, VerticalAlignment as Z, createThemeXml as _, PresentationPropertiesFullOptions as _t, PresentationOptions as a, UnderlineStyle as at, TableOptions as b, EmbeddedFontOptions as bt, SlideOptions as c, ChartOptions as ct, TransitionOptions as d, SlideMasterOptions as dt, RunOptions as et, TransitionType as f, buildSlideMasterXml as ft, ThemeOptions as g, buildLayoutXml as gt, FontSchemeOptions as h, buildCustomLayoutXml as ht, MasterDefinition as i, TextCapitalization as it, VideoFrameOptions as j, FillOptions$1 as jt, PictureOptions as k, BlipFillConfigOptions as kt, SlideSize as l, MasterPlaceholderOptions as lt, ColorSchemeOptions as m, SlideLayoutType as mt, LayoutPlaceholderOptions as n, RunPropertiesOptions as nt, ShowOptions as o, ParagraphPropertiesOptions as ot, buildTransition as p, SlideHeaderFooterOptions as pt, SmartArtOptions as q, MasterChild as r, StrikeStyle as rt, SlideCommentOptions as s, TextAlignment as st, LayoutDefinition as t, HyperlinkOptions as tt, TransitionDirection as u, MasterPlaceholderPosition as ut, ViewPropertiesOptions as v, CustomShowOptions as vt, ConnectorShapeOptions as w, PresentationPartOptions as wt, TableRowOptions as x, KinsokuOptions as xt, SlideChild as y, CustomerDataOptions as yt, AnimationDirection as z, ShadowOptions as zt }; | ||
| //# sourceMappingURL=file-Bi2z25Zu.d.mts.map |
| {"version":3,"file":"file-Bi2z25Zu.d.mts","names":[],"sources":["../src/shared/drawingml/effects.ts","../src/parts/background.ts","../src/parts/handout-master.ts","../src/parts/notes-master.ts","../src/parts/presentation.ts","../src/parts/presentation-properties.ts","../src/parts/slide-layout.ts","../src/shared/header-footer.ts","../src/parts/slide-master.ts","../src/parts/slide/slide.ts","../src/parts/chart-frame.ts","../src/shared/shape/paragraph/paragraph-properties.ts","../src/shared/shape/paragraph/run-properties.ts","../src/shared/shape/paragraph/run.ts","../src/shared/shape/paragraph/paragraph.ts","../src/shared/table/table-cell-properties.ts","../src/shared/table/table-cell.ts","../src/shared/shape/text-body.ts","../src/parts/locked-canvas-frame.ts","../src/parts/ole-frame.ts","../src/parts/smartart.ts","../src/shared/animation/types.ts","../src/shared/media/data.ts","../src/shared/media/media-frame-base.ts","../src/shared/media/audio-frame.ts","../src/shared/media/video-frame.ts","../src/shared/picture.ts","../src/shared/shape/group-shape.ts","../src/shared/drawingml/outline.ts","../src/shared/shape/line-shape.ts","../src/shared/drawingml/shape-properties.ts","../src/shared/shape/shape.ts","../src/shared/table/table-row.ts","../src/shared/table/table-frame.ts","../src/parts/slide/slide-child.ts","../src/parts/slide/slide-sync-properties.ts","../src/parts/view-properties.ts","../src/shared/transition.ts","../src/shared/file.ts"],"mappings":"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"} |
| import { E as SP_TREE_HEADER, _ as timingDesc, a as ParseContext, c as parseChild, d as backgroundDesc, f as pictureDesc, g as slideCommentsDesc, h as commentAuthorsDesc, i as notesMasterDesc, n as tableStylesDesc, o as PptxReadContext, p as shapeDesc, r as notesSlideDesc, t as viewPropsDesc, u as presPropsDesc, v as slideLayoutDesc } from "./view-properties-qixH7TOx.mjs"; | ||
| import { attr, attrNum, findChild } from "@office-open/xml"; | ||
| import { appPropertiesDesc, customPropertiesDesc, parseArchive, parseCorePropsElement, toUint8Array } from "@office-open/core"; | ||
| import { themeDesc } from "@office-open/core/theme"; | ||
| //#region src/parts/descriptors/slide.ts | ||
| const slideDesc = { | ||
| kind: "custom", | ||
| stringify(opts, ctx) { | ||
| const parts = []; | ||
| const sldAttrs = []; | ||
| if (opts.showMasterSp === false) sldAttrs.push(" showMasterSp=\"0\""); | ||
| if (opts.showMasterPhAnim === false) sldAttrs.push(" showMasterPhAnim=\"0\""); | ||
| if (opts.hidden) sldAttrs.push(" show=\"0\""); | ||
| parts.push(`<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"${sldAttrs.join("")}>`); | ||
| parts.push("<p:cSld>"); | ||
| if (opts.background) parts.push(backgroundDesc.stringify(opts.background, ctx) ?? ""); | ||
| parts.push("<p:spTree>"); | ||
| parts.push(SP_TREE_HEADER); | ||
| if (opts.children) for (const child of opts.children) { | ||
| const xml = stringifySlideChild(child, ctx); | ||
| if (xml) parts.push(xml); | ||
| } | ||
| parts.push("</p:spTree>"); | ||
| if (opts.customerData && opts.customerData.length > 0) { | ||
| const cdItems = opts.customerData.map((d) => `<p:custData r:id="${d.rId}"/>`).join(""); | ||
| parts.push(`<p:custDataLst>${cdItems}</p:custDataLst>`); | ||
| } | ||
| if (opts.controls && opts.controls.length > 0) { | ||
| const ctrlItems = opts.controls.map((c) => { | ||
| const attrs = []; | ||
| if (c.shapeId !== void 0) attrs.push(`spid="${c.shapeId}"`); | ||
| if (c.name) attrs.push(`name="${c.name}"`); | ||
| if (c.showAsIcon) attrs.push("showAsIcon=\"1\""); | ||
| if (c.rId) attrs.push(`r:id="${c.rId}"`); | ||
| if (c.imageWidth !== void 0) attrs.push(`imgW="${c.imageWidth}"`); | ||
| if (c.imageHeight !== void 0) attrs.push(`imgH="${c.imageHeight}"`); | ||
| return `<p:control ${attrs.join(" ")}/>`; | ||
| }).join(""); | ||
| parts.push(`<p:controls>${ctrlItems}</p:controls>`); | ||
| } | ||
| if (opts.headerFooter) { | ||
| const hf = opts.headerFooter; | ||
| const hfChildren = []; | ||
| if (hf.slideNumber) hfChildren.push("<p:sldNum/>"); | ||
| if (hf.dateTime) hfChildren.push("<p:dt/>"); | ||
| if (hf.footer) hfChildren.push("<p:ftr/>"); | ||
| if (hf.header) hfChildren.push("<p:hdr/>"); | ||
| if (hfChildren.length > 0) parts.push(`<p:hf>${hfChildren.join("")}</p:hf>`); | ||
| } | ||
| parts.push("</p:cSld>"); | ||
| parts.push("<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>"); | ||
| if (opts.transition) parts.push(stringifyTransition(opts.transition)); | ||
| parts.push("</p:sld>"); | ||
| return parts.join(""); | ||
| }, | ||
| parse(el, _ctx) { | ||
| const result = {}; | ||
| if (el.attributes) { | ||
| if (el.attributes["showMasterSp"] !== void 0) result.showMasterSp = el.attributes["showMasterSp"] !== "0"; | ||
| if (el.attributes["showMasterPhAnim"] !== void 0) result.showMasterPhAnim = el.attributes["showMasterPhAnim"] !== "0"; | ||
| if (el.attributes["show"] === "0") result.hidden = true; | ||
| } | ||
| const cSld = findChild(el, "p:cSld"); | ||
| if (cSld) { | ||
| const bg = findChild(cSld, "p:bg"); | ||
| if (bg) result.background = backgroundDesc.parse(bg, _ctx); | ||
| const spTree = findChild(cSld, "p:spTree"); | ||
| if (spTree) { | ||
| const children = []; | ||
| if (spTree.elements) for (const child of spTree.elements) { | ||
| if (child.name === "p:nvGrpSpPr" || child.name === "p:grpSpPr") continue; | ||
| const parsed = parseChild(child, _ctx); | ||
| if (parsed !== void 0) children.push(parsed); | ||
| } | ||
| if (children.length > 0) result.children = children; | ||
| } | ||
| const hf = findChild(cSld, "p:hf"); | ||
| if (hf) { | ||
| const hfOpts = {}; | ||
| if (findChild(hf, "p:sldNum")) hfOpts.slideNumber = true; | ||
| if (findChild(hf, "p:dt")) hfOpts.dateTime = true; | ||
| if (findChild(hf, "p:ftr")) hfOpts.footer = true; | ||
| if (findChild(hf, "p:hdr")) hfOpts.header = true; | ||
| if (hfOpts.slideNumber || hfOpts.dateTime || hfOpts.footer || hfOpts.header) result.headerFooter = hfOpts; | ||
| } | ||
| } | ||
| const transition = findChild(el, "p:transition"); | ||
| if (transition) result.transition = readTransition(transition); | ||
| const timing = findChild(el, "p:timing"); | ||
| if (timing) { | ||
| const timingOpts = timingDesc.parse(timing, _ctx); | ||
| if (timingOpts.entries && timingOpts.entries.length > 0) { | ||
| const animations = []; | ||
| for (const entry of timingOpts.entries) animations.push({ | ||
| shapeId: entry.spid, | ||
| options: entry.options | ||
| }); | ||
| result.animations = animations; | ||
| } | ||
| } | ||
| const custDataLst = findChild(el, "p:custDataLst"); | ||
| if (custDataLst) { | ||
| const items = []; | ||
| for (const cd of custDataLst.elements ?? []) if (cd.name === "p:custData") { | ||
| const rId = attr(cd, "r:id"); | ||
| if (rId) items.push({ rId }); | ||
| } | ||
| if (items.length > 0) result.customerData = items; | ||
| } | ||
| const controls = findChild(el, "p:controls"); | ||
| if (controls) { | ||
| const items = []; | ||
| for (const ctrl of controls.elements ?? []) { | ||
| if (ctrl.name !== "p:control") continue; | ||
| const item = {}; | ||
| const spid = attrNum(ctrl, "spid"); | ||
| if (spid !== void 0) item.shapeId = spid; | ||
| const name = attr(ctrl, "name"); | ||
| if (name) item.name = name; | ||
| if (attr(ctrl, "showAsIcon") === "1") item.showAsIcon = true; | ||
| const rId = attr(ctrl, "r:id"); | ||
| if (rId) item.rId = rId; | ||
| const imgW = attrNum(ctrl, "imgW"); | ||
| if (imgW !== void 0) item.imageWidth = imgW; | ||
| const imgH = attrNum(ctrl, "imgH"); | ||
| if (imgH !== void 0) item.imageHeight = imgH; | ||
| items.push(item); | ||
| } | ||
| if (items.length > 0) result.controls = items; | ||
| } | ||
| return result; | ||
| } | ||
| }; | ||
| function stringifySlideChild(child, ctx) { | ||
| if ("shape" in child) return shapeDesc.stringify(child.shape, ctx); | ||
| if ("picture" in child) return pictureDesc.stringify(child.picture, ctx); | ||
| if ("contentPart" in child) return `<p:contentPart r:id="${child.contentPart.rId}"/>`; | ||
| } | ||
| function stringifyTransition(opts) { | ||
| const parts = []; | ||
| if (opts.type === "none") return ""; | ||
| if (opts.type === "fade") parts.push("<p:fade/>"); | ||
| else if (opts.type === "push") parts.push("<p:push dir=\"l\"/>"); | ||
| else if (opts.type === "wipe") parts.push("<p:wipe dir=\"d\"/>"); | ||
| else if (opts.type === "split") parts.push("<p:split orient=\"horz\"/>"); | ||
| else if (opts.type === "cover") parts.push("<p:cover dir=\"l\"/>"); | ||
| else if (opts.type === "pull") parts.push("<p:pull dir=\"l\"/>"); | ||
| else if (opts.type === "dissolve") parts.push("<p:dissolve/>"); | ||
| else if (opts.type === "wheel") parts.push("<p:wheel spokes=\"4\"/>"); | ||
| else if (opts.type === "random") parts.push("<p:random/>"); | ||
| const attrs = []; | ||
| if (opts.speed) attrs.push(`spd="${opts.speed}"`); | ||
| if (opts.advanceOnClick !== void 0) attrs.push(`advClick="${opts.advanceOnClick ? 1 : 0}"`); | ||
| if (opts.advanceAfterMs !== void 0) attrs.push(`advTm="${opts.advanceAfterMs}"`); | ||
| const attrStr = attrs.length ? " " + attrs.join(" ") : ""; | ||
| const body = parts.join(""); | ||
| return body ? `<p:transition${attrStr}>${body}</p:transition>` : `<p:transition${attrStr}/>`; | ||
| } | ||
| const XML_DIR_TO_DIRECTION = { | ||
| l: "left", | ||
| r: "right", | ||
| u: "up", | ||
| d: "down", | ||
| lu: "leftUp", | ||
| ru: "rightUp", | ||
| ld: "leftDown", | ||
| rd: "rightDown", | ||
| out: "out", | ||
| in: "in" | ||
| }; | ||
| function readTransition(el) { | ||
| const result = {}; | ||
| if (el.attributes) { | ||
| if (el.attributes["spd"] !== void 0) result.speed = el.attributes["spd"]; | ||
| if (el.attributes["advClick"] !== void 0) result.advanceOnClick = el.attributes["advClick"] === "1"; | ||
| if (el.attributes["advTm"] !== void 0) result.advanceAfterMs = Number(el.attributes["advTm"]); | ||
| } | ||
| if (findChild(el, "p:fade")) result.type = "fade"; | ||
| else if (findChild(el, "p:push")) result.type = "push"; | ||
| else if (findChild(el, "p:wipe")) result.type = "wipe"; | ||
| else if (findChild(el, "p:split")) result.type = "split"; | ||
| else if (findChild(el, "p:cover")) result.type = "cover"; | ||
| else if (findChild(el, "p:pull")) result.type = "pull"; | ||
| else if (findChild(el, "p:dissolve")) result.type = "dissolve"; | ||
| else if (findChild(el, "p:wheel")) result.type = "wheel"; | ||
| else if (findChild(el, "p:random")) result.type = "random"; | ||
| const dirEl = findChild(el, "p:cover") ?? findChild(el, "p:pull") ?? findChild(el, "p:push") ?? findChild(el, "p:wipe"); | ||
| if (dirEl?.attributes?.["dir"] !== void 0) { | ||
| const direction = XML_DIR_TO_DIRECTION[String(dirEl.attributes["dir"])]; | ||
| if (direction) result.direction = direction; | ||
| } | ||
| return result; | ||
| } | ||
| //#endregion | ||
| //#region src/parse.ts | ||
| function resolveRelsPath(target) { | ||
| if (target.startsWith("/")) return target.slice(1); | ||
| if (target.startsWith("../")) return target.replace("../", "ppt/"); | ||
| return `ppt/${target}`; | ||
| } | ||
| function sortByNumber(paths) { | ||
| return paths.sort((a, b) => { | ||
| return parseInt(a.match(/(\d+)/)?.[1] ?? "0", 10) - parseInt(b.match(/(\d+)/)?.[1] ?? "0", 10); | ||
| }); | ||
| } | ||
| function xmlKeys(keys) { | ||
| return keys.filter((k) => k.endsWith(".xml")); | ||
| } | ||
| function parseRootRels(doc) { | ||
| const relsEl = doc.get("_rels/.rels"); | ||
| if (!relsEl) return {}; | ||
| let coreProps; | ||
| let appProps; | ||
| let customProps; | ||
| for (const child of relsEl.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const type = attr(child, "Type") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!target) continue; | ||
| const path = target.startsWith("/") ? target.slice(1) : target; | ||
| if (type.includes("/core-properties")) coreProps = path; | ||
| else if (type.includes("/extended-properties")) appProps = path; | ||
| else if (type.includes("/custom-properties")) customProps = path; | ||
| } | ||
| return { | ||
| coreProps, | ||
| appProps, | ||
| customProps | ||
| }; | ||
| } | ||
| function parseSlideRels(doc, slidePaths, refs) { | ||
| const commentsSet = new Set(refs.comments); | ||
| const chartsSet = new Set(refs.charts); | ||
| const diagramDataSet = new Set(refs.diagramData); | ||
| const mediaSet = new Set(refs.media); | ||
| for (const slidePath of slidePaths) { | ||
| const parts = slidePath.split("/"); | ||
| const fileName = parts.pop(); | ||
| const relsPath = `${parts.join("/")}/_rels/${fileName}.rels`; | ||
| const relsEl = doc.get(relsPath); | ||
| if (!relsEl) continue; | ||
| for (const child of relsEl.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const type = attr(child, "Type") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!target) continue; | ||
| const path = resolveRelsPath(target); | ||
| if (type.includes("/comments") && !type.includes("commentAuthors")) commentsSet.add(path); | ||
| else if (type.includes("/chart")) chartsSet.add(path); | ||
| else if (type.includes("/diagramData")) diagramDataSet.add(path); | ||
| else if (type.includes("/image") || type.includes("/video") || type.includes("/media")) mediaSet.add(path); | ||
| } | ||
| } | ||
| refs.comments = [...commentsSet]; | ||
| refs.charts = [...chartsSet]; | ||
| refs.diagramData = [...diagramDataSet]; | ||
| refs.media = [...mediaSet]; | ||
| } | ||
| function parsePptx(data) { | ||
| const doc = parseArchive(toUint8Array(data)); | ||
| const presentation = doc.get("ppt/presentation.xml"); | ||
| const relsXml = doc.get("ppt/_rels/presentation.xml.rels"); | ||
| const slides = []; | ||
| const slideMasters = []; | ||
| const themes = []; | ||
| const notesMasters = []; | ||
| let presProps; | ||
| let viewProps; | ||
| let tableStyles; | ||
| let commentAuthors; | ||
| if (relsXml) for (const child of relsXml.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const type = attr(child, "Type") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!target) continue; | ||
| const path = resolveRelsPath(target); | ||
| if (type.includes("/slideMaster")) slideMasters.push(path); | ||
| else if (type.includes("/slide") && !type.includes("slideLayout") && !type.includes("slideMaster")) slides.push(path); | ||
| else if (type.includes("/theme")) themes.push(path); | ||
| else if (type.includes("/notesMaster")) notesMasters.push(path); | ||
| else if (type.includes("/presProps")) presProps = path; | ||
| else if (type.includes("/viewProps")) viewProps = path; | ||
| else if (type.includes("/tableStyles")) tableStyles = path; | ||
| else if (type.includes("/commentAuthors")) commentAuthors = path; | ||
| } | ||
| sortByNumber(slides); | ||
| sortByNumber(slideMasters); | ||
| sortByNumber(themes); | ||
| sortByNumber(notesMasters); | ||
| const slideLayouts = sortByNumber(xmlKeys(doc.keys("ppt/slideLayouts/"))); | ||
| const notesSlides = sortByNumber(xmlKeys(doc.keys("ppt/notesSlides/"))); | ||
| const partRefs = { | ||
| themes, | ||
| notesMasters, | ||
| commentAuthors, | ||
| comments: [], | ||
| charts: [], | ||
| diagramData: [], | ||
| media: doc.keys("ppt/media/") | ||
| }; | ||
| parseSlideRels(doc, slides, partRefs); | ||
| sortByNumber(partRefs.comments); | ||
| sortByNumber(partRefs.charts); | ||
| sortByNumber(partRefs.diagramData); | ||
| const { coreProps, appProps, customProps } = parseRootRels(doc); | ||
| return { | ||
| doc, | ||
| presentation, | ||
| slides, | ||
| slideMasters, | ||
| slideLayouts, | ||
| notesSlides, | ||
| partRefs, | ||
| presProps, | ||
| viewProps, | ||
| tableStyles, | ||
| coreProps, | ||
| appProps, | ||
| customProps | ||
| }; | ||
| } | ||
| /** | ||
| * Parse a single slide's relationship file into a Map<rId, path>. | ||
| */ | ||
| function parseSlideRelMap(doc, slidePath) { | ||
| const rels = /* @__PURE__ */ new Map(); | ||
| const parts = slidePath.split("/"); | ||
| const fileName = parts.pop(); | ||
| const relsPath = `${parts.join("/")}/_rels/${fileName}.rels`; | ||
| const relsEl = doc.get(relsPath); | ||
| if (!relsEl) return rels; | ||
| for (const child of relsEl.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const id = attr(child, "Id") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!id || !target) continue; | ||
| if (attr(child, "TargetMode") === "External") rels.set(id, target); | ||
| else rels.set(id, resolveRelsPath(target)); | ||
| } | ||
| return rels; | ||
| } | ||
| /** | ||
| * Build a map from each path to the rel target matching a predicate. | ||
| */ | ||
| function resolveRelTargets(doc, paths, predicate) { | ||
| const map = /* @__PURE__ */ new Map(); | ||
| for (const path of paths) for (const target of parseSlideRelMap(doc, path).values()) if (predicate(target)) map.set(path, target); | ||
| return map; | ||
| } | ||
| /** | ||
| * Parse p14:sectionLst from presentation.xml and map each slide path to its | ||
| * section name. Bridges p14:sldId (by slide id) -> p:sldIdLst (slide id -> | ||
| * rId) -> presentation rels (rId -> path). | ||
| */ | ||
| function parseSlideSections(presentation, doc) { | ||
| const pathToSection = /* @__PURE__ */ new Map(); | ||
| if (!presentation) return pathToSection; | ||
| const extLst = findChild(presentation, "p:extLst"); | ||
| if (!extLst) return pathToSection; | ||
| let sectionLst; | ||
| for (const ext of extLst.elements ?? []) { | ||
| if (ext.name !== "p:ext") continue; | ||
| if (attr(ext, "uri") !== "{521415D9-36F7-43E2-AB2F-B90AF26B5E84}") continue; | ||
| sectionLst = findChild(ext, "p14:sectionLst"); | ||
| if (sectionLst) break; | ||
| } | ||
| if (!sectionLst) return pathToSection; | ||
| const sectionBySlideId = /* @__PURE__ */ new Map(); | ||
| for (const section of sectionLst.elements ?? []) { | ||
| if (section.name !== "p14:section") continue; | ||
| const name = attr(section, "name"); | ||
| if (!name) continue; | ||
| const sldIdLst = findChild(section, "p14:sldIdLst"); | ||
| for (const sldId of sldIdLst?.elements ?? []) { | ||
| if (sldId.name !== "p14:sldId") continue; | ||
| const id = attrNum(sldId, "id"); | ||
| if (id !== void 0) sectionBySlideId.set(id, name); | ||
| } | ||
| } | ||
| if (sectionBySlideId.size === 0) return pathToSection; | ||
| const sldIdLst = findChild(presentation, "p:sldIdLst"); | ||
| const rIdBySlideId = /* @__PURE__ */ new Map(); | ||
| for (const sldId of sldIdLst?.elements ?? []) { | ||
| if (sldId.name !== "p:sldId") continue; | ||
| const id = attrNum(sldId, "id"); | ||
| const rId = attr(sldId, "r:id"); | ||
| if (id !== void 0 && rId) rIdBySlideId.set(id, rId); | ||
| } | ||
| const relsEl = doc.get("ppt/_rels/presentation.xml.rels"); | ||
| const pathByRId = /* @__PURE__ */ new Map(); | ||
| for (const child of relsEl?.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const id = attr(child, "Id"); | ||
| const target = attr(child, "Target"); | ||
| if (id && target) pathByRId.set(id, resolveRelsPath(target)); | ||
| } | ||
| for (const [slideId, name] of sectionBySlideId) { | ||
| const rId = rIdBySlideId.get(slideId); | ||
| if (!rId) continue; | ||
| const path = pathByRId.get(rId); | ||
| if (path) pathToSection.set(path, name); | ||
| } | ||
| return pathToSection; | ||
| } | ||
| /** | ||
| * Parse a .pptx file and convert it into PresentationOptions. | ||
| * | ||
| * This is the main public API for parsing PPTX files. | ||
| * The returned options can be passed directly to `new Presentation(parsed)` | ||
| * to recreate the presentation. | ||
| * | ||
| * @param data - Raw bytes of a .pptx file | ||
| * @returns Parsed presentation options | ||
| */ | ||
| function parsePresentation(data) { | ||
| const pptx = parsePptx(data); | ||
| const opts = {}; | ||
| const sectionBySlidePath = parseSlideSections(pptx.presentation, pptx.doc); | ||
| if (pptx.presentation) { | ||
| const sldSz = findChild(pptx.presentation, "p:sldSz"); | ||
| if (sldSz) { | ||
| const cx = attrNum(sldSz, "cx"); | ||
| const cy = attrNum(sldSz, "cy"); | ||
| if (cx === 12192e3 && cy === 6858e3) opts.size = "16:9"; | ||
| else if (cx === 9144e3 && cy === 6858e3) opts.size = "4:3"; | ||
| else if (cx && cy) opts.size = { | ||
| width: cx, | ||
| height: cy | ||
| }; | ||
| } | ||
| } | ||
| if (pptx.coreProps) { | ||
| const corePropsEl = pptx.doc.get(pptx.coreProps); | ||
| if (corePropsEl) { | ||
| const cp = parseCorePropsElement(corePropsEl); | ||
| if (cp.title) opts.title = cp.title; | ||
| if (cp.subject) opts.subject = cp.subject; | ||
| if (cp.creator) opts.creator = cp.creator; | ||
| if (cp.keywords) opts.keywords = cp.keywords; | ||
| if (cp.description) opts.description = cp.description; | ||
| if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy; | ||
| if (cp.revision !== void 0) opts.revision = cp.revision; | ||
| if (cp.lastPrinted) opts.lastPrinted = cp.lastPrinted; | ||
| if (cp.created) opts.created = cp.created; | ||
| if (cp.modified) opts.modified = cp.modified; | ||
| } | ||
| } | ||
| if (pptx.appProps) { | ||
| const appPropsEl = pptx.doc.get(pptx.appProps); | ||
| if (appPropsEl) { | ||
| const ap = appPropertiesDesc.parse(appPropsEl, {}); | ||
| if (ap && Object.keys(ap).length > 0) opts.appProperties = ap; | ||
| } | ||
| } | ||
| if (pptx.customProps) { | ||
| const customPropsEl = pptx.doc.get(pptx.customProps); | ||
| if (customPropsEl) { | ||
| const cp = customPropertiesDesc.parse(customPropsEl, {}); | ||
| if (cp.properties?.length) opts.customProperties = cp.properties; | ||
| } | ||
| } | ||
| if (pptx.presProps) { | ||
| const presPropsEl = pptx.doc.get(pptx.presProps); | ||
| if (presPropsEl) { | ||
| const presPropsOpts = presPropsDesc.parse(presPropsEl, {}); | ||
| if (presPropsOpts.show) opts.show = presPropsOpts.show; | ||
| } | ||
| } | ||
| if (pptx.viewProps) { | ||
| const viewPropsEl = pptx.doc.get(pptx.viewProps); | ||
| if (viewPropsEl) { | ||
| const viewOpts = viewPropsDesc.parse(viewPropsEl, {}); | ||
| if (viewOpts.lastView || viewOpts.showComments !== void 0 || viewOpts.gridSpacing) opts.view = viewOpts; | ||
| } | ||
| } | ||
| if (pptx.tableStyles) { | ||
| const tableStylesEl = pptx.doc.get(pptx.tableStyles); | ||
| if (tableStylesEl) { | ||
| const tableStylesResult = tableStylesDesc.parse(tableStylesEl, {}); | ||
| if (tableStylesResult.opts) opts.tableStyles = tableStylesResult.opts; | ||
| } | ||
| } | ||
| const masterThemePaths = resolveRelTargets(pptx.doc, pptx.slideMasters, (t) => t.includes("/theme")); | ||
| const layoutMasterPaths = resolveRelTargets(pptx.doc, pptx.slideLayouts, (t) => t.includes("/slideMaster")); | ||
| const slideLayoutPaths = resolveRelTargets(pptx.doc, pptx.slides, (t) => t.includes("/slideLayout")); | ||
| const masterCount = pptx.slideMasters.length; | ||
| const masterDefs = []; | ||
| const masterReadCtx = new PptxReadContext(new ParseContext(pptx, /* @__PURE__ */ new Map())); | ||
| for (const [mi, masterPath] of pptx.slideMasters.entries()) { | ||
| const masterEl = pptx.doc.get(masterPath); | ||
| if (!masterEl) continue; | ||
| const themePath = masterThemePaths.get(masterPath); | ||
| const themeEl = themePath ? pptx.doc.get(themePath) : void 0; | ||
| const themeOptions = themeEl ? themeDesc.parse(themeEl, masterReadCtx) : void 0; | ||
| const cSld = findChild(masterEl, "p:cSld"); | ||
| const bg = cSld ? findChild(cSld, "p:bg") : void 0; | ||
| const masterBackground = bg ? backgroundDesc.parse(bg, masterReadCtx) : void 0; | ||
| const hasBackground = masterBackground && Object.keys(masterBackground).length > 0; | ||
| const spTree = cSld ? findChild(cSld, "p:spTree") : void 0; | ||
| const masterChildren = []; | ||
| if (spTree) for (const child of spTree.elements ?? []) { | ||
| if (child.name === "p:nvGrpSpPr" || child.name === "p:grpSpPr") continue; | ||
| if (child.name === "p:sp") { | ||
| const nvSpPr = findChild(child, "p:nvSpPr"); | ||
| const nvPr = nvSpPr ? findChild(nvSpPr, "p:nvPr") : void 0; | ||
| if (nvPr && findChild(nvPr, "p:ph")) continue; | ||
| } | ||
| const parsed = parseChild(child, masterReadCtx); | ||
| if (parsed !== void 0) masterChildren.push(parsed); | ||
| } | ||
| const masterLayouts = []; | ||
| for (const layoutPath of pptx.slideLayouts) { | ||
| if (layoutMasterPaths.get(layoutPath) !== masterPath) continue; | ||
| const layoutEl = pptx.doc.get(layoutPath); | ||
| if (layoutEl) { | ||
| const layoutOpts = slideLayoutDesc.parse(layoutEl, masterReadCtx); | ||
| const layoutDef = { type: layoutOpts.type ?? "blank" }; | ||
| if (layoutOpts.placeholders) layoutDef.placeholders = layoutOpts.placeholders; | ||
| const layoutRaw = pptx.doc.getRaw(layoutPath); | ||
| if (layoutRaw) layoutDef.layout = new TextDecoder().decode(layoutRaw).replace(/^<\?xml[^>]*\?>\s*/, ""); | ||
| masterLayouts.push(layoutDef); | ||
| } | ||
| } | ||
| const masterName = themeOptions?.name ?? `master${mi + 1}`; | ||
| const masterDef = {}; | ||
| masterDef.name = masterName; | ||
| if (themeOptions) masterDef.theme = themeOptions; | ||
| if (hasBackground) masterDef.background = masterBackground; | ||
| if (masterChildren.length > 0) masterDef.children = masterChildren; | ||
| if (masterLayouts.length > 0) masterDef.layouts = masterLayouts; | ||
| masterDefs.push(masterDef); | ||
| } | ||
| if (masterCount > 1) opts.masters = masterDefs; | ||
| for (const nmPath of pptx.partRefs.notesMasters) { | ||
| const nmEl = pptx.doc.get(nmPath); | ||
| if (nmEl) { | ||
| const nmOpts = notesMasterDesc.parse(nmEl, masterReadCtx); | ||
| if (nmOpts.options) { | ||
| opts.includeNotesMaster = true; | ||
| opts.notesMasterOptions = nmOpts.options; | ||
| } | ||
| } | ||
| } | ||
| const commentAuthors = /* @__PURE__ */ new Map(); | ||
| if (pptx.partRefs.commentAuthors) { | ||
| const authorsEl = pptx.doc.get(pptx.partRefs.commentAuthors); | ||
| if (authorsEl) { | ||
| const authors = commentAuthorsDesc.parse(authorsEl, masterReadCtx); | ||
| for (const a of authors) commentAuthors.set(a.id, { | ||
| name: a.name, | ||
| initials: a.initials | ||
| }); | ||
| } | ||
| } | ||
| const result = []; | ||
| for (const slidePath of pptx.slides) { | ||
| const slideEl = pptx.doc.get(slidePath); | ||
| if (!slideEl) continue; | ||
| const slideRels = parseSlideRelMap(pptx.doc, slidePath); | ||
| const readCtx = new PptxReadContext(new ParseContext(pptx, slideRels)); | ||
| const slideOpts = slideDesc.parse(slideEl, readCtx); | ||
| const layoutPath = slideLayoutPaths.get(slidePath); | ||
| if (layoutPath) { | ||
| const layoutEl = pptx.doc.get(layoutPath); | ||
| if (layoutEl) slideOpts.layout = slideLayoutDesc.parse(layoutEl, readCtx).type ?? "blank"; | ||
| const resolvedMasterPath = layoutMasterPaths.get(layoutPath); | ||
| if (resolvedMasterPath) { | ||
| const masterIdx = pptx.slideMasters.indexOf(resolvedMasterPath); | ||
| if (masterIdx >= 0 && masterDefs[masterIdx]) slideOpts.master = masterDefs[masterIdx].name; | ||
| } | ||
| } | ||
| for (const [, relPath] of slideRels) { | ||
| if (!relPath.includes("/comments/")) continue; | ||
| const commentsEl = pptx.doc.get(relPath); | ||
| if (!commentsEl) continue; | ||
| const parsedComments = slideCommentsDesc.parse(commentsEl, readCtx); | ||
| if (parsedComments.length > 0) { | ||
| const comments = []; | ||
| for (const cm of parsedComments) { | ||
| const entry = { | ||
| x: cm.x, | ||
| y: cm.y | ||
| }; | ||
| if (cm.text) entry.text = cm.text; | ||
| if (cm.date) entry.date = cm.date; | ||
| if (cm.modified !== void 0) entry.modified = cm.modified; | ||
| const author = commentAuthors.get(cm.authorId); | ||
| if (author) { | ||
| entry.author = author.name; | ||
| if (author.initials) entry.initials = author.initials; | ||
| } | ||
| comments.push(entry); | ||
| } | ||
| if (comments.length > 0) slideOpts.comments = comments; | ||
| } | ||
| break; | ||
| } | ||
| for (const [, relPath] of slideRels) { | ||
| if (!relPath.includes("/notesSlides/")) continue; | ||
| const notesEl = pptx.doc.get(relPath); | ||
| if (!notesEl) continue; | ||
| const notesData = notesSlideDesc.parse(notesEl, readCtx); | ||
| if (notesData.text) slideOpts.notes = notesData.text; | ||
| break; | ||
| } | ||
| const sectionName = sectionBySlidePath.get(slidePath); | ||
| if (sectionName) slideOpts.section = sectionName; | ||
| result.push(slideOpts); | ||
| } | ||
| opts.slides = result; | ||
| return opts; | ||
| } | ||
| //#endregion | ||
| export { slideDesc as i, parsePptx as n, parsePresentation as r, parseArchive as t }; | ||
| //# sourceMappingURL=parse-DzYvw0d6.mjs.map |
| {"version":3,"file":"parse-DzYvw0d6.mjs","names":[],"sources":["../src/parts/descriptors/slide.ts","../src/parse.ts"],"sourcesContent":["/**\n * Slide (p:sld) descriptor for PPTX.\n *\n * @module\n */\n\nimport type { CustomDescriptor, WriteContext } from \"@office-open/core/descriptor\";\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\nimport type { SlideChild as LegacySlideChild } from \"@parts/slide/slide-child\";\nimport { SP_TREE_HEADER } from \"@shared/constants\";\nimport type { TransitionDirection } from \"@shared/transition\";\n\nimport { timingDesc } from \"./animation\";\nimport { backgroundDesc, type BackgroundDescriptorOptions } from \"./background\";\nimport { parseChild } from \"./bridge\";\nimport { shapeDesc, pictureDesc } from \"./shape\";\nimport type {\n ShapeDescriptorOptions,\n PictureDescriptorOptions,\n TextBodyDescriptorOptions,\n} from \"./shape\";\n\n// ── Types ──\n\nexport interface HeaderFooterDescriptorOptions {\n slideNumber?: boolean;\n dateTime?: boolean;\n footer?: boolean;\n header?: boolean;\n}\n\nexport interface AnimationDescriptorOptions {\n shapeId: number;\n options: unknown;\n}\n\nexport interface SlideDescriptorOptions {\n children?: SlideChild[];\n background?: BackgroundDescriptorOptions;\n transition?: TransitionDescriptorOptions;\n showMasterSp?: boolean;\n showMasterPhAnim?: boolean;\n controls?: ControlDescriptorOptions[];\n customerData?: { rId: string }[];\n headerFooter?: HeaderFooterDescriptorOptions;\n animations?: AnimationDescriptorOptions[];\n /** Hidden slide — excluded from slideshow (emits p:sld/@show=\"0\"). */\n hidden?: boolean;\n}\n\n/** Discriminated union for slide children (JSON-friendly). */\nexport type SlideChild =\n | { shape: ShapeDescriptorOptions }\n | { picture: PictureDescriptorOptions }\n | { text: TextBodyDescriptorOptions }\n | { contentPart: { rId: string } };\n\nexport interface TransitionDescriptorOptions {\n type?:\n | \"none\"\n | \"fade\"\n | \"push\"\n | \"wipe\"\n | \"split\"\n | \"cover\"\n | \"pull\"\n | \"dissolve\"\n | \"wheel\"\n | \"random\";\n direction?: TransitionDirection;\n speed?: \"slow\" | \"medium\" | \"fast\";\n advanceOnClick?: boolean;\n advanceAfterMs?: number;\n}\n\nexport interface ControlDescriptorOptions {\n shapeId?: number;\n name?: string;\n showAsIcon?: boolean;\n rId?: string;\n imageWidth?: number;\n imageHeight?: number;\n}\n\n// ── Slide (p:sld) descriptor ──\n\nexport const slideDesc: CustomDescriptor<SlideDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, ctx) {\n const parts: string[] = [];\n\n // Opening tag with namespace declarations\n const sldAttrs: string[] = [];\n if (opts.showMasterSp === false) sldAttrs.push(' showMasterSp=\"0\"');\n if (opts.showMasterPhAnim === false) sldAttrs.push(' showMasterPhAnim=\"0\"');\n if (opts.hidden) sldAttrs.push(' show=\"0\"');\n parts.push(\n `<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"${sldAttrs.join(\"\")}>`,\n );\n\n // p:cSld — common slide data\n parts.push(\"<p:cSld>\");\n\n if (opts.background) {\n parts.push(backgroundDesc.stringify(opts.background, ctx) ?? \"\");\n }\n\n // p:spTree — shape tree\n parts.push(\"<p:spTree>\");\n parts.push(SP_TREE_HEADER);\n\n if (opts.children) {\n for (const child of opts.children) {\n const xml = stringifySlideChild(child, ctx);\n if (xml) parts.push(xml);\n }\n }\n\n parts.push(\"</p:spTree>\");\n\n // custDataLst\n if (opts.customerData && opts.customerData.length > 0) {\n const cdItems = opts.customerData.map((d) => `<p:custData r:id=\"${d.rId}\"/>`).join(\"\");\n parts.push(`<p:custDataLst>${cdItems}</p:custDataLst>`);\n }\n\n // controls\n if (opts.controls && opts.controls.length > 0) {\n const ctrlItems = opts.controls\n .map((c) => {\n const attrs: string[] = [];\n if (c.shapeId !== undefined) attrs.push(`spid=\"${c.shapeId}\"`);\n if (c.name) attrs.push(`name=\"${c.name}\"`);\n if (c.showAsIcon) attrs.push('showAsIcon=\"1\"');\n if (c.rId) attrs.push(`r:id=\"${c.rId}\"`);\n if (c.imageWidth !== undefined) attrs.push(`imgW=\"${c.imageWidth}\"`);\n if (c.imageHeight !== undefined) attrs.push(`imgH=\"${c.imageHeight}\"`);\n return `<p:control ${attrs.join(\" \")}/>`;\n })\n .join(\"\");\n parts.push(`<p:controls>${ctrlItems}</p:controls>`);\n }\n\n // Header/Footer (p:hf)\n if (opts.headerFooter) {\n const hf = opts.headerFooter;\n const hfChildren: string[] = [];\n if (hf.slideNumber) hfChildren.push(\"<p:sldNum/>\");\n if (hf.dateTime) hfChildren.push(\"<p:dt/>\");\n if (hf.footer) hfChildren.push(\"<p:ftr/>\");\n if (hf.header) hfChildren.push(\"<p:hdr/>\");\n if (hfChildren.length > 0) parts.push(`<p:hf>${hfChildren.join(\"\")}</p:hf>`);\n }\n\n parts.push(\"</p:cSld>\");\n\n // p:clrMapOvr\n parts.push(\"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\");\n\n // p:transition (optional)\n if (opts.transition) {\n parts.push(stringifyTransition(opts.transition));\n }\n\n parts.push(\"</p:sld>\");\n return parts.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n // Root attributes\n if (el.attributes) {\n if (el.attributes[\"showMasterSp\"] !== undefined)\n result.showMasterSp = el.attributes[\"showMasterSp\"] !== \"0\";\n if (el.attributes[\"showMasterPhAnim\"] !== undefined)\n result.showMasterPhAnim = el.attributes[\"showMasterPhAnim\"] !== \"0\";\n if (el.attributes[\"show\"] === \"0\") result.hidden = true;\n }\n\n // p:cSld\n const cSld = findChild(el, \"p:cSld\");\n if (cSld) {\n // Background\n const bg = findChild(cSld, \"p:bg\");\n if (bg) result.background = backgroundDesc.parse(bg, _ctx);\n\n // Shape tree\n const spTree = findChild(cSld, \"p:spTree\");\n if (spTree) {\n const children: LegacySlideChild[] = [];\n if (spTree.elements) {\n for (const child of spTree.elements) {\n // Skip tree container structure\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n const parsed = parseChild(child, _ctx);\n if (parsed !== undefined) children.push(parsed);\n }\n }\n if (children.length > 0) result.children = children;\n }\n\n // Header/Footer (p:hf)\n const hf = findChild(cSld, \"p:hf\");\n if (hf) {\n const hfOpts: HeaderFooterDescriptorOptions = {};\n if (findChild(hf, \"p:sldNum\")) hfOpts.slideNumber = true;\n if (findChild(hf, \"p:dt\")) hfOpts.dateTime = true;\n if (findChild(hf, \"p:ftr\")) hfOpts.footer = true;\n if (findChild(hf, \"p:hdr\")) hfOpts.header = true;\n if (hfOpts.slideNumber || hfOpts.dateTime || hfOpts.footer || hfOpts.header)\n result.headerFooter = hfOpts;\n }\n }\n\n // p:transition\n const transition = findChild(el, \"p:transition\");\n if (transition) result.transition = readTransition(transition);\n\n // p:timing → animations\n const timing = findChild(el, \"p:timing\");\n if (timing) {\n const timingOpts = timingDesc.parse(timing, _ctx);\n if (timingOpts.entries && timingOpts.entries.length > 0) {\n const animations: AnimationDescriptorOptions[] = [];\n for (const entry of timingOpts.entries) {\n animations.push({ shapeId: entry.spid, options: entry.options });\n }\n result.animations = animations;\n }\n }\n\n // custDataLst\n const custDataLst = findChild(el, \"p:custDataLst\");\n if (custDataLst) {\n const items: { rId: string }[] = [];\n for (const cd of custDataLst.elements ?? []) {\n if (cd.name === \"p:custData\") {\n const rId = attr(cd, \"r:id\");\n if (rId) items.push({ rId });\n }\n }\n if (items.length > 0) result.customerData = items;\n }\n\n // controls\n const controls = findChild(el, \"p:controls\");\n if (controls) {\n const items: ControlDescriptorOptions[] = [];\n for (const ctrl of controls.elements ?? []) {\n if (ctrl.name !== \"p:control\") continue;\n const item: ControlDescriptorOptions = {};\n const spid = attrNum(ctrl, \"spid\");\n if (spid !== undefined) item.shapeId = spid;\n const name = attr(ctrl, \"name\");\n if (name) item.name = name;\n if (attr(ctrl, \"showAsIcon\") === \"1\") item.showAsIcon = true;\n const rId = attr(ctrl, \"r:id\");\n if (rId) item.rId = rId;\n const imgW = attrNum(ctrl, \"imgW\");\n if (imgW !== undefined) item.imageWidth = imgW;\n const imgH = attrNum(ctrl, \"imgH\");\n if (imgH !== undefined) item.imageHeight = imgH;\n items.push(item);\n }\n if (items.length > 0) result.controls = items;\n }\n\n return result as unknown as SlideDescriptorOptions;\n },\n};\n\n// ── Child serializer ──\n\nfunction stringifySlideChild(child: SlideChild, ctx: WriteContext): string | undefined {\n if (\"shape\" in child) return shapeDesc.stringify(child.shape, ctx);\n if (\"picture\" in child) return pictureDesc.stringify(child.picture, ctx);\n if (\"contentPart\" in child) return `<p:contentPart r:id=\"${child.contentPart.rId}\"/>`;\n return undefined;\n}\n\n// ── Transition helpers ──\n\nfunction stringifyTransition(opts: TransitionDescriptorOptions): string {\n const parts: string[] = [];\n\n if (opts.type === \"none\") return \"\";\n if (opts.type === \"fade\") parts.push(\"<p:fade/>\");\n else if (opts.type === \"push\") parts.push('<p:push dir=\"l\"/>');\n else if (opts.type === \"wipe\") parts.push('<p:wipe dir=\"d\"/>');\n else if (opts.type === \"split\") parts.push('<p:split orient=\"horz\"/>');\n else if (opts.type === \"cover\") parts.push('<p:cover dir=\"l\"/>');\n else if (opts.type === \"pull\") parts.push('<p:pull dir=\"l\"/>');\n else if (opts.type === \"dissolve\") parts.push(\"<p:dissolve/>\");\n else if (opts.type === \"wheel\") parts.push('<p:wheel spokes=\"4\"/>');\n else if (opts.type === \"random\") parts.push(\"<p:random/>\");\n\n const attrs: string[] = [];\n if (opts.speed) attrs.push(`spd=\"${opts.speed}\"`);\n if (opts.advanceOnClick !== undefined) attrs.push(`advClick=\"${opts.advanceOnClick ? 1 : 0}\"`);\n if (opts.advanceAfterMs !== undefined) attrs.push(`advTm=\"${opts.advanceAfterMs}\"`);\n\n const attrStr = attrs.length ? \" \" + attrs.join(\" \") : \"\";\n const body = parts.join(\"\");\n return body ? `<p:transition${attrStr}>${body}</p:transition>` : `<p:transition${attrStr}/>`;\n}\n\n// Reverse of DIRECTION_MAP in @shared/transition (dir attribute → semantic direction).\nconst XML_DIR_TO_DIRECTION: Record<string, TransitionDirection> = {\n l: \"left\",\n r: \"right\",\n u: \"up\",\n d: \"down\",\n lu: \"leftUp\",\n ru: \"rightUp\",\n ld: \"leftDown\",\n rd: \"rightDown\",\n out: \"out\",\n in: \"in\",\n};\n\nfunction readTransition(el: XmlElement): TransitionDescriptorOptions {\n const result: TransitionDescriptorOptions = {};\n\n if (el.attributes) {\n if (el.attributes[\"spd\"] !== undefined)\n result.speed = el.attributes[\"spd\"] as \"slow\" | \"medium\" | \"fast\";\n if (el.attributes[\"advClick\"] !== undefined)\n result.advanceOnClick = el.attributes[\"advClick\"] === \"1\";\n if (el.attributes[\"advTm\"] !== undefined)\n result.advanceAfterMs = Number(el.attributes[\"advTm\"]);\n }\n\n // Detect transition type from child elements\n if (findChild(el, \"p:fade\")) result.type = \"fade\";\n else if (findChild(el, \"p:push\")) result.type = \"push\";\n else if (findChild(el, \"p:wipe\")) result.type = \"wipe\";\n else if (findChild(el, \"p:split\")) result.type = \"split\";\n else if (findChild(el, \"p:cover\")) result.type = \"cover\";\n else if (findChild(el, \"p:pull\")) result.type = \"pull\";\n else if (findChild(el, \"p:dissolve\")) result.type = \"dissolve\";\n else if (findChild(el, \"p:wheel\")) result.type = \"wheel\";\n else if (findChild(el, \"p:random\")) result.type = \"random\";\n\n // Direction (dir attribute on directional children: cover/pull/push/wipe)\n const dirEl =\n findChild(el, \"p:cover\") ??\n findChild(el, \"p:pull\") ??\n findChild(el, \"p:push\") ??\n findChild(el, \"p:wipe\");\n if (dirEl?.attributes?.[\"dir\"] !== undefined) {\n const direction = XML_DIR_TO_DIRECTION[String(dirEl.attributes[\"dir\"])];\n if (direction) result.direction = direction;\n }\n\n return result;\n}\n","import type { ParsedArchive } from \"@office-open/core\";\nimport {\n appPropertiesDesc,\n customPropertiesDesc,\n parseArchive,\n parseCorePropsElement,\n} from \"@office-open/core\";\nimport type { DataType } from \"@office-open/core\";\nimport { toUint8Array } from \"@office-open/core\";\nimport type { ReadContext } from \"@office-open/core/descriptor\";\nimport { themeDesc } from \"@office-open/core/theme\";\nimport type { Element } from \"@office-open/xml\";\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\n\nimport { PptxReadContext, ParseContext } from \"./context\";\nimport { backgroundDesc } from \"./parts/descriptors/background\";\nimport { parseChild } from \"./parts/descriptors/bridge\";\nimport { commentAuthorsDesc, slideCommentsDesc } from \"./parts/descriptors/comments\";\nimport { notesMasterDesc } from \"./parts/descriptors/notes-master\";\nimport { notesSlideDesc } from \"./parts/descriptors/notes-slide\";\nimport { presPropsDesc } from \"./parts/descriptors/presentation-properties\";\nimport { slideDesc } from \"./parts/descriptors/slide\";\nimport { slideLayoutDesc } from \"./parts/descriptors/slide-layout\";\nimport { tableStylesDesc } from \"./parts/descriptors/table-styles\";\nimport { viewPropsDesc } from \"./parts/descriptors/view-properties\";\nimport type { SlideChild } from \"./parts/slide/slide-child\";\n\nexport { parseArchive };\n\nimport type { SlideLayoutType } from \"./parts/slide-layout\";\nimport type {\n LayoutDefinition,\n MasterChild,\n MasterDefinition,\n SlideOptions,\n SlideCommentOptions,\n PresentationOptions,\n} from \"./shared/file\";\n\n/**\n * All part paths extracted from the PPTX package.\n * Field names correspond directly to the OOXML directory structure.\n */\nexport interface PptxPartRefs {\n /** ppt/theme/themeN.xml */\n themes: string[];\n /** ppt/notesMasters/notesMasterN.xml */\n notesMasters: string[];\n /** ppt/commentAuthors.xml */\n commentAuthors?: string;\n /** ppt/comments/commentN.xml (from slide rels) */\n comments: string[];\n /** ppt/charts/chartN.xml (from slide rels) */\n charts: string[];\n /** ppt/diagrams/dataN.xml (from slide rels) */\n diagramData: string[];\n /** ppt/media/* (all media files) */\n media: string[];\n}\n\nexport interface PptxDocument {\n doc: ParsedArchive;\n /** ppt/presentation.xml root element (p:presentation) */\n presentation?: Element;\n /** ppt/slides/slideN.xml */\n slides: string[];\n /** ppt/slideMasters/slideMasterN.xml */\n slideMasters: string[];\n /** ppt/slideLayouts/slideLayoutN.xml */\n slideLayouts: string[];\n /** ppt/notesSlides/notesSlideN.xml */\n notesSlides: string[];\n partRefs: PptxPartRefs;\n /** ppt/presProps.xml */\n presProps?: string;\n /** ppt/viewProps.xml */\n viewProps?: string;\n /** ppt/tableStyles.xml */\n tableStyles?: string;\n /** docProps/core.xml */\n coreProps?: string;\n /** docProps/app.xml */\n appProps?: string;\n /** docProps/custom.xml */\n customProps?: string;\n}\n\nfunction resolveRelsPath(target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n if (target.startsWith(\"../\")) return target.replace(\"../\", \"ppt/\");\n return `ppt/${target}`;\n}\n\nfunction sortByNumber(paths: string[]): string[] {\n return paths.sort((a, b) => {\n const numA = parseInt(a.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n}\n\nfunction xmlKeys(keys: string[]): string[] {\n return keys.filter((k) => k.endsWith(\".xml\"));\n}\n\nfunction parseRootRels(doc: ParsedArchive): {\n coreProps?: string;\n appProps?: string;\n customProps?: string;\n} {\n const relsEl = doc.get(\"_rels/.rels\");\n if (!relsEl) return {};\n\n let coreProps: string | undefined;\n let appProps: string | undefined;\n let customProps: string | undefined;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = target.startsWith(\"/\") ? target.slice(1) : target;\n\n if (type.includes(\"/core-properties\")) {\n coreProps = path;\n } else if (type.includes(\"/extended-properties\")) {\n appProps = path;\n } else if (type.includes(\"/custom-properties\")) {\n customProps = path;\n }\n }\n\n return { coreProps, appProps, customProps };\n}\n\nfunction parseSlideRels(doc: ParsedArchive, slidePaths: string[], refs: PptxPartRefs): void {\n const commentsSet = new Set(refs.comments);\n const chartsSet = new Set(refs.charts);\n const diagramDataSet = new Set(refs.diagramData);\n const mediaSet = new Set(refs.media);\n\n for (const slidePath of slidePaths) {\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) continue;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/comments\") && !type.includes(\"commentAuthors\")) {\n commentsSet.add(path);\n } else if (type.includes(\"/chart\")) {\n chartsSet.add(path);\n } else if (type.includes(\"/diagramData\")) {\n diagramDataSet.add(path);\n } else if (type.includes(\"/image\") || type.includes(\"/video\") || type.includes(\"/media\")) {\n mediaSet.add(path);\n }\n }\n }\n\n refs.comments = [...commentsSet];\n refs.charts = [...chartsSet];\n refs.diagramData = [...diagramDataSet];\n refs.media = [...mediaSet];\n}\n\nexport function parsePptx(data: DataType): PptxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const presentation = doc.get(\"ppt/presentation.xml\");\n\n const relsXml = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const slides: string[] = [];\n const slideMasters: string[] = [];\n const themes: string[] = [];\n const notesMasters: string[] = [];\n let presProps: string | undefined;\n let viewProps: string | undefined;\n let tableStyles: string | undefined;\n let commentAuthors: string | undefined;\n\n if (relsXml) {\n for (const child of relsXml.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/slideMaster\")) {\n slideMasters.push(path);\n } else if (\n type.includes(\"/slide\") &&\n !type.includes(\"slideLayout\") &&\n !type.includes(\"slideMaster\")\n ) {\n slides.push(path);\n } else if (type.includes(\"/theme\")) {\n themes.push(path);\n } else if (type.includes(\"/notesMaster\")) {\n notesMasters.push(path);\n } else if (type.includes(\"/presProps\")) {\n presProps = path;\n } else if (type.includes(\"/viewProps\")) {\n viewProps = path;\n } else if (type.includes(\"/tableStyles\")) {\n tableStyles = path;\n } else if (type.includes(\"/commentAuthors\")) {\n commentAuthors = path;\n }\n }\n }\n\n sortByNumber(slides);\n sortByNumber(slideMasters);\n sortByNumber(themes);\n sortByNumber(notesMasters);\n\n const slideLayouts = sortByNumber(xmlKeys(doc.keys(\"ppt/slideLayouts/\")));\n const notesSlides = sortByNumber(xmlKeys(doc.keys(\"ppt/notesSlides/\")));\n\n const partRefs: PptxPartRefs = {\n themes,\n notesMasters,\n commentAuthors,\n comments: [],\n charts: [],\n diagramData: [],\n media: doc.keys(\"ppt/media/\"),\n };\n\n parseSlideRels(doc, slides, partRefs);\n sortByNumber(partRefs.comments);\n sortByNumber(partRefs.charts);\n sortByNumber(partRefs.diagramData);\n\n const { coreProps, appProps, customProps } = parseRootRels(doc);\n\n return {\n doc,\n presentation,\n slides,\n slideMasters,\n slideLayouts,\n notesSlides,\n partRefs,\n presProps,\n viewProps,\n tableStyles,\n coreProps,\n appProps,\n customProps,\n };\n}\n\n/**\n * Parse a single slide's relationship file into a Map<rId, path>.\n */\nfunction parseSlideRelMap(doc: ParsedArchive, slidePath: string): Map<string, string> {\n const rels = new Map<string, string>();\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) return rels;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const id = attr(child, \"Id\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!id || !target) continue;\n // External links (hyperlinks) keep their original URL target\n if (attr(child, \"TargetMode\") === \"External\") {\n rels.set(id, target);\n } else {\n rels.set(id, resolveRelsPath(target));\n }\n }\n\n return rels;\n}\n\n/**\n * Build a map from each path to the rel target matching a predicate.\n */\nfunction resolveRelTargets(\n doc: ParsedArchive,\n paths: string[],\n predicate: (target: string) => boolean,\n): Map<string, string> {\n const map = new Map<string, string>();\n for (const path of paths) {\n for (const target of parseSlideRelMap(doc, path).values()) {\n if (predicate(target)) map.set(path, target);\n }\n }\n return map;\n}\n\n/**\n * Parse p14:sectionLst from presentation.xml and map each slide path to its\n * section name. Bridges p14:sldId (by slide id) -> p:sldIdLst (slide id ->\n * rId) -> presentation rels (rId -> path).\n */\nfunction parseSlideSections(\n presentation: Element | undefined,\n doc: ParsedArchive,\n): Map<string, string> {\n const pathToSection = new Map<string, string>();\n if (!presentation) return pathToSection;\n\n const extLst = findChild(presentation, \"p:extLst\");\n if (!extLst) return pathToSection;\n\n let sectionLst: Element | undefined;\n for (const ext of extLst.elements ?? []) {\n if (ext.name !== \"p:ext\") continue;\n if (attr(ext, \"uri\") !== \"{521415D9-36F7-43E2-AB2F-B90AF26B5E84}\") continue;\n sectionLst = findChild(ext, \"p14:sectionLst\");\n if (sectionLst) break;\n }\n if (!sectionLst) return pathToSection;\n\n // slideId -> sectionName\n const sectionBySlideId = new Map<number, string>();\n for (const section of sectionLst.elements ?? []) {\n if (section.name !== \"p14:section\") continue;\n const name = attr(section, \"name\");\n if (!name) continue;\n const sldIdLst = findChild(section, \"p14:sldIdLst\");\n for (const sldId of sldIdLst?.elements ?? []) {\n if (sldId.name !== \"p14:sldId\") continue;\n const id = attrNum(sldId, \"id\");\n if (id !== undefined) sectionBySlideId.set(id, name);\n }\n }\n if (sectionBySlideId.size === 0) return pathToSection;\n\n // slideId -> rId (from p:sldIdLst)\n const sldIdLst = findChild(presentation, \"p:sldIdLst\");\n const rIdBySlideId = new Map<number, string>();\n for (const sldId of sldIdLst?.elements ?? []) {\n if (sldId.name !== \"p:sldId\") continue;\n const id = attrNum(sldId, \"id\");\n const rId = attr(sldId, \"r:id\");\n if (id !== undefined && rId) rIdBySlideId.set(id, rId);\n }\n\n // rId -> path (from presentation.xml.rels)\n const relsEl = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const pathByRId = new Map<string, string>();\n for (const child of relsEl?.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const id = attr(child, \"Id\");\n const target = attr(child, \"Target\");\n if (id && target) pathByRId.set(id, resolveRelsPath(target));\n }\n\n for (const [slideId, name] of sectionBySlideId) {\n const rId = rIdBySlideId.get(slideId);\n if (!rId) continue;\n const path = pathByRId.get(rId);\n if (path) pathToSection.set(path, name);\n }\n\n return pathToSection;\n}\n\n/**\n * Parse a .pptx file and convert it into PresentationOptions.\n *\n * This is the main public API for parsing PPTX files.\n * The returned options can be passed directly to `new Presentation(parsed)`\n * to recreate the presentation.\n *\n * @param data - Raw bytes of a .pptx file\n * @returns Parsed presentation options\n */\nexport function parsePresentation(data: DataType): PresentationOptions {\n const pptx = parsePptx(data);\n const opts: Partial<PresentationOptions> = {};\n const sectionBySlidePath = parseSlideSections(pptx.presentation, pptx.doc);\n\n // 1. Parse slide size from p:sldSz\n if (pptx.presentation) {\n const sldSz = findChild(pptx.presentation, \"p:sldSz\");\n if (sldSz) {\n const cx = attrNum(sldSz, \"cx\");\n const cy = attrNum(sldSz, \"cy\");\n if (cx === 12192000 && cy === 6858000) {\n opts.size = \"16:9\";\n } else if (cx === 9144000 && cy === 6858000) {\n opts.size = \"4:3\";\n } else if (cx && cy) {\n opts.size = { width: cx, height: cy };\n }\n }\n }\n\n // 2. Parse core properties\n if (pptx.coreProps) {\n const corePropsEl = pptx.doc.get(pptx.coreProps);\n if (corePropsEl) {\n const cp = parseCorePropsElement(corePropsEl);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision !== undefined) opts.revision = cp.revision;\n if (cp.lastPrinted) opts.lastPrinted = cp.lastPrinted;\n if (cp.created) opts.created = cp.created;\n if (cp.modified) opts.modified = cp.modified;\n }\n }\n\n // 2b. Parse extended (app) properties\n if (pptx.appProps) {\n const appPropsEl = pptx.doc.get(pptx.appProps);\n if (appPropsEl) {\n const ap = appPropertiesDesc.parse(appPropsEl, {} as ReadContext);\n if (ap && Object.keys(ap).length > 0) opts.appProperties = ap;\n }\n }\n\n // 2c. Parse custom properties\n if (pptx.customProps) {\n const customPropsEl = pptx.doc.get(pptx.customProps);\n if (customPropsEl) {\n const cp = customPropertiesDesc.parse(customPropsEl, {} as ReadContext);\n if (cp.properties?.length) opts.customProperties = cp.properties;\n }\n }\n\n // 3. Parse show options from presProps\n if (pptx.presProps) {\n const presPropsEl = pptx.doc.get(pptx.presProps);\n if (presPropsEl) {\n const presPropsOpts = presPropsDesc.parse(presPropsEl, {} as ReadContext);\n if (presPropsOpts.show) opts.show = presPropsOpts.show;\n }\n }\n\n // 3b. Parse view properties\n if (pptx.viewProps) {\n const viewPropsEl = pptx.doc.get(pptx.viewProps);\n if (viewPropsEl) {\n const viewOpts = viewPropsDesc.parse(viewPropsEl, {} as ReadContext);\n if (viewOpts.lastView || viewOpts.showComments !== undefined || viewOpts.gridSpacing) {\n opts.view = viewOpts;\n }\n }\n }\n\n // 3c. Parse table styles\n if (pptx.tableStyles) {\n const tableStylesEl = pptx.doc.get(pptx.tableStyles);\n if (tableStylesEl) {\n const tableStylesResult = tableStylesDesc.parse(tableStylesEl, {} as ReadContext);\n if (tableStylesResult.opts) opts.tableStyles = tableStylesResult.opts;\n }\n }\n\n // 4. Build relationship maps\n const masterThemePaths = resolveRelTargets(pptx.doc, pptx.slideMasters, (t) =>\n t.includes(\"/theme\"),\n );\n const layoutMasterPaths = resolveRelTargets(pptx.doc, pptx.slideLayouts, (t) =>\n t.includes(\"/slideMaster\"),\n );\n const slideLayoutPaths = resolveRelTargets(pptx.doc, pptx.slides, (t) =>\n t.includes(\"/slideLayout\"),\n );\n\n // 5. Parse masters\n const masterCount = pptx.slideMasters.length;\n const masterDefs: MasterDefinition[] = [];\n const masterReadCtx = new PptxReadContext(new ParseContext(pptx, new Map()));\n for (const [mi, masterPath] of pptx.slideMasters.entries()) {\n const masterEl = pptx.doc.get(masterPath);\n if (!masterEl) continue;\n\n // Theme\n const themePath = masterThemePaths.get(masterPath);\n const themeEl = themePath ? pptx.doc.get(themePath) : undefined;\n const themeOptions = themeEl ? themeDesc.parse(themeEl, masterReadCtx) : undefined;\n\n // Background (inline: findChild → backgroundDesc.parse)\n const cSld = findChild(masterEl, \"p:cSld\");\n const bg = cSld ? findChild(cSld, \"p:bg\") : undefined;\n const masterBackground = bg ? backgroundDesc.parse(bg, masterReadCtx) : undefined;\n const hasBackground = masterBackground && Object.keys(masterBackground).length > 0;\n\n // Children: extract non-placeholder shapes from spTree\n const spTree = cSld ? findChild(cSld, \"p:spTree\") : undefined;\n const masterChildren: SlideChild[] = [];\n if (spTree) {\n for (const child of spTree.elements ?? []) {\n // Skip nvGrpSpPr/grpSpPr (tree container structure, not shapes)\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n // Skip placeholder shapes (generated by DefaultSlideMaster template)\n if (child.name === \"p:sp\") {\n const nvSpPr = findChild(child, \"p:nvSpPr\");\n const nvPr = nvSpPr ? findChild(nvSpPr, \"p:nvPr\") : undefined;\n if (nvPr && findChild(nvPr, \"p:ph\")) continue;\n }\n const parsed = parseChild(child, masterReadCtx);\n if (parsed !== undefined) masterChildren.push(parsed);\n }\n }\n\n // Layouts belonging to this master\n const masterLayouts: LayoutDefinition[] = [];\n for (const layoutPath of pptx.slideLayouts) {\n if (layoutMasterPaths.get(layoutPath) !== masterPath) continue;\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) {\n const layoutOpts = slideLayoutDesc.parse(layoutEl, masterReadCtx);\n const layoutDef: LayoutDefinition = {\n type: (layoutOpts.type ?? \"blank\") as SlideLayoutType,\n };\n if (layoutOpts.placeholders) layoutDef.placeholders = layoutOpts.placeholders;\n // Preserve the original layout XML (minus the XML declaration) so that\n // re-generation reuses it verbatim instead of rebuilding from type,\n // which may select a different placeholder template.\n const layoutRaw = pptx.doc.getRaw(layoutPath);\n if (layoutRaw) {\n layoutDef.layout = new TextDecoder().decode(layoutRaw).replace(/^<\\?xml[^>]*\\?>\\s*/, \"\");\n }\n masterLayouts.push(layoutDef);\n }\n }\n\n const masterName = themeOptions?.name ?? `master${mi + 1}`;\n const masterDef: Partial<MasterDefinition> = {};\n masterDef.name = masterName;\n if (themeOptions) masterDef.theme = themeOptions;\n if (hasBackground) masterDef.background = masterBackground;\n // MasterChild (shared) declares only { shape }; parse yields the full\n // SlideChild union (parts-layer). The shared/parts split prevents unifying\n // them (SlideChild cannot move to shared — circular dep), so the cast stays\n // local to this known impedance.\n if (masterChildren.length > 0) masterDef.children = masterChildren as unknown as MasterChild[];\n if (masterLayouts.length > 0) masterDef.layouts = masterLayouts;\n masterDefs.push(masterDef as MasterDefinition);\n }\n\n // Only set masters if there's more than one (single master is auto-created)\n if (masterCount > 1) {\n opts.masters = masterDefs;\n }\n\n // 5b. Parse notes masters\n for (const nmPath of pptx.partRefs.notesMasters) {\n const nmEl = pptx.doc.get(nmPath);\n if (nmEl) {\n const nmOpts = notesMasterDesc.parse(nmEl, masterReadCtx);\n if (nmOpts.options) {\n opts.includeNotesMaster = true;\n opts.notesMasterOptions = nmOpts.options;\n }\n }\n }\n\n // 5c. Parse handout masters (no separate handling needed, just mark inclusion)\n // Handout masters are referenced from presentation.xml rels but not stored in PptxDocument currently\n\n // 6. Parse comment authors\n const commentAuthors = new Map<number, { name: string; initials: string }>();\n if (pptx.partRefs.commentAuthors) {\n const authorsEl = pptx.doc.get(pptx.partRefs.commentAuthors);\n if (authorsEl) {\n const authors = commentAuthorsDesc.parse(authorsEl, masterReadCtx);\n for (const a of authors) {\n commentAuthors.set(a.id, { name: a.name, initials: a.initials });\n }\n }\n }\n\n // 7. Parse slides with layout and master references\n const result: SlideOptions[] = [];\n for (const slidePath of pptx.slides) {\n const slideEl = pptx.doc.get(slidePath);\n if (!slideEl) continue;\n\n const slideRels = parseSlideRelMap(pptx.doc, slidePath);\n const ctx = new ParseContext(pptx, slideRels);\n const readCtx = new PptxReadContext(ctx);\n // slideDesc.parse returns SlideDescriptorOptions (internal descriptor type:\n // 4-variant SlideChild, no layout/master/comments/notes/section). We enrich\n // it with those public-API fields below and coerce to SlideOptions at push.\n // Record bridges this descriptor/public impedance — slide.ts itself is a\n // known stringify≠parse split, so the wrapper stays until that is resolved.\n const slideOpts = slideDesc.parse(slideEl, readCtx) as Record<string, unknown>;\n\n // Resolve layout → master\n const layoutPath = slideLayoutPaths.get(slidePath);\n if (layoutPath) {\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) {\n const layoutOpts = slideLayoutDesc.parse(layoutEl, readCtx);\n slideOpts.layout = (layoutOpts.type ?? \"blank\") as SlideLayoutType;\n }\n\n const resolvedMasterPath = layoutMasterPaths.get(layoutPath);\n if (resolvedMasterPath) {\n const masterIdx = pptx.slideMasters.indexOf(resolvedMasterPath);\n if (masterIdx >= 0 && masterDefs[masterIdx]) {\n slideOpts.master = masterDefs[masterIdx].name;\n }\n }\n }\n\n // Comments via slide rels\n for (const [, relPath] of slideRels) {\n if (!relPath.includes(\"/comments/\")) continue;\n const commentsEl = pptx.doc.get(relPath);\n if (!commentsEl) continue;\n\n const parsedComments = slideCommentsDesc.parse(commentsEl, readCtx);\n if (parsedComments.length > 0) {\n const comments: Partial<SlideCommentOptions>[] = [];\n for (const cm of parsedComments) {\n const entry: Partial<SlideCommentOptions> = { x: cm.x, y: cm.y };\n if (cm.text) entry.text = cm.text;\n if (cm.date) entry.date = cm.date;\n if (cm.modified !== undefined) entry.modified = cm.modified;\n const author = commentAuthors.get(cm.authorId);\n if (author) {\n entry.author = author.name;\n if (author.initials) entry.initials = author.initials;\n }\n comments.push(entry);\n }\n if (comments.length > 0) slideOpts.comments = comments as SlideCommentOptions[];\n }\n break;\n }\n\n // Notes slide via slide rels\n for (const [, relPath] of slideRels) {\n if (!relPath.includes(\"/notesSlides/\")) continue;\n const notesEl = pptx.doc.get(relPath);\n if (!notesEl) continue;\n const notesData = notesSlideDesc.parse(notesEl, readCtx);\n if (notesData.text) slideOpts.notes = notesData.text;\n break;\n }\n\n // Section (p14:sectionLst) — bridged via slide id -> rId -> path\n const sectionName = sectionBySlidePath.get(slidePath);\n if (sectionName) slideOpts.section = sectionName;\n\n result.push(slideOpts as SlideOptions);\n }\n\n opts.slides = result;\n return opts as PresentationOptions;\n}\n"],"mappings":"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"} |
| export * from "@office-open/core/smartart"; |
| export * from "@office-open/core/smartart"; | ||
| export {}; |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
@@ -1,2 +0,2 @@ | ||
| import { a as PresentationOptions } from "./file-Dh_35y_9.mjs"; | ||
| import { a as PresentationOptions } from "./file-Bi2z25Zu.mjs"; | ||
| import { OutputByType, OutputType, PackerOptions } from "@office-open/core"; | ||
@@ -3,0 +3,0 @@ |
@@ -1,2 +0,2 @@ | ||
| import { n as compilePresentation } from "./compiler-CbnF_ZfY.mjs"; | ||
| import { n as compilePresentation } from "./compiler-DRrCYXPk.mjs"; | ||
| import { OoxmlMimeType, createPacker } from "@office-open/core"; | ||
@@ -3,0 +3,0 @@ //#region src/generate.ts |
+4
-7
@@ -1,2 +0,2 @@ | ||
| import { $ as ParagraphOptions, A as PosterType, At as BlipFillMediaData, B as AnimationOptions, Bt as SoftEdgeOptions, C as ShapePropertiesOptions, Ct as PhotoAlbumOptions, D as createOutlineCompat, Dt as buildHandoutMasterXml, E as OutlineOptions, Et as buildNotesMasterXml, F as MediaData, Ft as EffectsOptions, G as MediaAnimationType, H as AnimationType, I as MediaDataTransformation, It as GlowOptions, J as LockedCanvasFrameOptions, K as PathAnimationType, L as AnimationCalcMode, Lt as ReflectionAlignment, M as VideoType, Mt as GradientStopOptions, N as AudioFrameOptions, Nt as buildFill, O as GroupShapeOptions, Ot as BackgroundOptions, P as AudioType, Pt as extractBlipFillMedia, Q as CellBorderOptions, R as AnimationClass, Rt as ReflectionOptions, S as ShapeOptions, St as ModifyVerifierOptions, T as LineShapeOptions, Tt as ViewWrapper, U as AnimationValueType, V as AnimationTrigger, Vt as createPptxEffectList, W as EmphasisType, X as TableCellOptions, Y as TextBodyOptions, Z as VerticalAlignment, _ as createThemeXml, _t as PresentationPropertiesFullOptions, a as PresentationOptions, at as UnderlineStyle, b as TableOptions, bt as EmbeddedFontOptions, c as SlideOptions, ct as ChartOptions, d as TransitionOptions, dt as SlideMasterOptions, et as RunOptions, f as TransitionType, ft as buildSlideMasterXml, g as ThemeOptions, gt as buildLayoutXml, h as FontSchemeOptions, ht as buildCustomLayoutXml, i as MasterDefinition, it as TextCapitalization, j as VideoFrameOptions, jt as FillOptions, k as PictureOptions, kt as BlipFillConfigOptions, l as SlideSize, lt as MasterPlaceholderOptions, m as ColorSchemeOptions, mt as SlideLayoutType, n as LayoutPlaceholderOptions, nt as RunPropertiesOptions, o as ShowOptions, ot as ParagraphPropertiesOptions, p as buildTransition, pt as SlideHeaderFooterOptions, q as SmartArtOptions, r as MasterChild, rt as StrikeStyle, s as SlideCommentOptions, st as TextAlignment, t as LayoutDefinition, tt as HyperlinkOptions, u as TransitionDirection, ut as MasterPlaceholderPosition, v as ViewPropertiesOptions, vt as CustomShowOptions, w as ConnectorShapeOptions, wt as PresentationPartOptions, x as TableRowOptions, xt as KinsokuOptions, y as SlideChild, yt as CustomerDataOptions, z as AnimationDirection, zt as ShadowOptions } from "./file-Dh_35y_9.mjs"; | ||
| import { $ as ParagraphOptions, A as PosterType, At as BlipFillMediaData, B as AnimationOptions, Bt as SoftEdgeOptions, C as ShapePropertiesOptions, Ct as PhotoAlbumOptions, D as createOutlineCompat, Dt as buildHandoutMasterXml, E as OutlineOptions, Et as buildNotesMasterXml, F as MediaData, Ft as EffectsOptions, G as MediaAnimationType, H as AnimationType, I as MediaDataTransformation, It as GlowOptions, J as LockedCanvasFrameOptions, K as PathAnimationType, L as AnimationCalcMode, Lt as ReflectionAlignment, M as VideoType, Mt as GradientStopOptions, N as AudioFrameOptions, Nt as buildFill, O as GroupShapeOptions, Ot as BackgroundOptions, P as AudioType, Pt as extractBlipFillMedia, Q as CellBorderOptions, R as AnimationClass, Rt as ReflectionOptions, S as ShapeOptions, St as ModifyVerifierOptions, T as LineShapeOptions, Tt as ViewWrapper, U as AnimationValueType, V as AnimationTrigger, Vt as createPptxEffectList, W as EmphasisType, X as TableCellOptions, Y as TextBodyOptions, Z as VerticalAlignment, _ as createThemeXml, _t as PresentationPropertiesFullOptions, a as PresentationOptions, at as UnderlineStyle, b as TableOptions, bt as EmbeddedFontOptions, c as SlideOptions, ct as ChartOptions, d as TransitionOptions, dt as SlideMasterOptions, et as RunOptions, f as TransitionType, ft as buildSlideMasterXml, g as ThemeOptions, gt as buildLayoutXml, h as FontSchemeOptions, ht as buildCustomLayoutXml, i as MasterDefinition, it as TextCapitalization, j as VideoFrameOptions, jt as FillOptions, k as PictureOptions, kt as BlipFillConfigOptions, l as SlideSize, lt as MasterPlaceholderOptions, m as ColorSchemeOptions, mt as SlideLayoutType, n as LayoutPlaceholderOptions, nt as RunPropertiesOptions, o as ShowOptions, ot as ParagraphPropertiesOptions, p as buildTransition, pt as SlideHeaderFooterOptions, q as SmartArtOptions, r as MasterChild, rt as StrikeStyle, s as SlideCommentOptions, st as TextAlignment, t as LayoutDefinition, tt as HyperlinkOptions, u as TransitionDirection, ut as MasterPlaceholderPosition, v as ViewPropertiesOptions, vt as CustomShowOptions, w as ConnectorShapeOptions, wt as PresentationPartOptions, x as TableRowOptions, xt as KinsokuOptions, y as SlideChild, yt as CustomerDataOptions, z as AnimationDirection, zt as ShadowOptions } from "./file-Bi2z25Zu.mjs"; | ||
| import { generatePresentation, generatePresentationStream, generatePresentationSync } from "./generate.mjs"; | ||
@@ -85,3 +85,3 @@ import { PptxDocument, PptxPartRefs, parseArchive, parsePptx, parsePresentation } from "./parse.mjs"; | ||
| //#region src/parts/descriptors/background.d.ts | ||
| interface BackgroundDescriptorOptions$1 { | ||
| interface BackgroundDescriptorOptions { | ||
| fill?: FillOptions; | ||
@@ -92,3 +92,3 @@ effects?: EffectsOptions; | ||
| } | ||
| declare const backgroundDesc: CustomDescriptor<BackgroundDescriptorOptions$1>; | ||
| declare const backgroundDesc: CustomDescriptor<BackgroundDescriptorOptions>; | ||
| //#endregion | ||
@@ -210,8 +210,5 @@ //#region src/parts/descriptors/presentation-properties.d.ts | ||
| }; | ||
| interface BackgroundDescriptorOptions { | ||
| color?: string; | ||
| transparency?: number; | ||
| } | ||
| interface TransitionDescriptorOptions { | ||
| type?: "none" | "fade" | "push" | "wipe" | "split" | "cover" | "pull" | "dissolve" | "wheel" | "random"; | ||
| direction?: TransitionDirection; | ||
| speed?: "slow" | "medium" | "fast"; | ||
@@ -218,0 +215,0 @@ advanceOnClick?: boolean; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.mts","names":[],"sources":["../src/parts/content-types.ts","../src/parts/notes-slide.ts","../src/parts/descriptors/slide-layout.ts","../src/shared/animation/timing.ts","../src/parts/descriptors/animation.ts","../src/parts/comment.ts","../src/parts/descriptors/comments.ts","../src/parts/descriptors/background.ts","../src/parts/descriptors/presentation-properties.ts","../src/parts/descriptors/shape.ts","../src/parts/descriptors/slide.ts","../src/parts/descriptors/slide-master.ts","../src/shared/drawingml/transform-2d.ts","../src/shared/media/media.ts","../src/context.ts","../src/compiler.ts"],"mappings":"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"} | ||
| {"version":3,"file":"index.d.mts","names":[],"sources":["../src/parts/content-types.ts","../src/parts/notes-slide.ts","../src/parts/descriptors/slide-layout.ts","../src/shared/animation/timing.ts","../src/parts/descriptors/animation.ts","../src/parts/comment.ts","../src/parts/descriptors/comments.ts","../src/parts/descriptors/background.ts","../src/parts/descriptors/presentation-properties.ts","../src/parts/descriptors/shape.ts","../src/parts/descriptors/slide.ts","../src/parts/descriptors/slide-master.ts","../src/shared/drawingml/transform-2d.ts","../src/shared/media/media.ts","../src/context.ts","../src/compiler.ts"],"mappings":"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"} |
+3
-3
@@ -1,4 +0,4 @@ | ||
| import { a as createThemeXml, c as buildCustomLayoutXml, d as ContentTypes, i as buildTransition, l as buildLayoutXml, n as compilePresentation, o as slideMasterDesc, s as buildHandoutMasterXml, u as buildSlideMasterXml } from "./compiler-CbnF_ZfY.mjs"; | ||
| import { C as ReflectionAlignment, S as extractBlipFillMedia, _ as timingDesc, b as buildNotesMasterXml, d as backgroundDesc, g as slideCommentsDesc, h as commentAuthorsDesc, o as PptxReadContext, s as PptxWriteContext, u as presPropsDesc, v as slideLayoutDesc, w as createPptxEffectList, x as buildFill, y as buildNotesSlideXml } from "./view-properties-D9ZVHjXg.mjs"; | ||
| import { i as slideDesc, n as parsePptx, r as parsePresentation, t as parseArchive } from "./parse-Cn_n-WuO.mjs"; | ||
| import { a as createThemeXml, c as buildCustomLayoutXml, d as ContentTypes, i as buildTransition, l as buildLayoutXml, n as compilePresentation, o as slideMasterDesc, s as buildHandoutMasterXml, u as buildSlideMasterXml } from "./compiler-DRrCYXPk.mjs"; | ||
| import { C as ReflectionAlignment, S as extractBlipFillMedia, _ as timingDesc, b as buildNotesMasterXml, d as backgroundDesc, g as slideCommentsDesc, h as commentAuthorsDesc, o as PptxReadContext, s as PptxWriteContext, u as presPropsDesc, v as slideLayoutDesc, w as createPptxEffectList, x as buildFill, y as buildNotesSlideXml } from "./view-properties-qixH7TOx.mjs"; | ||
| import { i as slideDesc, n as parsePptx, r as parsePresentation, t as parseArchive } from "./parse-DzYvw0d6.mjs"; | ||
| import { patchPresentation } from "./patch.mjs"; | ||
@@ -5,0 +5,0 @@ import { generatePresentation, generatePresentationStream, generatePresentationSync } from "./generate.mjs"; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.mjs","names":["createOutline"],"sources":["../src/shared/drawingml/outline.ts","../src/shared/shape/paragraph/run-properties.ts","../src/shared/media/media.ts"],"sourcesContent":["import type { UniversalMeasure } from \"@office-open/core\";\nimport { createOutline, PresetDash, LineEndType, LineEndWidth } from \"@office-open/core/drawingml\";\nimport type {\n OutlineOptions as CoreOutlineOptions,\n LineEndOptions as CoreLineEndOptions,\n} from \"@office-open/core/drawingml\";\n\n/**\n * PPTX-specific outline options (backward-compatible API).\n */\nexport interface OutlineOptions {\n width?: number | UniversalMeasure;\n color?: string;\n dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nexport type { CoreOutlineOptions as OutlineOptionsCore };\n\nconst DASH_STYLE_MAP: Record<string, (typeof PresetDash)[keyof typeof PresetDash]> = {\n solid: \"solid\",\n dash: \"dash\",\n dashDot: \"dashDot\",\n lgDash: \"lgDash\",\n sysDot: \"sysDot\",\n sysDash: \"sysDash\",\n};\n\nconst ARROWHEAD_MAP: Record<string, (typeof LineEndType)[keyof typeof LineEndType]> = {\n triangle: \"triangle\",\n stealth: \"stealth\",\n diamond: \"diamond\",\n oval: \"oval\",\n open: \"arrow\",\n};\n\nfunction toCoreLineEnd(type: string, width?: string, length?: string): CoreLineEndOptions {\n return {\n type: ARROWHEAD_MAP[type] ?? \"triangle\",\n ...(width ? { width: width as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n ...(length ? { length: length as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n };\n}\n\n/**\n * Creates an outline element using pptx's simplified API.\n */\nexport const createOutlineCompat = (\n options: OutlineOptions = {},\n arrowheads?: {\n beginType?: string;\n endType?: string;\n width?: string;\n length?: string;\n },\n) =>\n createOutline({\n width: options.width,\n ...(options.color\n ? { type: \"solidFill\" as const, color: { value: options.color.replace(\"#\", \"\") } }\n : { type: \"noFill\" as const }),\n ...(options.dashStyle && {\n dash: DASH_STYLE_MAP[options.dashStyle] ?? \"solid\",\n }),\n ...(arrowheads?.endType\n ? { headEnd: toCoreLineEnd(arrowheads.endType, arrowheads.width, arrowheads.length) }\n : {}),\n ...(arrowheads?.beginType\n ? { tailEnd: toCoreLineEnd(arrowheads.beginType, arrowheads.width, arrowheads.length) }\n : {}),\n } satisfies CoreOutlineOptions);\n","import { xsdStrikeStyle, xsdTextCaps, xsdUnderlineStyle } from \"@office-open/core\";\n/**\n * Run properties types and constants for PPTX text runs.\n *\n * @module\n */\nimport type { FillOptions } from \"@shared/drawingml/fill\";\n\n// Re-export XSD converters for descriptor use\nexport { xsdStrikeStyle, xsdTextCaps, xsdUnderlineStyle };\n\nexport const UnderlineStyle = {\n SINGLE: \"single\",\n DOUBLE: \"double\",\n NONE: \"none\",\n} as const;\n\nexport const StrikeStyle = {\n SINGLE: \"sngStrike\",\n DOUBLE: \"dblStrike\",\n NONE: \"noStrike\",\n} as const;\n\nexport const TextCapitalization = {\n NONE: \"none\",\n ALL: \"all\",\n SMALL: \"small\",\n} as const;\n\nexport interface HyperlinkOptions {\n url: string;\n tooltip?: string;\n action?: string;\n highlightClick?: boolean;\n endSound?: boolean;\n invalidUrl?: boolean;\n}\n\nexport interface RunPropertiesOptions {\n /** Font size in points. Serialized as OOXML `a:sz` (hundredths of a point). */\n size?: number;\n bold?: boolean;\n italic?: boolean;\n underline?: (typeof UnderlineStyle)[keyof typeof UnderlineStyle];\n font?: string;\n lang?: string;\n fill?: FillOptions;\n hyperlink?: HyperlinkOptions;\n strike?: (typeof StrikeStyle)[keyof typeof StrikeStyle];\n baseline?: number;\n spacing?: number;\n capitalization?: (typeof TextCapitalization)[keyof typeof TextCapitalization];\n shadow?: boolean;\n outline?: boolean;\n rightToLeft?: boolean;\n noProof?: boolean;\n dirty?: boolean;\n kumimoji?: boolean;\n alternateLanguage?: string;\n normalizeHeight?: boolean;\n bookmarkMark?: string;\n smartTagId?: string;\n}\n","/**\n * Media module for PresentationML documents.\n *\n * Provides transformation helpers for embedded media. The deduplicated\n * {@link Media} collection lives in @office-open/core and is shared across all\n * format packages.\n *\n * @module\n */\nimport { convertEmuToPixels, convertToEmu } from \"@office-open/core\";\nimport type { UniversalMeasure } from \"@office-open/core\";\n\nimport type { MediaDataTransformation } from \"./data\";\n\nexport interface MediaTransformation {\n offset?: {\n top?: number;\n left?: number;\n };\n width: number | UniversalMeasure;\n height: number | UniversalMeasure;\n flip?: {\n vertical?: boolean;\n horizontal?: boolean;\n };\n rotation?: number;\n}\n\nexport const createTransformation = (options: MediaTransformation): MediaDataTransformation => {\n const cx = convertToEmu(options.width);\n const cy = convertToEmu(options.height);\n return {\n emus: { x: cx, y: cy },\n pixels: { x: Math.round(convertEmuToPixels(cx)), y: Math.round(convertEmuToPixels(cy)) },\n flip: options.flip,\n rotation: options.rotation ? options.rotation * 60_000 : undefined,\n };\n};\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,iBAA+E;CACnF,OAAO;CACP,MAAM;CACN,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;AACX;AAEA,MAAM,gBAAgF;CACpF,UAAU;CACV,SAAS;CACT,SAAS;CACT,MAAM;CACN,MAAM;AACR;AAEA,SAAS,cAAc,MAAc,OAAgB,QAAqC;CACxF,OAAO;EACL,MAAM,cAAc,SAAS;EAC7B,GAAI,QAAQ,EAAS,MAA0D,IAAI,CAAC;EACpF,GAAI,SAAS,EAAU,OAA2D,IAAI,CAAC;CACzF;AACF;;;;AAKA,MAAa,uBACX,UAA0B,CAAC,GAC3B,eAOAA,gBAAc;CACZ,OAAO,QAAQ;CACf,GAAI,QAAQ,QACR;EAAE,MAAM;EAAsB,OAAO,EAAE,OAAO,QAAQ,MAAM,QAAQ,KAAK,EAAE,EAAE;CAAE,IAC/E,EAAE,MAAM,SAAkB;CAC9B,GAAI,QAAQ,aAAa,EACvB,MAAM,eAAe,QAAQ,cAAc,QAC7C;CACA,GAAI,YAAY,UACZ,EAAE,SAAS,cAAc,WAAW,SAAS,WAAW,OAAO,WAAW,MAAM,EAAE,IAClF,CAAC;CACL,GAAI,YAAY,YACZ,EAAE,SAAS,cAAc,WAAW,WAAW,WAAW,OAAO,WAAW,MAAM,EAAE,IACpF,CAAC;AACP,CAA8B;;;AC1DhC,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,MAAM;AACR;AAEA,MAAa,cAAc;CACzB,QAAQ;CACR,QAAQ;CACR,MAAM;AACR;AAEA,MAAa,qBAAqB;CAChC,MAAM;CACN,KAAK;CACL,OAAO;AACT;;;;;;;;;;;;ACCA,MAAa,wBAAwB,YAA0D;CAC7F,MAAM,KAAK,aAAa,QAAQ,KAAK;CACrC,MAAM,KAAK,aAAa,QAAQ,MAAM;CACtC,OAAO;EACL,MAAM;GAAE,GAAG;GAAI,GAAG;EAAG;EACrB,QAAQ;GAAE,GAAG,KAAK,MAAM,mBAAmB,EAAE,CAAC;GAAG,GAAG,KAAK,MAAM,mBAAmB,EAAE,CAAC;EAAE;EACvF,MAAM,QAAQ;EACd,UAAU,QAAQ,WAAW,QAAQ,WAAW,MAAS,KAAA;CAC3D;AACF"} | ||
| {"version":3,"file":"index.mjs","names":["createOutline"],"sources":["../src/shared/drawingml/outline.ts","../src/shared/shape/paragraph/run-properties.ts","../src/shared/media/media.ts"],"sourcesContent":["import type { UniversalMeasure } from \"@office-open/core\";\nimport { createOutline, PresetDash, LineEndType, LineEndWidth } from \"@office-open/core/drawingml\";\nimport type {\n OutlineOptions as CoreOutlineOptions,\n LineEndOptions as CoreLineEndOptions,\n} from \"@office-open/core/drawingml\";\n\n/**\n * PPTX-specific outline options (backward-compatible API).\n */\nexport interface OutlineOptions {\n width?: number | UniversalMeasure;\n color?: string;\n dashStyle?: \"solid\" | \"dash\" | \"dashDot\" | \"lgDash\" | \"sysDot\" | \"sysDash\";\n}\n\nexport type { CoreOutlineOptions as OutlineOptionsCore };\n\nconst DASH_STYLE_MAP: Record<string, (typeof PresetDash)[keyof typeof PresetDash]> = {\n solid: \"solid\",\n dash: \"dash\",\n dashDot: \"dashDot\",\n lgDash: \"lgDash\",\n sysDot: \"sysDot\",\n sysDash: \"sysDash\",\n};\n\nconst ARROWHEAD_MAP: Record<string, (typeof LineEndType)[keyof typeof LineEndType]> = {\n triangle: \"triangle\",\n stealth: \"stealth\",\n diamond: \"diamond\",\n oval: \"oval\",\n open: \"arrow\",\n};\n\nfunction toCoreLineEnd(type: string, width?: string, length?: string): CoreLineEndOptions {\n return {\n type: ARROWHEAD_MAP[type] ?? \"triangle\",\n ...(width ? { width: width as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n ...(length ? { length: length as (typeof LineEndWidth)[keyof typeof LineEndWidth] } : {}),\n };\n}\n\n/**\n * Creates an outline element using pptx's simplified API.\n */\nexport const createOutlineCompat = (\n options: OutlineOptions = {},\n arrowheads?: {\n beginType?: string;\n endType?: string;\n width?: string;\n length?: string;\n },\n) =>\n createOutline({\n width: options.width,\n ...(options.color\n ? { type: \"solidFill\" as const, color: { value: options.color.replace(\"#\", \"\") } }\n : { type: \"noFill\" as const }),\n ...(options.dashStyle && {\n dash: DASH_STYLE_MAP[options.dashStyle] ?? \"solid\",\n }),\n ...(arrowheads?.endType\n ? { headEnd: toCoreLineEnd(arrowheads.endType, arrowheads.width, arrowheads.length) }\n : {}),\n ...(arrowheads?.beginType\n ? { tailEnd: toCoreLineEnd(arrowheads.beginType, arrowheads.width, arrowheads.length) }\n : {}),\n } satisfies CoreOutlineOptions);\n","import { xsdStrikeStyle, xsdTextCaps, xsdUnderlineStyle } from \"@office-open/core\";\n/**\n * Run properties types and constants for PPTX text runs.\n *\n * @module\n */\nimport type { FillOptions } from \"@shared/drawingml/fill\";\n\n// Re-export XSD converters for descriptor use\nexport { xsdStrikeStyle, xsdTextCaps, xsdUnderlineStyle };\n\nexport const UnderlineStyle = {\n SINGLE: \"single\",\n DOUBLE: \"double\",\n NONE: \"none\",\n} as const;\n\nexport const StrikeStyle = {\n SINGLE: \"sngStrike\",\n DOUBLE: \"dblStrike\",\n NONE: \"noStrike\",\n} as const;\n\nexport const TextCapitalization = {\n NONE: \"none\",\n ALL: \"all\",\n SMALL: \"small\",\n} as const;\n\nexport interface HyperlinkOptions {\n url: string;\n /** Internal placeholder key (\"{hlink:N}\" → \"N\"); preserved across parse → stringify. */\n referenceId?: string;\n tooltip?: string;\n action?: string;\n highlightClick?: boolean;\n endSound?: boolean;\n invalidUrl?: boolean;\n}\n\nexport interface RunPropertiesOptions {\n /** Font size in points. Serialized as OOXML `a:sz` (hundredths of a point). */\n size?: number;\n bold?: boolean;\n italic?: boolean;\n underline?: (typeof UnderlineStyle)[keyof typeof UnderlineStyle];\n font?: string;\n lang?: string;\n fill?: FillOptions;\n hyperlink?: HyperlinkOptions;\n strike?: (typeof StrikeStyle)[keyof typeof StrikeStyle];\n baseline?: number;\n spacing?: number;\n capitalization?: (typeof TextCapitalization)[keyof typeof TextCapitalization];\n shadow?: boolean;\n outline?: boolean;\n rightToLeft?: boolean;\n noProof?: boolean;\n dirty?: boolean;\n kumimoji?: boolean;\n alternateLanguage?: string;\n normalizeHeight?: boolean;\n bookmarkMark?: string;\n smartTagId?: string;\n}\n","/**\n * Media module for PresentationML documents.\n *\n * Provides transformation helpers for embedded media. The deduplicated\n * {@link Media} collection lives in @office-open/core and is shared across all\n * format packages.\n *\n * @module\n */\nimport { convertEmuToPixels, convertToEmu } from \"@office-open/core\";\nimport type { UniversalMeasure } from \"@office-open/core\";\n\nimport type { MediaDataTransformation } from \"./data\";\n\nexport interface MediaTransformation {\n offset?: {\n top?: number;\n left?: number;\n };\n width: number | UniversalMeasure;\n height: number | UniversalMeasure;\n flip?: {\n vertical?: boolean;\n horizontal?: boolean;\n };\n rotation?: number;\n}\n\nexport const createTransformation = (options: MediaTransformation): MediaDataTransformation => {\n const cx = convertToEmu(options.width);\n const cy = convertToEmu(options.height);\n return {\n emus: { x: cx, y: cy },\n pixels: { x: Math.round(convertEmuToPixels(cx)), y: Math.round(convertEmuToPixels(cy)) },\n flip: options.flip,\n rotation: options.rotation ? options.rotation * 60_000 : undefined,\n };\n};\n"],"mappings":";;;;;;;;;;;AAkBA,MAAM,iBAA+E;CACnF,OAAO;CACP,MAAM;CACN,SAAS;CACT,QAAQ;CACR,QAAQ;CACR,SAAS;AACX;AAEA,MAAM,gBAAgF;CACpF,UAAU;CACV,SAAS;CACT,SAAS;CACT,MAAM;CACN,MAAM;AACR;AAEA,SAAS,cAAc,MAAc,OAAgB,QAAqC;CACxF,OAAO;EACL,MAAM,cAAc,SAAS;EAC7B,GAAI,QAAQ,EAAS,MAA0D,IAAI,CAAC;EACpF,GAAI,SAAS,EAAU,OAA2D,IAAI,CAAC;CACzF;AACF;;;;AAKA,MAAa,uBACX,UAA0B,CAAC,GAC3B,eAOAA,gBAAc;CACZ,OAAO,QAAQ;CACf,GAAI,QAAQ,QACR;EAAE,MAAM;EAAsB,OAAO,EAAE,OAAO,QAAQ,MAAM,QAAQ,KAAK,EAAE,EAAE;CAAE,IAC/E,EAAE,MAAM,SAAkB;CAC9B,GAAI,QAAQ,aAAa,EACvB,MAAM,eAAe,QAAQ,cAAc,QAC7C;CACA,GAAI,YAAY,UACZ,EAAE,SAAS,cAAc,WAAW,SAAS,WAAW,OAAO,WAAW,MAAM,EAAE,IAClF,CAAC;CACL,GAAI,YAAY,YACZ,EAAE,SAAS,cAAc,WAAW,WAAW,WAAW,OAAO,WAAW,MAAM,EAAE,IACpF,CAAC;AACP,CAA8B;;;AC1DhC,MAAa,iBAAiB;CAC5B,QAAQ;CACR,QAAQ;CACR,MAAM;AACR;AAEA,MAAa,cAAc;CACzB,QAAQ;CACR,QAAQ;CACR,MAAM;AACR;AAEA,MAAa,qBAAqB;CAChC,MAAM;CACN,KAAK;CACL,OAAO;AACT;;;;;;;;;;;;ACCA,MAAa,wBAAwB,YAA0D;CAC7F,MAAM,KAAK,aAAa,QAAQ,KAAK;CACrC,MAAM,KAAK,aAAa,QAAQ,MAAM;CACtC,OAAO;EACL,MAAM;GAAE,GAAG;GAAI,GAAG;EAAG;EACrB,QAAQ;GAAE,GAAG,KAAK,MAAM,mBAAmB,EAAE,CAAC;GAAG,GAAG,KAAK,MAAM,mBAAmB,EAAE,CAAC;EAAE;EACvF,MAAM,QAAQ;EACd,UAAU,QAAQ,WAAW,QAAQ,WAAW,MAAS,KAAA;CAC3D;AACF"} |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { a as PresentationOptions } from "./file-Dh_35y_9.mjs"; | ||
| import { a as PresentationOptions } from "./file-Bi2z25Zu.mjs"; | ||
| import { Element } from "@office-open/xml"; | ||
@@ -3,0 +3,0 @@ import { DataType, ParsedArchive, parseArchive } from "@office-open/core"; |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { n as parsePptx, r as parsePresentation, t as parseArchive } from "./parse-Cn_n-WuO.mjs"; | ||
| import { n as parsePptx, r as parsePresentation, t as parseArchive } from "./parse-DzYvw0d6.mjs"; | ||
| export { parseArchive, parsePptx, parsePresentation }; |
+1
-1
@@ -1,2 +0,2 @@ | ||
| import { c as SlideOptions, et as RunOptions, s as SlideCommentOptions } from "./file-Dh_35y_9.mjs"; | ||
| import { c as SlideOptions, et as RunOptions, s as SlideCommentOptions } from "./file-Bi2z25Zu.mjs"; | ||
| import { BasePatchOptions, CorePropertiesOptions, OutputByType, OutputType } from "@office-open/core"; | ||
@@ -3,0 +3,0 @@ |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"patch.d.mts","names":[],"sources":["../src/patch.ts"],"mappings":";;;;KAkEY,KAAA,GAAQ,UAAA,GAAa,UAAU;AAAA,UAE1B,wBAAA,WACL,UAAA,GAAa,UAAA,UACf,gBAAA,CAAiB,CAAA;EAEzB,YAAA,GAAe,QAAA,CAAS,MAAA,SAAe,KAAA;EAEvC,WAAA,GAAc,QAAA,CAAS,MAAA,SAAe,KAAA;EAEtC,cAAA,GAAiB,OAAA,CAAQ,qBAAA;EAKzB,MAAA;IAEE,OAAA,GAAU,QAAA,CAAS,MAAA,SAAe,YAAA;IAElC,MAAA,GAAS,QAAA,CAAS,YAAA;EAAA;EAOpB,QAAA,GAAW,QAAA,CAAS,MAAA,SAAe,mBAAA;EACnC,kBAAA;AAAA;AAAA,cAyRW,iBAAA,aAAqC,UAAA,GAAa,UAAA;EAAY,UAAA;EAAA,IAAA;EAAA,YAAA;EAAA,WAAA;EAAA,cAAA;EAAA,MAAA;EAAA,QAAA;EAAA,kBAAA;EAAA;AAAA,GAUxE,wBAAA,CAAyB,CAAA,MAAK,OAAA,CAAQ,YAAA,CAAa,CAAA"} | ||
| {"version":3,"file":"patch.d.mts","names":[],"sources":["../src/patch.ts"],"mappings":";;;;KAkEY,KAAA,GAAQ,UAAA,GAAa,UAAU;AAAA,UAE1B,wBAAA,WACL,UAAA,GAAa,UAAA,UACf,gBAAA,CAAiB,CAAA;EAEzB,YAAA,GAAe,QAAA,CAAS,MAAA,SAAe,KAAA;EAEvC,WAAA,GAAc,QAAA,CAAS,MAAA,SAAe,KAAA;EAEtC,cAAA,GAAiB,OAAA,CAAQ,qBAAA;EAKzB,MAAA;IAEE,OAAA,GAAU,QAAA,CAAS,MAAA,SAAe,YAAA;IAElC,MAAA,GAAS,QAAA,CAAS,YAAA;EAAA;EAOpB,QAAA,GAAW,QAAA,CAAS,MAAA,SAAe,mBAAA;EACnC,kBAAA;AAAA;AAAA,cA0RW,iBAAA,aAAqC,UAAA,GAAa,UAAA;EAAY,UAAA;EAAA,IAAA;EAAA,YAAA;EAAA,WAAA;EAAA,cAAA;EAAA,MAAA;EAAA,QAAA;EAAA,kBAAA;EAAA;AAAA,GAUxE,wBAAA,CAAyB,CAAA,MAAK,OAAA,CAAQ,YAAA,CAAa,CAAA"} |
+5
-4
@@ -1,3 +0,3 @@ | ||
| import { r as stringifySlide, t as buildCommentData } from "./compiler-CbnF_ZfY.mjs"; | ||
| import { g as slideCommentsDesc, h as commentAuthorsDesc, m as textRunDesc, s as PptxWriteContext } from "./view-properties-D9ZVHjXg.mjs"; | ||
| import { r as stringifySlide, t as buildCommentData } from "./compiler-DRrCYXPk.mjs"; | ||
| import { g as slideCommentsDesc, h as commentAuthorsDesc, m as textRunDesc, s as PptxWriteContext } from "./view-properties-qixH7TOx.mjs"; | ||
| import { findChild, js2xml, xml2js } from "@office-open/xml"; | ||
@@ -33,3 +33,4 @@ import { OoxmlMimeType, PPTX_NS, appendOverride, appendRelationship, applyCorePropertiesOverride, collectPlaceholderKeys, createReplacer, getNextRelationshipIndex, nextNumericId, replaceHyperlinkPlaceholders, strFromU8, toJson, toUint8Array, unzipSync, zipAndConvert } from "@office-open/core"; | ||
| const runOpts = typeof child === "string" ? { text: child } : child; | ||
| return [xml2js(textRunDesc.stringify(runOpts, currentPatchCtx) ?? "<a:r/>", { captureSpacesBetweenElements: true }).elements[0]]; | ||
| const root = xml2js(textRunDesc.stringify(runOpts, currentPatchCtx) ?? "<a:r/>", { captureSpacesBetweenElements: true }).elements?.[0]; | ||
| return root ? [root] : []; | ||
| }, | ||
@@ -254,3 +255,3 @@ preserveSpace: false | ||
| xmlMap.set(targetPath, toJson(resolved)); | ||
| for (let i = 0; i < targetHlinks.length; i++) appendRelationship(relsJson, offset + i, HYPERLINK_REL_TYPE, targetHlinks[i].url, "External"); | ||
| for (const [i, hlink] of targetHlinks.entries()) appendRelationship(relsJson, offset + i, HYPERLINK_REL_TYPE, hlink.url, "External"); | ||
| } | ||
@@ -257,0 +258,0 @@ if (slides) { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"patch.mjs","names":[],"sources":["../src/patch.ts"],"sourcesContent":["import {\n PPTX_NS,\n OoxmlMimeType,\n appendOverride,\n appendRelationship,\n applyCorePropertiesOverride,\n collectPlaceholderKeys,\n createReplacer,\n getNextRelationshipIndex,\n nextNumericId,\n replaceHyperlinkPlaceholders,\n strFromU8,\n toJson,\n unzipSync,\n zipAndConvert,\n} from \"@office-open/core\";\nimport type {\n BasePatchOptions,\n CorePropertiesOptions,\n OutputByType,\n OutputType,\n} from \"@office-open/core\";\nimport { toUint8Array } from \"@office-open/core\";\nimport type { ReadContext } from \"@office-open/core/descriptor\";\nimport { findChild, js2xml, xml2js } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport type { AuthorEntry, CommentEntry } from \"@parts/comment\";\nimport { commentAuthorsDesc, slideCommentsDesc } from \"@parts/descriptors/comments\";\nimport { textRunDesc } from \"@parts/descriptors/text\";\nimport type { SlideCommentOptions, SlideOptions } from \"@shared/file\";\nimport type { RunOptions } from \"@shared/shape/paragraph/run\";\n\nimport { buildCommentData, stringifySlide } from \"./compiler\";\nimport { PptxWriteContext } from \"./context\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\n/**\n * Parts scanned for text replacement: slides, slide masters, slide layouts,\n * and notes slides. Replacing text in a master/layout propagates to every\n * dependent slide — intended for template branding.\n */\nconst TARGET_RE =\n /^ppt\\/(?:slides\\/slide\\d+|slideMasters\\/slideMaster\\d+|slideLayouts\\/slideLayout\\d+|notesSlides\\/notesSlide\\d+)\\.xml$/;\nconst HYPERLINK_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\";\nconst SLIDE_PART_CONTENT_TYPE =\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\";\nconst SLIDE_REL_TYPE = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\";\nconst SLIDE_LAYOUT_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\";\nconst COMMENTS_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\nconst COMMENT_AUTHORS_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors\";\nconst COMMENTS_CONTENT_TYPE =\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\";\nconst COMMENT_AUTHORS_CONTENT_TYPE =\n \"application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml\";\n\n/**\n * Inline run-level patch content. Reuses the generate vocabulary: a\n * {@link RunOptions} (or an array of them), or a plain string shorthand\n * for `{ text: \"…\" }`.\n */\nexport type Patch = RunOptions | RunOptions[] | string;\n\nexport interface PatchPresentationOptions<\n T extends OutputType = OutputType,\n> extends BasePatchOptions<T> {\n /** Placeholder substitutions: `{{key}}` (per delimiters) → run content. */\n placeholders?: Readonly<Record<string, Patch>>;\n /** Literal find/replace: the find string → run content (no delimiters added). */\n findReplace?: Readonly<Record<string, Patch>>;\n /** Core-properties metadata override (merged over the existing docProps/core.xml). */\n coreProperties?: Partial<CorePropertiesOptions>;\n /**\n * Slide collection edits. Appended slides inherit the template's first slide\n * layout; replaced slides keep their existing identity (sldId/rId/rels).\n */\n slides?: {\n /** Replace slides keyed by 0-based index in the slide list (sldIdLst order). */\n replace?: Readonly<Record<number, SlideOptions>>;\n /** Append slides after the last existing slide. */\n append?: Readonly<SlideOptions[]>;\n };\n /**\n * Comments to append per slide, keyed by 0-based slide index (sldIdLst order).\n * Authors are merged into commentAuthors.xml (deduped by name, ids continued);\n * per-slide comments are merged into ppt/comments/commentN.xml.\n */\n comments?: Readonly<Record<number, SlideCommentOptions[]>>;\n keepOriginalStyles?: boolean;\n}\n\n/** Write context for the current patch operation — accumulates hyperlinks. */\nlet currentPatchCtx: PptxWriteContext;\n\n/**\n * Patch replacer. Serializes each run via {@link textRunDesc} so the full\n * RunProperties vocabulary (color, fill, outline, shadow, font, hyperlinks, …)\n * is supported — no hand-rolled `<a:r>` builder.\n */\nconst pptxReplacer = createReplacer({\n ns: PPTX_NS,\n formatChild: (child: unknown): Element[] => {\n const runOpts = (typeof child === \"string\" ? { text: child } : child) as RunOptions;\n const xmlStr = textRunDesc.stringify(runOpts, currentPatchCtx) ?? \"<a:r/>\";\n return [xml2js(xmlStr, { captureSpacesBetweenElements: true }).elements![0]];\n },\n preserveSpace: false,\n});\n\n/**\n * Normalize a user patch value into the replacer's `{ type, children }`\n * envelope. PPTX patches are always inline run-level (`type: \"paragraph\"`).\n */\nconst toReplacerPatch = (patch: Patch): { type: \"paragraph\"; children: RunOptions[] } =>\n typeof patch === \"string\"\n ? { type: \"paragraph\", children: [{ text: patch }] }\n : { type: \"paragraph\", children: Array.isArray(patch) ? patch : [patch] };\n\nconst createRelationshipFile = (): Element => ({\n declaration: {\n attributes: { encoding: \"UTF-8\", standalone: \"yes\", version: \"1.0\" },\n },\n elements: [\n {\n attributes: { xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\" },\n elements: [],\n name: \"Relationships\",\n type: \"element\",\n },\n ],\n});\n\n/** Build a bare OOXML element node. */\nconst makeElement = (name: string, attributes: Record<string, string> = {}): Element => ({\n type: \"element\",\n name,\n attributes,\n elements: [],\n});\n\n/**\n * Locate the document root element by tag. A parsed XML part is wrapped as\n * `{ declaration, elements: [<root>] }`, so named children live one level down.\n */\nconst rootElement = (doc: Element | undefined, name: string): Element | undefined =>\n doc?.elements?.find((e) => e.name === name);\n\n/** Next 1-based slide file number given the existing slide parts. */\nconst nextSlideNumber = (xmlMap: Map<string, Element>): number => {\n let maxN = 0;\n for (const key of xmlMap.keys()) {\n const m = key.match(/^ppt\\/slides\\/slide(\\d+)\\.xml$/);\n if (m) maxN = Math.max(maxN, Number(m[1]));\n }\n return maxN + 1;\n};\n\n/** Next id for an appended `<p:sldId>` (255 floor → ≥256). */\nconst nextSldId = (sldIdLst: Element | undefined): number =>\n nextNumericId(sldIdLst, \"p:sldId\", \"id\", 255);\n\n/** Resolve a relationship `r:id` to its Target via a rels part. */\nconst resolveRelTarget = (\n rels: Element | undefined,\n rId: string | number | undefined,\n): string | undefined => {\n if (rId === undefined) return undefined;\n const needle = String(rId);\n const relationshipsRoot = rootElement(rels, \"Relationships\");\n for (const child of relationshipsRoot?.elements ?? []) {\n if (child.name === \"Relationship\" && String(child.attributes?.[\"Id\"]) === needle) {\n const target = child.attributes?.[\"Target\"];\n return target !== undefined ? String(target) : undefined;\n }\n }\n return undefined;\n};\n\n/**\n * Append a slide: serialize it, then wire sldIdLst + presentation rels +\n * content types + a slide rels pointing at the first slide layout (which must\n * already exist in the template). The appended slide inherits the template's\n * layout/master; it cannot reference styles or media not already present.\n */\nconst appendSlideToMap = (\n xmlMap: Map<string, Element>,\n slideOpts: SlideOptions,\n ctx: PptxWriteContext,\n): void => {\n const newN = nextSlideNumber(xmlMap);\n const slidePath = `ppt/slides/slide${newN}.xml`;\n\n // Slide part — no XML declaration, matching generated slide parts.\n xmlMap.set(slidePath, toJson(stringifySlide(slideOpts, ctx)));\n\n // presentation.xml sldIdLst + presentation.xml.rels (the new rId ties them)\n const presRoot = rootElement(xmlMap.get(\"ppt/presentation.xml\"), \"p:presentation\");\n const presRels = xmlMap.get(\"ppt/_rels/presentation.xml.rels\") ?? createRelationshipFile();\n xmlMap.set(\"ppt/_rels/presentation.xml.rels\", presRels);\n const newRId = getNextRelationshipIndex(presRels);\n\n const sldIdLst = findChild(presRoot, \"p:sldIdLst\");\n if (sldIdLst) {\n const els = sldIdLst.elements ?? (sldIdLst.elements = []);\n els.push(makeElement(\"p:sldId\", { id: String(nextSldId(sldIdLst)), \"r:id\": `rId${newRId}` }));\n }\n appendRelationship(presRels, newRId, SLIDE_REL_TYPE, `slides/slide${newN}.xml`);\n\n // [Content_Types].xml Override\n const contentTypes = xmlMap.get(\"[Content_Types].xml\");\n if (contentTypes) {\n appendOverride(contentTypes, `/${slidePath}`, SLIDE_PART_CONTENT_TYPE);\n }\n\n // Slide rels → first slide layout (template must already provide it)\n const slideRels = createRelationshipFile();\n appendRelationship(slideRels, 1, SLIDE_LAYOUT_REL_TYPE, \"../slideLayouts/slideLayout1.xml\");\n xmlMap.set(`ppt/slides/_rels/slide${newN}.xml.rels`, slideRels);\n};\n\n/** Resolve a 0-based sldIdLst index to its slide part path (ppt/slides/slideN.xml). */\nconst resolveSlidePath = (xmlMap: Map<string, Element>, index: number): string => {\n const presRoot = rootElement(xmlMap.get(\"ppt/presentation.xml\"), \"p:presentation\");\n const sldIdLst = findChild(presRoot, \"p:sldIdLst\");\n const sldIds = (sldIdLst?.elements ?? []).filter((e) => e.name === \"p:sldId\");\n const entry = sldIds[index];\n if (!entry?.attributes?.[\"r:id\"]) {\n throw new Error(`patchPresentation: no slide at index ${index}`);\n }\n const target = resolveRelTarget(\n xmlMap.get(\"ppt/_rels/presentation.xml.rels\"),\n entry.attributes[\"r:id\"],\n );\n if (!target) {\n throw new Error(`patchPresentation: slide ${index} relationship target not found`);\n }\n return `ppt/${target}`;\n};\n\n/**\n * Replace a slide in place by sldIdLst index: resolve the index to its slide\n * path via presentation rels, then rewrite only that part's content. sldId,\n * rId, content types, and slide rels are left untouched.\n */\nconst replaceSlideInMap = (\n xmlMap: Map<string, Element>,\n index: number,\n slideOpts: SlideOptions,\n ctx: PptxWriteContext,\n): void => {\n const slidePath = resolveSlidePath(xmlMap, index);\n xmlMap.set(slidePath, toJson(stringifySlide(slideOpts, ctx)));\n};\n\n/** Build the rels part path for a given part path (…/_rels/<file>.rels). */\nconst relsKeyFor = (partPath: string): string => {\n const slash = partPath.lastIndexOf(\"/\");\n return `${partPath.substring(0, slash)}/_rels/${partPath.substring(slash + 1)}.rels`;\n};\n\n/** Find an existing relationship of a type in a Relationships root. */\nconst findRelByType = (\n rels: Element | undefined,\n type: string,\n): { id: string; target: string } | undefined => {\n const relationshipsRoot = rootElement(rels, \"Relationships\");\n for (const child of relationshipsRoot?.elements ?? []) {\n if (child.name === \"Relationship\" && String(child.attributes?.[\"Type\"]) === type) {\n const target = child.attributes?.[\"Target\"];\n if (target !== undefined) {\n return { id: String(child.attributes?.[\"Id\"]), target: String(target) };\n }\n }\n }\n return undefined;\n};\n\n/** Noop ReadContext: comment-author/comment-list parse touches no relationships/parts/raw media. */\nconst STUB_READ_CTX: ReadContext = {\n resolveRelationship: () => undefined,\n getPart: () => undefined,\n getRaw: () => undefined,\n};\n\n/**\n * Append comments to a slide, merging authors into commentAuthors.xml and the\n * per-slide list into ppt/comments/commentN.xml. Wires presentation rels\n * (commentAuthors) + slide rels (comments) + content types when newly introduced.\n */\nconst appendCommentsToMap = (\n xmlMap: Map<string, Element>,\n index: number,\n slideComments: SlideCommentOptions[],\n ctx: PptxWriteContext,\n): void => {\n const slidePath = resolveSlidePath(xmlMap, index);\n const slideNMatch = slidePath.match(/slide(\\d+)\\.xml$/);\n const slideN = slideNMatch ? Number(slideNMatch[1]) : index + 1;\n const commentPath = `ppt/comments/comment${slideN}.xml`;\n\n // Parse existing authors + per-slide comments (merge targets).\n const existingAuthorsRoot = rootElement(xmlMap.get(\"ppt/commentAuthors.xml\"), \"p:cmAuthorLst\");\n const existingAuthors: AuthorEntry[] = existingAuthorsRoot\n ? commentAuthorsDesc.parse(existingAuthorsRoot, STUB_READ_CTX)\n : [];\n const existingEntriesRoot = rootElement(xmlMap.get(commentPath), \"p:cmLst\");\n const existingEntries: CommentEntry[] = existingEntriesRoot\n ? slideCommentsDesc.parse(existingEntriesRoot, STUB_READ_CTX)\n : [];\n\n // buildCommentData continues author ids + per-author idx from existing authors.\n const { authors, perSlide } = buildCommentData(\n [{ comments: slideComments }] as unknown as SlideOptions[],\n existingAuthors,\n );\n const mergedEntries = [...existingEntries, ...(perSlide[0] ?? [])];\n const mergedAuthors = authors ?? existingAuthors;\n\n // commentAuthors.xml (global) — written when any authors exist.\n if (mergedAuthors.length > 0) {\n xmlMap.set(\n \"ppt/commentAuthors.xml\",\n toJson(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${commentAuthorsDesc.stringify(mergedAuthors, ctx)}`,\n ),\n );\n const presRels = xmlMap.get(\"ppt/_rels/presentation.xml.rels\") ?? createRelationshipFile();\n xmlMap.set(\"ppt/_rels/presentation.xml.rels\", presRels);\n if (!findRelByType(presRels, COMMENT_AUTHORS_REL_TYPE)) {\n const n = getNextRelationshipIndex(presRels);\n appendRelationship(presRels, n, COMMENT_AUTHORS_REL_TYPE, \"commentAuthors.xml\");\n }\n }\n\n // commentN.xml (per slide).\n xmlMap.set(\n commentPath,\n toJson(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${slideCommentsDesc.stringify(mergedEntries, ctx)}`,\n ),\n );\n const slideRelsKey = relsKeyFor(slidePath);\n const slideRels = xmlMap.get(slideRelsKey) ?? createRelationshipFile();\n xmlMap.set(slideRelsKey, slideRels);\n if (!findRelByType(slideRels, COMMENTS_REL_TYPE)) {\n const n = getNextRelationshipIndex(slideRels);\n appendRelationship(slideRels, n, COMMENTS_REL_TYPE, `../comments/comment${slideN}.xml`);\n }\n\n // Content types — commentAuthors + commentN Overrides (deduped).\n const contentTypes = xmlMap.get(\"[Content_Types].xml\");\n if (contentTypes) {\n if (mergedAuthors.length > 0) {\n appendOverride(contentTypes, \"/ppt/commentAuthors.xml\", COMMENT_AUTHORS_CONTENT_TYPE);\n }\n appendOverride(contentTypes, `/${commentPath}`, COMMENTS_CONTENT_TYPE);\n }\n};\n\n/**\n * Patches an existing .pptx presentation by replacing placeholders with run content.\n *\n * Patch content reuses the generate {@link RunOptions} vocabulary (serialized\n * via the same descriptor), so color, fonts, fills, and hyperlinks are all\n * supported. Hyperlinks introduced by patch runs are registered into each\n * slide's relationship part.\n *\n * @publicApi\n */\nexport const patchPresentation = async <T extends OutputType = OutputType>({\n outputType,\n data,\n placeholders,\n findReplace,\n coreProperties,\n slides,\n comments,\n keepOriginalStyles = true,\n placeholderDelimiters = { end: \"}}\", start: \"{{\" } as const,\n}: PatchPresentationOptions<T>): Promise<OutputByType[T]> => {\n const { start, end } = placeholderDelimiters;\n if (!start.trim() || !end.trim()) {\n throw new Error(\"Both start and end delimiters must be non-empty strings.\");\n }\n\n const zipContent = unzipSync(toUint8Array(data));\n\n const xmlMap = new Map<string, Element>();\n const binaryMap = new Map<string, Uint8Array>();\n\n // Separate XML files from binary files\n for (const [key, value] of Object.entries(zipContent)) {\n if (key.endsWith(\".xml\") || key.endsWith(\".rels\")) {\n xmlMap.set(key, toJson(strFromU8(value)));\n } else {\n binaryMap.set(key, value);\n }\n }\n\n // Build (find-text → patch envelope) entries. Placeholders wrap the key in\n // delimiters; findReplace uses the literal key. Both share the same engine.\n const entries: Array<{\n find: string;\n patch: { type: \"paragraph\"; children: RunOptions[] };\n }> = [];\n if (placeholders) {\n for (const [key, value] of Object.entries(placeholders)) {\n entries.push({ find: `${start}${key}${end}`, patch: toReplacerPatch(value) });\n }\n }\n if (findReplace) {\n for (const [key, value] of Object.entries(findReplace)) {\n entries.push({ find: key, patch: toReplacerPatch(value) });\n }\n }\n\n // Target parts: slides + masters + layouts + notes (deterministic order)\n const targetPaths = Object.keys(zipContent)\n .filter((k) => TARGET_RE.test(k))\n .sort();\n\n currentPatchCtx = new PptxWriteContext();\n const context = {};\n\n // Process text replacement on each target part\n for (const targetPath of targetPaths) {\n const json = xmlMap.get(targetPath);\n if (!json) continue;\n\n for (const { find, patch } of entries) {\n pptxReplacer({\n context,\n json,\n keepOriginalStyles,\n patch,\n patchText: find,\n });\n }\n }\n\n // Resolve hyperlink placeholders registered by patch runs into each part's rels\n const hlinkByKey = new Map(currentPatchCtx.hyperlinks.map((h) => [h.key, h]));\n for (const targetPath of targetPaths) {\n const targetEl = xmlMap.get(targetPath);\n if (!targetEl) continue;\n\n const targetXml = js2xml(targetEl);\n const hlinkKeys = collectPlaceholderKeys(targetXml, \"hlink:\");\n if (hlinkKeys.length === 0) continue;\n\n const targetHlinks = hlinkKeys\n .map((k) => hlinkByKey.get(k))\n .filter((h): h is NonNullable<typeof h> => h !== undefined);\n if (targetHlinks.length === 0) continue;\n\n // Generalized rels path: ppt/<dir>/_rels/<file>.rels\n const lastSlash = targetPath.lastIndexOf(\"/\");\n const relsKey = `${targetPath.substring(0, lastSlash)}/_rels/${targetPath.substring(lastSlash + 1)}.rels`;\n const relsJson = xmlMap.get(relsKey) ?? createRelationshipFile();\n xmlMap.set(relsKey, relsJson);\n const offset = getNextRelationshipIndex(relsJson);\n\n const resolved = replaceHyperlinkPlaceholders(targetXml, targetHlinks, offset);\n xmlMap.set(targetPath, toJson(resolved));\n\n for (let i = 0; i < targetHlinks.length; i++) {\n appendRelationship(relsJson, offset + i, HYPERLINK_REL_TYPE, targetHlinks[i].url, \"External\");\n }\n }\n\n // Slide collection edits — reuse the slide stringifier (no compiler re-run)\n if (slides) {\n if (slides.replace) {\n for (const [index, slideOpts] of Object.entries(slides.replace)) {\n replaceSlideInMap(xmlMap, Number(index), slideOpts, currentPatchCtx);\n }\n }\n if (slides.append) {\n for (const slideOpts of slides.append) {\n appendSlideToMap(xmlMap, slideOpts, currentPatchCtx);\n }\n }\n }\n\n // Slide comments — append per slide, merging authors + per-slide comment lists.\n if (comments) {\n for (const [indexStr, slideComments] of Object.entries(comments)) {\n appendCommentsToMap(xmlMap, Number(indexStr), slideComments, currentPatchCtx);\n }\n }\n\n // Rebuild ZIP\n const files: Record<string, Uint8Array> = {};\n const XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n for (const [key, value] of xmlMap) {\n files[key] =\n key === \"docProps/core.xml\" && coreProperties\n ? encoder.encode(XML_DECL + applyCorePropertiesOverride(value, coreProperties))\n : encoder.encode(js2xml(value));\n }\n\n for (const [key, value] of binaryMap) {\n files[key] = value;\n }\n\n return await zipAndConvert(files, outputType, OoxmlMimeType.PPTX);\n};\n"],"mappings":"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"} | ||
| {"version":3,"file":"patch.mjs","names":[],"sources":["../src/patch.ts"],"sourcesContent":["import {\n PPTX_NS,\n OoxmlMimeType,\n appendOverride,\n appendRelationship,\n applyCorePropertiesOverride,\n collectPlaceholderKeys,\n createReplacer,\n getNextRelationshipIndex,\n nextNumericId,\n replaceHyperlinkPlaceholders,\n strFromU8,\n toJson,\n unzipSync,\n zipAndConvert,\n} from \"@office-open/core\";\nimport type {\n BasePatchOptions,\n CorePropertiesOptions,\n OutputByType,\n OutputType,\n} from \"@office-open/core\";\nimport { toUint8Array } from \"@office-open/core\";\nimport type { ReadContext } from \"@office-open/core/descriptor\";\nimport { findChild, js2xml, xml2js } from \"@office-open/xml\";\nimport type { Element } from \"@office-open/xml\";\nimport type { AuthorEntry, CommentEntry } from \"@parts/comment\";\nimport { commentAuthorsDesc, slideCommentsDesc } from \"@parts/descriptors/comments\";\nimport { textRunDesc } from \"@parts/descriptors/text\";\nimport type { SlideCommentOptions, SlideOptions } from \"@shared/file\";\nimport type { RunOptions } from \"@shared/shape/paragraph/run\";\n\nimport { buildCommentData, stringifySlide } from \"./compiler\";\nimport { PptxWriteContext } from \"./context\";\n\n/** Reusable TextEncoder (stateless, safe to share). */\nconst encoder = new TextEncoder();\n\n/**\n * Parts scanned for text replacement: slides, slide masters, slide layouts,\n * and notes slides. Replacing text in a master/layout propagates to every\n * dependent slide — intended for template branding.\n */\nconst TARGET_RE =\n /^ppt\\/(?:slides\\/slide\\d+|slideMasters\\/slideMaster\\d+|slideLayouts\\/slideLayout\\d+|notesSlides\\/notesSlide\\d+)\\.xml$/;\nconst HYPERLINK_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\";\nconst SLIDE_PART_CONTENT_TYPE =\n \"application/vnd.openxmlformats-officedocument.presentationml.slide+xml\";\nconst SLIDE_REL_TYPE = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slide\";\nconst SLIDE_LAYOUT_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/slideLayout\";\nconst COMMENTS_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\nconst COMMENT_AUTHORS_REL_TYPE =\n \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/commentAuthors\";\nconst COMMENTS_CONTENT_TYPE =\n \"application/vnd.openxmlformats-officedocument.presentationml.comments+xml\";\nconst COMMENT_AUTHORS_CONTENT_TYPE =\n \"application/vnd.openxmlformats-officedocument.presentationml.commentAuthors+xml\";\n\n/**\n * Inline run-level patch content. Reuses the generate vocabulary: a\n * {@link RunOptions} (or an array of them), or a plain string shorthand\n * for `{ text: \"…\" }`.\n */\nexport type Patch = RunOptions | RunOptions[] | string;\n\nexport interface PatchPresentationOptions<\n T extends OutputType = OutputType,\n> extends BasePatchOptions<T> {\n /** Placeholder substitutions: `{{key}}` (per delimiters) → run content. */\n placeholders?: Readonly<Record<string, Patch>>;\n /** Literal find/replace: the find string → run content (no delimiters added). */\n findReplace?: Readonly<Record<string, Patch>>;\n /** Core-properties metadata override (merged over the existing docProps/core.xml). */\n coreProperties?: Partial<CorePropertiesOptions>;\n /**\n * Slide collection edits. Appended slides inherit the template's first slide\n * layout; replaced slides keep their existing identity (sldId/rId/rels).\n */\n slides?: {\n /** Replace slides keyed by 0-based index in the slide list (sldIdLst order). */\n replace?: Readonly<Record<number, SlideOptions>>;\n /** Append slides after the last existing slide. */\n append?: Readonly<SlideOptions[]>;\n };\n /**\n * Comments to append per slide, keyed by 0-based slide index (sldIdLst order).\n * Authors are merged into commentAuthors.xml (deduped by name, ids continued);\n * per-slide comments are merged into ppt/comments/commentN.xml.\n */\n comments?: Readonly<Record<number, SlideCommentOptions[]>>;\n keepOriginalStyles?: boolean;\n}\n\n/** Write context for the current patch operation — accumulates hyperlinks. */\nlet currentPatchCtx: PptxWriteContext;\n\n/**\n * Patch replacer. Serializes each run via {@link textRunDesc} so the full\n * RunProperties vocabulary (color, fill, outline, shadow, font, hyperlinks, …)\n * is supported — no hand-rolled `<a:r>` builder.\n */\nconst pptxReplacer = createReplacer({\n ns: PPTX_NS,\n formatChild: (child: unknown): Element[] => {\n const runOpts = (typeof child === \"string\" ? { text: child } : child) as RunOptions;\n const xmlStr = textRunDesc.stringify(runOpts, currentPatchCtx) ?? \"<a:r/>\";\n const root = xml2js(xmlStr, { captureSpacesBetweenElements: true }).elements?.[0];\n return root ? [root] : [];\n },\n preserveSpace: false,\n});\n\n/**\n * Normalize a user patch value into the replacer's `{ type, children }`\n * envelope. PPTX patches are always inline run-level (`type: \"paragraph\"`).\n */\nconst toReplacerPatch = (patch: Patch): { type: \"paragraph\"; children: RunOptions[] } =>\n typeof patch === \"string\"\n ? { type: \"paragraph\", children: [{ text: patch }] }\n : { type: \"paragraph\", children: Array.isArray(patch) ? patch : [patch] };\n\nconst createRelationshipFile = (): Element => ({\n declaration: {\n attributes: { encoding: \"UTF-8\", standalone: \"yes\", version: \"1.0\" },\n },\n elements: [\n {\n attributes: { xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\" },\n elements: [],\n name: \"Relationships\",\n type: \"element\",\n },\n ],\n});\n\n/** Build a bare OOXML element node. */\nconst makeElement = (name: string, attributes: Record<string, string> = {}): Element => ({\n type: \"element\",\n name,\n attributes,\n elements: [],\n});\n\n/**\n * Locate the document root element by tag. A parsed XML part is wrapped as\n * `{ declaration, elements: [<root>] }`, so named children live one level down.\n */\nconst rootElement = (doc: Element | undefined, name: string): Element | undefined =>\n doc?.elements?.find((e) => e.name === name);\n\n/** Next 1-based slide file number given the existing slide parts. */\nconst nextSlideNumber = (xmlMap: Map<string, Element>): number => {\n let maxN = 0;\n for (const key of xmlMap.keys()) {\n const m = key.match(/^ppt\\/slides\\/slide(\\d+)\\.xml$/);\n if (m) maxN = Math.max(maxN, Number(m[1]));\n }\n return maxN + 1;\n};\n\n/** Next id for an appended `<p:sldId>` (255 floor → ≥256). */\nconst nextSldId = (sldIdLst: Element | undefined): number =>\n nextNumericId(sldIdLst, \"p:sldId\", \"id\", 255);\n\n/** Resolve a relationship `r:id` to its Target via a rels part. */\nconst resolveRelTarget = (\n rels: Element | undefined,\n rId: string | number | undefined,\n): string | undefined => {\n if (rId === undefined) return undefined;\n const needle = String(rId);\n const relationshipsRoot = rootElement(rels, \"Relationships\");\n for (const child of relationshipsRoot?.elements ?? []) {\n if (child.name === \"Relationship\" && String(child.attributes?.[\"Id\"]) === needle) {\n const target = child.attributes?.[\"Target\"];\n return target !== undefined ? String(target) : undefined;\n }\n }\n return undefined;\n};\n\n/**\n * Append a slide: serialize it, then wire sldIdLst + presentation rels +\n * content types + a slide rels pointing at the first slide layout (which must\n * already exist in the template). The appended slide inherits the template's\n * layout/master; it cannot reference styles or media not already present.\n */\nconst appendSlideToMap = (\n xmlMap: Map<string, Element>,\n slideOpts: SlideOptions,\n ctx: PptxWriteContext,\n): void => {\n const newN = nextSlideNumber(xmlMap);\n const slidePath = `ppt/slides/slide${newN}.xml`;\n\n // Slide part — no XML declaration, matching generated slide parts.\n xmlMap.set(slidePath, toJson(stringifySlide(slideOpts, ctx)));\n\n // presentation.xml sldIdLst + presentation.xml.rels (the new rId ties them)\n const presRoot = rootElement(xmlMap.get(\"ppt/presentation.xml\"), \"p:presentation\");\n const presRels = xmlMap.get(\"ppt/_rels/presentation.xml.rels\") ?? createRelationshipFile();\n xmlMap.set(\"ppt/_rels/presentation.xml.rels\", presRels);\n const newRId = getNextRelationshipIndex(presRels);\n\n const sldIdLst = findChild(presRoot, \"p:sldIdLst\");\n if (sldIdLst) {\n const els = sldIdLst.elements ?? (sldIdLst.elements = []);\n els.push(makeElement(\"p:sldId\", { id: String(nextSldId(sldIdLst)), \"r:id\": `rId${newRId}` }));\n }\n appendRelationship(presRels, newRId, SLIDE_REL_TYPE, `slides/slide${newN}.xml`);\n\n // [Content_Types].xml Override\n const contentTypes = xmlMap.get(\"[Content_Types].xml\");\n if (contentTypes) {\n appendOverride(contentTypes, `/${slidePath}`, SLIDE_PART_CONTENT_TYPE);\n }\n\n // Slide rels → first slide layout (template must already provide it)\n const slideRels = createRelationshipFile();\n appendRelationship(slideRels, 1, SLIDE_LAYOUT_REL_TYPE, \"../slideLayouts/slideLayout1.xml\");\n xmlMap.set(`ppt/slides/_rels/slide${newN}.xml.rels`, slideRels);\n};\n\n/** Resolve a 0-based sldIdLst index to its slide part path (ppt/slides/slideN.xml). */\nconst resolveSlidePath = (xmlMap: Map<string, Element>, index: number): string => {\n const presRoot = rootElement(xmlMap.get(\"ppt/presentation.xml\"), \"p:presentation\");\n const sldIdLst = findChild(presRoot, \"p:sldIdLst\");\n const sldIds = (sldIdLst?.elements ?? []).filter((e) => e.name === \"p:sldId\");\n const entry = sldIds[index];\n if (!entry?.attributes?.[\"r:id\"]) {\n throw new Error(`patchPresentation: no slide at index ${index}`);\n }\n const target = resolveRelTarget(\n xmlMap.get(\"ppt/_rels/presentation.xml.rels\"),\n entry.attributes[\"r:id\"],\n );\n if (!target) {\n throw new Error(`patchPresentation: slide ${index} relationship target not found`);\n }\n return `ppt/${target}`;\n};\n\n/**\n * Replace a slide in place by sldIdLst index: resolve the index to its slide\n * path via presentation rels, then rewrite only that part's content. sldId,\n * rId, content types, and slide rels are left untouched.\n */\nconst replaceSlideInMap = (\n xmlMap: Map<string, Element>,\n index: number,\n slideOpts: SlideOptions,\n ctx: PptxWriteContext,\n): void => {\n const slidePath = resolveSlidePath(xmlMap, index);\n xmlMap.set(slidePath, toJson(stringifySlide(slideOpts, ctx)));\n};\n\n/** Build the rels part path for a given part path (…/_rels/<file>.rels). */\nconst relsKeyFor = (partPath: string): string => {\n const slash = partPath.lastIndexOf(\"/\");\n return `${partPath.substring(0, slash)}/_rels/${partPath.substring(slash + 1)}.rels`;\n};\n\n/** Find an existing relationship of a type in a Relationships root. */\nconst findRelByType = (\n rels: Element | undefined,\n type: string,\n): { id: string; target: string } | undefined => {\n const relationshipsRoot = rootElement(rels, \"Relationships\");\n for (const child of relationshipsRoot?.elements ?? []) {\n if (child.name === \"Relationship\" && String(child.attributes?.[\"Type\"]) === type) {\n const target = child.attributes?.[\"Target\"];\n if (target !== undefined) {\n return { id: String(child.attributes?.[\"Id\"]), target: String(target) };\n }\n }\n }\n return undefined;\n};\n\n/** Noop ReadContext: comment-author/comment-list parse touches no relationships/parts/raw media. */\nconst STUB_READ_CTX: ReadContext = {\n resolveRelationship: () => undefined,\n getPart: () => undefined,\n getRaw: () => undefined,\n};\n\n/**\n * Append comments to a slide, merging authors into commentAuthors.xml and the\n * per-slide list into ppt/comments/commentN.xml. Wires presentation rels\n * (commentAuthors) + slide rels (comments) + content types when newly introduced.\n */\nconst appendCommentsToMap = (\n xmlMap: Map<string, Element>,\n index: number,\n slideComments: SlideCommentOptions[],\n ctx: PptxWriteContext,\n): void => {\n const slidePath = resolveSlidePath(xmlMap, index);\n const slideNMatch = slidePath.match(/slide(\\d+)\\.xml$/);\n const slideN = slideNMatch ? Number(slideNMatch[1]) : index + 1;\n const commentPath = `ppt/comments/comment${slideN}.xml`;\n\n // Parse existing authors + per-slide comments (merge targets).\n const existingAuthorsRoot = rootElement(xmlMap.get(\"ppt/commentAuthors.xml\"), \"p:cmAuthorLst\");\n const existingAuthors: AuthorEntry[] = existingAuthorsRoot\n ? commentAuthorsDesc.parse(existingAuthorsRoot, STUB_READ_CTX)\n : [];\n const existingEntriesRoot = rootElement(xmlMap.get(commentPath), \"p:cmLst\");\n const existingEntries: CommentEntry[] = existingEntriesRoot\n ? slideCommentsDesc.parse(existingEntriesRoot, STUB_READ_CTX)\n : [];\n\n // buildCommentData continues author ids + per-author idx from existing authors.\n const { authors, perSlide } = buildCommentData(\n [{ comments: slideComments }] as unknown as SlideOptions[],\n existingAuthors,\n );\n const mergedEntries = [...existingEntries, ...(perSlide[0] ?? [])];\n const mergedAuthors = authors ?? existingAuthors;\n\n // commentAuthors.xml (global) — written when any authors exist.\n if (mergedAuthors.length > 0) {\n xmlMap.set(\n \"ppt/commentAuthors.xml\",\n toJson(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${commentAuthorsDesc.stringify(mergedAuthors, ctx)}`,\n ),\n );\n const presRels = xmlMap.get(\"ppt/_rels/presentation.xml.rels\") ?? createRelationshipFile();\n xmlMap.set(\"ppt/_rels/presentation.xml.rels\", presRels);\n if (!findRelByType(presRels, COMMENT_AUTHORS_REL_TYPE)) {\n const n = getNextRelationshipIndex(presRels);\n appendRelationship(presRels, n, COMMENT_AUTHORS_REL_TYPE, \"commentAuthors.xml\");\n }\n }\n\n // commentN.xml (per slide).\n xmlMap.set(\n commentPath,\n toJson(\n `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>${slideCommentsDesc.stringify(mergedEntries, ctx)}`,\n ),\n );\n const slideRelsKey = relsKeyFor(slidePath);\n const slideRels = xmlMap.get(slideRelsKey) ?? createRelationshipFile();\n xmlMap.set(slideRelsKey, slideRels);\n if (!findRelByType(slideRels, COMMENTS_REL_TYPE)) {\n const n = getNextRelationshipIndex(slideRels);\n appendRelationship(slideRels, n, COMMENTS_REL_TYPE, `../comments/comment${slideN}.xml`);\n }\n\n // Content types — commentAuthors + commentN Overrides (deduped).\n const contentTypes = xmlMap.get(\"[Content_Types].xml\");\n if (contentTypes) {\n if (mergedAuthors.length > 0) {\n appendOverride(contentTypes, \"/ppt/commentAuthors.xml\", COMMENT_AUTHORS_CONTENT_TYPE);\n }\n appendOverride(contentTypes, `/${commentPath}`, COMMENTS_CONTENT_TYPE);\n }\n};\n\n/**\n * Patches an existing .pptx presentation by replacing placeholders with run content.\n *\n * Patch content reuses the generate {@link RunOptions} vocabulary (serialized\n * via the same descriptor), so color, fonts, fills, and hyperlinks are all\n * supported. Hyperlinks introduced by patch runs are registered into each\n * slide's relationship part.\n *\n * @publicApi\n */\nexport const patchPresentation = async <T extends OutputType = OutputType>({\n outputType,\n data,\n placeholders,\n findReplace,\n coreProperties,\n slides,\n comments,\n keepOriginalStyles = true,\n placeholderDelimiters = { end: \"}}\", start: \"{{\" } as const,\n}: PatchPresentationOptions<T>): Promise<OutputByType[T]> => {\n const { start, end } = placeholderDelimiters;\n if (!start.trim() || !end.trim()) {\n throw new Error(\"Both start and end delimiters must be non-empty strings.\");\n }\n\n const zipContent = unzipSync(toUint8Array(data));\n\n const xmlMap = new Map<string, Element>();\n const binaryMap = new Map<string, Uint8Array>();\n\n // Separate XML files from binary files\n for (const [key, value] of Object.entries(zipContent)) {\n if (key.endsWith(\".xml\") || key.endsWith(\".rels\")) {\n xmlMap.set(key, toJson(strFromU8(value)));\n } else {\n binaryMap.set(key, value);\n }\n }\n\n // Build (find-text → patch envelope) entries. Placeholders wrap the key in\n // delimiters; findReplace uses the literal key. Both share the same engine.\n const entries: Array<{\n find: string;\n patch: { type: \"paragraph\"; children: RunOptions[] };\n }> = [];\n if (placeholders) {\n for (const [key, value] of Object.entries(placeholders)) {\n entries.push({ find: `${start}${key}${end}`, patch: toReplacerPatch(value) });\n }\n }\n if (findReplace) {\n for (const [key, value] of Object.entries(findReplace)) {\n entries.push({ find: key, patch: toReplacerPatch(value) });\n }\n }\n\n // Target parts: slides + masters + layouts + notes (deterministic order)\n const targetPaths = Object.keys(zipContent)\n .filter((k) => TARGET_RE.test(k))\n .sort();\n\n currentPatchCtx = new PptxWriteContext();\n const context = {};\n\n // Process text replacement on each target part\n for (const targetPath of targetPaths) {\n const json = xmlMap.get(targetPath);\n if (!json) continue;\n\n for (const { find, patch } of entries) {\n pptxReplacer({\n context,\n json,\n keepOriginalStyles,\n patch,\n patchText: find,\n });\n }\n }\n\n // Resolve hyperlink placeholders registered by patch runs into each part's rels\n const hlinkByKey = new Map(currentPatchCtx.hyperlinks.map((h) => [h.key, h]));\n for (const targetPath of targetPaths) {\n const targetEl = xmlMap.get(targetPath);\n if (!targetEl) continue;\n\n const targetXml = js2xml(targetEl);\n const hlinkKeys = collectPlaceholderKeys(targetXml, \"hlink:\");\n if (hlinkKeys.length === 0) continue;\n\n const targetHlinks = hlinkKeys\n .map((k) => hlinkByKey.get(k))\n .filter((h): h is NonNullable<typeof h> => h !== undefined);\n if (targetHlinks.length === 0) continue;\n\n // Generalized rels path: ppt/<dir>/_rels/<file>.rels\n const lastSlash = targetPath.lastIndexOf(\"/\");\n const relsKey = `${targetPath.substring(0, lastSlash)}/_rels/${targetPath.substring(lastSlash + 1)}.rels`;\n const relsJson = xmlMap.get(relsKey) ?? createRelationshipFile();\n xmlMap.set(relsKey, relsJson);\n const offset = getNextRelationshipIndex(relsJson);\n\n const resolved = replaceHyperlinkPlaceholders(targetXml, targetHlinks, offset);\n xmlMap.set(targetPath, toJson(resolved));\n\n for (const [i, hlink] of targetHlinks.entries()) {\n appendRelationship(relsJson, offset + i, HYPERLINK_REL_TYPE, hlink.url, \"External\");\n }\n }\n\n // Slide collection edits — reuse the slide stringifier (no compiler re-run)\n if (slides) {\n if (slides.replace) {\n for (const [index, slideOpts] of Object.entries(slides.replace)) {\n replaceSlideInMap(xmlMap, Number(index), slideOpts, currentPatchCtx);\n }\n }\n if (slides.append) {\n for (const slideOpts of slides.append) {\n appendSlideToMap(xmlMap, slideOpts, currentPatchCtx);\n }\n }\n }\n\n // Slide comments — append per slide, merging authors + per-slide comment lists.\n if (comments) {\n for (const [indexStr, slideComments] of Object.entries(comments)) {\n appendCommentsToMap(xmlMap, Number(indexStr), slideComments, currentPatchCtx);\n }\n }\n\n // Rebuild ZIP\n const files: Record<string, Uint8Array> = {};\n const XML_DECL = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>';\n\n for (const [key, value] of xmlMap) {\n files[key] =\n key === \"docProps/core.xml\" && coreProperties\n ? encoder.encode(XML_DECL + applyCorePropertiesOverride(value, coreProperties))\n : encoder.encode(js2xml(value));\n }\n\n for (const [key, value] of binaryMap) {\n files[key] = value;\n }\n\n return await zipAndConvert(files, outputType, OoxmlMimeType.PPTX);\n};\n"],"mappings":"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"} |
+16
-3
| { | ||
| "name": "@office-open/pptx", | ||
| "version": "0.10.12", | ||
| "version": "0.10.13", | ||
| "description": "Generate, parse, and patch .pptx presentations with a declarative TypeScript API", | ||
@@ -30,2 +30,3 @@ "keywords": [ | ||
| "type": "module", | ||
| "sideEffects": false, | ||
| "main": "dist/index.mjs", | ||
@@ -49,7 +50,19 @@ "types": "dist/index.d.mts", | ||
| "import": "./dist/patch.mjs" | ||
| }, | ||
| "./chart": { | ||
| "types": "./dist/chart.d.mts", | ||
| "import": "./dist/chart.mjs" | ||
| }, | ||
| "./drawingml": { | ||
| "types": "./dist/drawingml.d.mts", | ||
| "import": "./dist/drawingml.mjs" | ||
| }, | ||
| "./smartart": { | ||
| "types": "./dist/smartart.d.mts", | ||
| "import": "./dist/smartart.mjs" | ||
| } | ||
| }, | ||
| "dependencies": { | ||
| "@office-open/core": "0.10.12", | ||
| "@office-open/xml": "0.10.12" | ||
| "@office-open/core": "0.10.13", | ||
| "@office-open/xml": "0.10.13" | ||
| }, | ||
@@ -56,0 +69,0 @@ "scripts": { |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
| import { AppPropertiesOptions, CorePropertiesOptions, CustomPropertyOptions, DataType, Relationships, ShapeLockingOptions, TableStyleListOptions, UniversalMeasure } from "@office-open/core"; | ||
| import { BlipFillConfigOptions, BlipFillMediaData, CustomGeometryOptions, FillOptions as FillOptions$1, GradientStopOptions, PresetGeometryOptions, buildFill, extractBlipFillMedia } from "@office-open/core/drawingml"; | ||
| import { ColorSchemeOptions, FontSchemeOptions, ThemeOptions, createThemeXml } from "@office-open/core/theme"; | ||
| import { ChartSpaceOptions } from "@office-open/core/chart"; | ||
| import { TreeNode } from "@office-open/core/smartart"; | ||
| //#region src/shared/drawingml/effects.d.ts | ||
| declare const ReflectionAlignment: { | ||
| readonly TOP_LEFT: "topLeft"; | ||
| readonly TOP: "top"; | ||
| readonly TOP_RIGHT: "topRight"; | ||
| readonly LEFT: "left"; | ||
| readonly CENTER: "center"; | ||
| readonly RIGHT: "right"; | ||
| readonly BOTTOM_LEFT: "bottomLeft"; | ||
| readonly BOTTOM: "bottom"; | ||
| readonly BOTTOM_RIGHT: "bottomRight"; | ||
| }; | ||
| interface ShadowOptions { | ||
| blur?: number; | ||
| distance?: number; | ||
| direction?: number; | ||
| color?: string; | ||
| alpha?: number; | ||
| rotateWithShape?: boolean; | ||
| } | ||
| interface GlowOptions { | ||
| radius?: number; | ||
| color?: string; | ||
| alpha?: number; | ||
| } | ||
| interface ReflectionOptions { | ||
| blurRadius?: number; | ||
| distance?: number; | ||
| direction?: number; | ||
| startAlpha?: number; | ||
| startPosition?: number; | ||
| endAlpha?: number; | ||
| endPosition?: number; | ||
| fadeDirection?: number; | ||
| scaleX?: number; | ||
| scaleY?: number; | ||
| skewX?: number; | ||
| skewY?: number; | ||
| alignment?: (typeof ReflectionAlignment)[keyof typeof ReflectionAlignment]; | ||
| rotateWithShape?: boolean; | ||
| } | ||
| interface SoftEdgeOptions { | ||
| radius?: number; | ||
| } | ||
| interface PPTXBevelOptions { | ||
| width?: number; | ||
| height?: number; | ||
| preset?: string; | ||
| } | ||
| interface Rotation3DOptions { | ||
| x?: number; | ||
| y?: number; | ||
| z?: number; | ||
| perspective?: number; | ||
| } | ||
| interface EffectsOptions { | ||
| outerShadow?: ShadowOptions; | ||
| innerShadow?: ShadowOptions; | ||
| glow?: GlowOptions; | ||
| reflection?: ReflectionOptions; | ||
| softEdge?: SoftEdgeOptions; | ||
| rotation3D?: Rotation3DOptions; | ||
| bevelTop?: PPTXBevelOptions; | ||
| bevelBottom?: PPTXBevelOptions; | ||
| extrusionH?: number; | ||
| depth?: number; | ||
| contourWidth?: number; | ||
| material?: "plastic" | "metal" | "matte" | "warmMatte" | "softEdge" | "flat" | "powder"; | ||
| lighting?: "flat" | "legacyFlat1" | "legacyFlat2" | "legacyFlat3" | "legacyFlat4" | "legacyHarsh1" | "legacyHarsh2" | "legacyHarsh3" | "legacyHarsh4" | "legacyNormal1" | "legacyNormal2" | "legacyNormal3" | "legacyNormal4" | "threePt" | "balanced" | "soft" | "harsh" | "flood" | "contrasting" | "morning" | "sunrise" | "sunset" | "chilly" | "freezing" | "twoPt" | "brightRoom" | "gallery"; | ||
| } | ||
| declare function createPptxEffectList(options: EffectsOptions): string | null; | ||
| //#endregion | ||
| //#region src/parts/background.d.ts | ||
| interface BackgroundOptions { | ||
| fill?: FillOptions$1; | ||
| effects?: EffectsOptions; | ||
| shadeToTitle?: boolean; | ||
| blackWhiteMode?: "clr" | "gray" | "ltGray" | "invGray" | "gmGray" | "bw" | "auto" | "black" | "white"; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/handout-master.d.ts | ||
| interface ColorMapOptions { | ||
| bg1?: string; | ||
| tx1?: string; | ||
| bg2?: string; | ||
| tx2?: string; | ||
| accent1?: string; | ||
| accent2?: string; | ||
| accent3?: string; | ||
| accent4?: string; | ||
| accent5?: string; | ||
| accent6?: string; | ||
| hlink?: string; | ||
| folHlink?: string; | ||
| } | ||
| interface HeaderFooterOptions { | ||
| date?: boolean; | ||
| header?: boolean; | ||
| footer?: boolean; | ||
| slideNumber?: boolean; | ||
| } | ||
| interface HandoutMasterOptions { | ||
| colorMap?: ColorMapOptions; | ||
| headerFooter?: HeaderFooterOptions; | ||
| } | ||
| declare function buildHandoutMasterXml(options?: HandoutMasterOptions): string; | ||
| //#endregion | ||
| //#region src/parts/notes-master.d.ts | ||
| interface NotesLevelProperties { | ||
| fontSize?: number | UniversalMeasure; | ||
| marginLeft?: number | UniversalMeasure; | ||
| alignment?: string; | ||
| } | ||
| interface NotesMasterOptions { | ||
| colorMap?: ColorMapOptions; | ||
| headerFooter?: HeaderFooterOptions; | ||
| notesStyle?: NotesLevelProperties[]; | ||
| } | ||
| declare function buildNotesMasterXml(options?: NotesMasterOptions): string; | ||
| //#endregion | ||
| //#region src/parts/presentation.d.ts | ||
| interface PhotoAlbumOptions { | ||
| blackWhite?: boolean; | ||
| showCaptions?: boolean; | ||
| layout?: "fitToSlide" | "1pic" | "2pic" | "4pic" | "1picTitle" | "2picTitle" | "4picTitle"; | ||
| frame?: "frameStyle1" | "frameStyle2" | "frameStyle3" | "frameStyle4" | "frameStyle5" | "frameStyle6" | "frameStyle7" | "none"; | ||
| } | ||
| interface ModifyVerifierOptions { | ||
| password?: string; | ||
| algorithmName?: string; | ||
| hashValue?: string; | ||
| saltValue?: string; | ||
| spinValue?: number; | ||
| cryptoProviderType?: string; | ||
| cryptoAlgorithmClass?: string; | ||
| cryptoAlgorithmType?: string; | ||
| cryptoAlgorithmSid?: number; | ||
| spinCount?: number; | ||
| saltData?: string; | ||
| hashData?: string; | ||
| cryptoProvider?: string; | ||
| algorithmExtensionId?: number; | ||
| algorithmExtensionSource?: string; | ||
| cryptoProviderTypeExtension?: number; | ||
| cryptoProviderTypeExtensionSource?: string; | ||
| } | ||
| interface EmbeddedFontOptions { | ||
| font: { | ||
| typeface: string; | ||
| panose?: string; | ||
| pitchFamily?: number; | ||
| charset?: number; | ||
| }; | ||
| regular?: string; | ||
| bold?: string; | ||
| italic?: string; | ||
| boldItalic?: string; | ||
| } | ||
| interface CustomShowOptions { | ||
| name: string; | ||
| id: number; | ||
| slides: { | ||
| rId: string; | ||
| }[]; | ||
| } | ||
| interface KinsokuOptions { | ||
| lang?: string; | ||
| invalStChars: string; | ||
| invalEndChars: string; | ||
| } | ||
| interface StringTagOptions { | ||
| name: string; | ||
| val: string; | ||
| } | ||
| interface CustomerDataOptions { | ||
| data?: { | ||
| rId: string; | ||
| }[]; | ||
| tags?: { | ||
| rId: string; | ||
| }; | ||
| tagList?: StringTagOptions[]; | ||
| } | ||
| interface PresentationPartOptions { | ||
| slideWidth?: number; | ||
| slideHeight?: number; | ||
| slideIds: number[]; | ||
| masterCount: number; | ||
| notesMasterRId?: number; | ||
| handoutMasterRId?: number; | ||
| serverZoom?: string; | ||
| firstSlideNum?: number; | ||
| showSpecialPlsOnTitleSld?: boolean; | ||
| rtl?: boolean; | ||
| removePersonalInfoOnSave?: boolean; | ||
| compatMode?: boolean; | ||
| strictFirstAndLastChars?: boolean; | ||
| embedTrueTypeFonts?: boolean; | ||
| saveSubsetFonts?: boolean; | ||
| autoCompressPictures?: boolean; | ||
| bookmarkIdSeed?: number; | ||
| conformance?: "strict" | "transitional"; | ||
| photoAlbum?: PhotoAlbumOptions; | ||
| modifyVerifier?: ModifyVerifierOptions; | ||
| embeddedFonts?: EmbeddedFontOptions[]; | ||
| customShows?: CustomShowOptions[]; | ||
| kinsoku?: KinsokuOptions[]; | ||
| customerData?: CustomerDataOptions; | ||
| sections?: PresentationSectionGroup[]; | ||
| } | ||
| interface PresentationSectionGroup { | ||
| name: string; | ||
| slideIndices: number[]; | ||
| } | ||
| interface ViewWrapper { | ||
| view: { | ||
| currentOptions: unknown; | ||
| }; | ||
| relationships: Relationships; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/presentation-properties.d.ts | ||
| interface WebPropertiesOptions { | ||
| showAnimation?: boolean; | ||
| resizeGraphics?: boolean; | ||
| allowPng?: boolean; | ||
| relyOnVml?: boolean; | ||
| organizeInFolders?: boolean; | ||
| useLongFilenames?: boolean; | ||
| imageSize?: string; | ||
| encoding?: string; | ||
| color?: string; | ||
| } | ||
| interface PrintPropertiesOptions { | ||
| printWhat?: "slides" | "handouts1" | "handouts2" | "handouts3" | "handouts4" | "handouts6" | "handouts9" | "notes" | "outline"; | ||
| colorMode?: "blackWhite" | "gray" | "color"; | ||
| hiddenSlides?: boolean; | ||
| scaleToFitPaper?: boolean; | ||
| frameSlides?: boolean; | ||
| } | ||
| interface HtmlPublishPropertiesOptions { | ||
| showSpeakerNotes?: boolean; | ||
| target?: string; | ||
| title?: string; | ||
| rId?: string; | ||
| } | ||
| interface PresentationPropertiesFullOptions { | ||
| show?: ShowOptions; | ||
| web?: WebPropertiesOptions; | ||
| print?: PrintPropertiesOptions; | ||
| htmlPublish?: HtmlPublishPropertiesOptions; | ||
| colorMru?: string[]; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/slide-layout.d.ts | ||
| type SlideLayoutType = "blank" | "title" | "tx" | "twoColTx" | "titleOnly" | "obj" | "secHead" | "chart" | "tbl" | "picTx" | "twoObj" | "twoTxTwoObj" | "objTx" | "vertTx" | "vertTitleAndTx"; | ||
| declare function buildLayoutXml(layoutType: SlideLayoutType, slideWidth?: number): string; | ||
| declare function buildCustomLayoutXml(def: LayoutDefinition): string; | ||
| //#endregion | ||
| //#region src/shared/header-footer.d.ts | ||
| interface SlideHeaderFooterOptions { | ||
| slideNumber?: boolean; | ||
| dateTime?: boolean; | ||
| footer?: string | boolean; | ||
| header?: boolean; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/slide-master.d.ts | ||
| interface MasterPlaceholderPosition { | ||
| x: number | UniversalMeasure; | ||
| y: number | UniversalMeasure; | ||
| width: number | UniversalMeasure; | ||
| height: number | UniversalMeasure; | ||
| } | ||
| interface MasterPlaceholderOptions { | ||
| title?: boolean | MasterPlaceholderPosition; | ||
| body?: boolean | MasterPlaceholderPosition; | ||
| date?: boolean | MasterPlaceholderPosition; | ||
| footer?: boolean | MasterPlaceholderPosition; | ||
| slideNumber?: boolean | MasterPlaceholderPosition; | ||
| } | ||
| interface SlideMasterOptions { | ||
| background?: BackgroundOptions; | ||
| children?: MasterChild[]; | ||
| placeholders?: MasterPlaceholderOptions; | ||
| } | ||
| declare function buildSlideMasterXml(layoutCount: number, _headerFooter?: SlideHeaderFooterOptions, masterOptions?: SlideMasterOptions, slideWidth?: number, masterIndex?: number): string; | ||
| //#endregion | ||
| //#region src/parts/slide/slide.d.ts | ||
| interface ControlOptions { | ||
| shapeId?: number; | ||
| name?: string; | ||
| showAsIcon?: boolean; | ||
| rId?: string; | ||
| imageWidth?: number; | ||
| imageHeight?: number; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/chart-frame.d.ts | ||
| interface ChartOptions extends ChartSpaceOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/paragraph-properties.d.ts | ||
| type TextAlignment = "left" | "center" | "right" | "justify"; | ||
| type BulletCharOptions = { | ||
| type: "char"; | ||
| char?: string; | ||
| color?: string; | ||
| size?: number; | ||
| }; | ||
| type BulletAutoNumOptions = { | ||
| type: "autoNum"; | ||
| format?: string; | ||
| startAt?: number; | ||
| color?: string; | ||
| size?: number; | ||
| }; | ||
| type BulletNoneOption = { | ||
| type: "none"; | ||
| }; | ||
| type BulletOptions = BulletCharOptions | BulletAutoNumOptions | BulletNoneOption; | ||
| interface ParagraphPropertiesOptions { | ||
| alignment?: TextAlignment; | ||
| indentLevel?: number; | ||
| marginBottom?: number; | ||
| marginTop?: number; | ||
| bullet?: BulletOptions; | ||
| lineSpacing?: number; | ||
| lineSpacingPoints?: number; | ||
| marginIndent?: number; | ||
| marginRight?: number; | ||
| defTabSize?: number; | ||
| fontAlignment?: "auto" | "t" | "ctr" | "b" | "base"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/run-properties.d.ts | ||
| declare const UnderlineStyle: { | ||
| readonly SINGLE: "single"; | ||
| readonly DOUBLE: "double"; | ||
| readonly NONE: "none"; | ||
| }; | ||
| declare const StrikeStyle: { | ||
| readonly SINGLE: "sngStrike"; | ||
| readonly DOUBLE: "dblStrike"; | ||
| readonly NONE: "noStrike"; | ||
| }; | ||
| declare const TextCapitalization: { | ||
| readonly NONE: "none"; | ||
| readonly ALL: "all"; | ||
| readonly SMALL: "small"; | ||
| }; | ||
| interface HyperlinkOptions { | ||
| url: string; | ||
| tooltip?: string; | ||
| action?: string; | ||
| highlightClick?: boolean; | ||
| endSound?: boolean; | ||
| invalidUrl?: boolean; | ||
| } | ||
| interface RunPropertiesOptions { | ||
| size?: number; | ||
| bold?: boolean; | ||
| italic?: boolean; | ||
| underline?: (typeof UnderlineStyle)[keyof typeof UnderlineStyle]; | ||
| font?: string; | ||
| lang?: string; | ||
| fill?: FillOptions$1; | ||
| hyperlink?: HyperlinkOptions; | ||
| strike?: (typeof StrikeStyle)[keyof typeof StrikeStyle]; | ||
| baseline?: number; | ||
| spacing?: number; | ||
| capitalization?: (typeof TextCapitalization)[keyof typeof TextCapitalization]; | ||
| shadow?: boolean; | ||
| outline?: boolean; | ||
| rightToLeft?: boolean; | ||
| noProof?: boolean; | ||
| dirty?: boolean; | ||
| kumimoji?: boolean; | ||
| alternateLanguage?: string; | ||
| normalizeHeight?: boolean; | ||
| bookmarkMark?: string; | ||
| smartTagId?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/run.d.ts | ||
| interface RunOptions extends RunPropertiesOptions { | ||
| text?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/paragraph/paragraph.d.ts | ||
| interface ParagraphOptions { | ||
| text?: string; | ||
| properties?: ParagraphPropertiesOptions; | ||
| children?: (RunOptions | string)[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-cell-properties.d.ts | ||
| interface CellBorderOptions { | ||
| width?: number | UniversalMeasure; | ||
| color?: string; | ||
| dashStyle?: "solid" | "dash" | "dashDot" | "lgDash" | "sysDot" | "sysDash"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-cell.d.ts | ||
| type VerticalAlignment = "top" | "center" | "bottom" | "justify" | "distribute"; | ||
| interface TableCellOptions { | ||
| text?: string; | ||
| children?: (ParagraphOptions | string)[]; | ||
| fill?: FillOptions$1; | ||
| borders?: { | ||
| top?: CellBorderOptions; | ||
| bottom?: CellBorderOptions; | ||
| left?: CellBorderOptions; | ||
| right?: CellBorderOptions; | ||
| }; | ||
| columnSpan?: number; | ||
| rowSpan?: number; | ||
| horizontalMerge?: "continue" | "restart"; | ||
| verticalMerge?: "continue" | "restart"; | ||
| verticalAlign?: VerticalAlignment; | ||
| margins?: { | ||
| top?: number | UniversalMeasure; | ||
| bottom?: number | UniversalMeasure; | ||
| left?: number | UniversalMeasure; | ||
| right?: number | UniversalMeasure; | ||
| }; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/text-body.d.ts | ||
| interface TextBodyOptions { | ||
| text?: string; | ||
| children?: (ParagraphOptions | string)[]; | ||
| vertical?: "horz" | "vert" | "vert270" | "wordArtVert" | "eaVert" | "mongolianVert" | "wordArtVertRtl"; | ||
| anchor?: VerticalAlignment; | ||
| autoFit?: "normal" | "shape" | "none"; | ||
| wrap?: "square" | "none"; | ||
| margins?: { | ||
| top?: number | UniversalMeasure; | ||
| bottom?: number | UniversalMeasure; | ||
| left?: number | UniversalMeasure; | ||
| right?: number | UniversalMeasure; | ||
| }; | ||
| marginTop?: number | UniversalMeasure; | ||
| marginBottom?: number | UniversalMeasure; | ||
| columns?: number; | ||
| columnSpacing?: number; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/locked-canvas-frame.d.ts | ||
| interface LockedCanvasShapeOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| geometry?: string; | ||
| fill?: string; | ||
| textBody?: TextBodyOptions; | ||
| } | ||
| interface LockedCanvasFrameOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| id?: number; | ||
| name?: string; | ||
| children?: LockedCanvasShapeOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/ole-frame.d.ts | ||
| interface OleEmbedOptions { | ||
| rId: string; | ||
| lastEdited?: string; | ||
| } | ||
| interface OleLinkOptions { | ||
| rId: string; | ||
| updateLastEdited?: string; | ||
| autoUpdate?: boolean; | ||
| } | ||
| interface OleOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| progId?: string; | ||
| spid?: string; | ||
| name?: string; | ||
| showAsIcon?: boolean; | ||
| imgW?: number; | ||
| imgH?: number; | ||
| embed?: OleEmbedOptions; | ||
| link?: OleLinkOptions; | ||
| imgRId?: string; | ||
| followColorScheme?: "none" | "full" | "textAndBackground"; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/smartart.d.ts | ||
| interface SmartArtOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| nodes: TreeNode[]; | ||
| name?: string; | ||
| layout?: string; | ||
| style?: string; | ||
| color?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/animation/types.d.ts | ||
| type AnimationType = "appear" | "fade" | "fly" | "wipe" | "dissolve" | "split" | "blinds" | "checker" | "randomBars" | "wheel" | "zoom" | "cover" | "push" | "strips"; | ||
| type AnimationTrigger = "onClick" | "withPrevious" | "afterPrevious"; | ||
| type AnimationDirection = "left" | "right" | "up" | "down" | "horizontal" | "vertical"; | ||
| type AnimationClass = "entr" | "exit" | "emph" | "mediacall"; | ||
| type EmphasisType = "growShrink" | "spin" | "growWithTurn" | "colorChange" | "transparency" | "boldFlash" | "wave" | "pulse"; | ||
| type PathAnimationType = "customPath" | "arc" | "bounce" | "circle" | "curve" | "figureEight" | "line" | "loop"; | ||
| type MediaAnimationType = "playAudio" | "playVideo" | "play"; | ||
| type AnimationCalcMode = "discrete" | "lin" | "fmla"; | ||
| type AnimationValueType = "str" | "num" | "clr"; | ||
| interface AnimationVariantOptions { | ||
| bool?: boolean; | ||
| int?: number; | ||
| float?: number; | ||
| string?: string; | ||
| color?: string; | ||
| } | ||
| interface EndConditionOptions { | ||
| event?: string; | ||
| delay?: string; | ||
| timeNodeId?: number; | ||
| runtimeNode?: "first" | "last" | "all"; | ||
| } | ||
| interface AnimationBuildOptions { | ||
| type: "paragraph" | "diagram" | "oleChart" | "graphic"; | ||
| spid: number; | ||
| grpId: number; | ||
| uiExpand?: boolean; | ||
| build?: "allAtOnce" | "p" | "cust" | "whole"; | ||
| bldLvl?: number; | ||
| animBg?: boolean; | ||
| autoUpdateAnimBg?: boolean; | ||
| rev?: boolean; | ||
| advAuto?: number; | ||
| templates?: AnimationTemplateOptions[]; | ||
| diagramBuild?: string; | ||
| oleChartBuild?: string; | ||
| oleChartAnimBg?: boolean; | ||
| graphicBuildAsOne?: boolean; | ||
| } | ||
| interface AnimationTemplateOptions { | ||
| lvl?: number; | ||
| children: AnimationOptions[]; | ||
| } | ||
| interface AnimationOptions { | ||
| type?: AnimationType; | ||
| duration?: number; | ||
| delay?: number; | ||
| trigger?: AnimationTrigger; | ||
| direction?: AnimationDirection; | ||
| class?: AnimationClass; | ||
| emphasisType?: EmphasisType; | ||
| pathType?: PathAnimationType; | ||
| path?: string; | ||
| speed?: number; | ||
| repeatCount?: number; | ||
| autoReverse?: boolean; | ||
| color?: string; | ||
| mediaType?: MediaAnimationType; | ||
| isNarration?: boolean; | ||
| fullScreen?: boolean; | ||
| volume?: number; | ||
| mute?: boolean; | ||
| attributeName?: string; | ||
| calcMode?: AnimationCalcMode; | ||
| valueType?: AnimationValueType; | ||
| from?: string; | ||
| to?: string; | ||
| animBy?: string; | ||
| charRange?: [number, number]; | ||
| paragraphRange?: [number, number]; | ||
| setBehavior?: { | ||
| attributeName: string; | ||
| toValue: string; | ||
| toType?: "string" | "number"; | ||
| }; | ||
| commandType?: "call" | "evt" | "verb"; | ||
| command?: string; | ||
| iterate?: { | ||
| type?: "el" | "wd" | "lt"; | ||
| interval?: number; | ||
| backwards?: boolean; | ||
| iteratePercentage?: number; | ||
| }; | ||
| repeatDuration?: string; | ||
| acceleration?: number; | ||
| deceleration?: number; | ||
| restart?: "always" | "whenNotActive" | "never"; | ||
| syncBehavior?: "canSlip" | "isLocked" | "stoppable"; | ||
| timeFilter?: string; | ||
| eventFilter?: string; | ||
| display?: boolean; | ||
| masterRelation?: "clearConn" | "keepConn" | "resume"; | ||
| buildLevel?: number; | ||
| groupId?: number; | ||
| afterEffect?: boolean; | ||
| nodePlaceholder?: boolean; | ||
| advanceAfterTime?: string; | ||
| animateBackground?: boolean; | ||
| autoUpdateAnimationBackground?: boolean; | ||
| additive?: "base" | "sum" | "repl" | "mult" | "none"; | ||
| accumulate?: "none" | "always"; | ||
| transformType?: "pt" | "img"; | ||
| runtimeContext?: string; | ||
| override?: "normal" | "childStyle"; | ||
| paragraphBuild?: "whole" | "allAtOnce" | "p" | "cust"; | ||
| formula?: string; | ||
| colorSpace?: "rgb" | "hsl"; | ||
| pathEditMode?: "relative" | "fixed" | "none"; | ||
| previousAction?: "none" | "skipTimed"; | ||
| pointsTypes?: string; | ||
| rotationAngle?: number; | ||
| zoomContents?: boolean; | ||
| showWhenStopped?: boolean; | ||
| numberOfSlides?: number; | ||
| propertyList?: string; | ||
| endConditions?: EndConditionOptions[]; | ||
| endSyncCondition?: EndConditionOptions; | ||
| subTimeNodes?: AnimationOptions[]; | ||
| exclusiveMode?: boolean; | ||
| inkTargetShapeId?: number; | ||
| soundTarget?: string; | ||
| subShapeId?: number; | ||
| graphicElementType?: string; | ||
| oleChartElementType?: string; | ||
| oleChartElementLevel?: number; | ||
| variantBool?: boolean; | ||
| variantInt?: number; | ||
| variantFloat?: number; | ||
| variantColor?: string; | ||
| colorFrom?: string; | ||
| colorTo?: string; | ||
| colorByRgb?: { | ||
| r: string; | ||
| g: string; | ||
| b: string; | ||
| }; | ||
| colorByHsl?: { | ||
| h: string; | ||
| s: string; | ||
| l: string; | ||
| }; | ||
| effectProgress?: AnimationVariantOptions; | ||
| motionFrom?: { | ||
| x: string; | ||
| y: string; | ||
| }; | ||
| motionRotationCenter?: { | ||
| x: string; | ||
| y: string; | ||
| }; | ||
| builds?: AnimationBuildOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/media/data.d.ts | ||
| interface MediaDataTransformation { | ||
| pixels: { | ||
| x: number; | ||
| y: number; | ||
| }; | ||
| emus: { | ||
| x: number; | ||
| y: number; | ||
| }; | ||
| flip?: { | ||
| vertical?: boolean; | ||
| horizontal?: boolean; | ||
| }; | ||
| rotation?: number; | ||
| } | ||
| interface CoreMediaData { | ||
| fileName: string; | ||
| transformation: MediaDataTransformation; | ||
| data: Uint8Array; | ||
| } | ||
| interface RegularMediaData { | ||
| type: "jpg" | "png" | "gif" | "bmp" | "tif" | "ico" | "emf" | "wmf"; | ||
| } | ||
| interface SvgMediaData { | ||
| type: "svg"; | ||
| fallback: RegularMediaData & CoreMediaData; | ||
| } | ||
| interface VideoMediaData { | ||
| type: "mp4" | "mov" | "wmv" | "avi"; | ||
| } | ||
| interface AudioMediaData { | ||
| type: "mp3" | "wav" | "wma" | "aac"; | ||
| } | ||
| type MediaData = (RegularMediaData | SvgMediaData | VideoMediaData | AudioMediaData) & CoreMediaData; | ||
| //#endregion | ||
| //#region src/shared/media/media-frame-base.d.ts | ||
| interface MediaFrameBaseOptions { | ||
| id?: number; | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| data: DataType; | ||
| type: MediaData["type"]; | ||
| name?: string; | ||
| animation?: AnimationOptions; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/media/audio-frame.d.ts | ||
| type AudioType = "mp3" | "wav" | "wma" | "aac"; | ||
| interface AudioFrameOptions extends MediaFrameBaseOptions { | ||
| type: AudioType; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/media/video-frame.d.ts | ||
| type VideoType = "mp4" | "mov" | "wmv" | "avi"; | ||
| type PosterType = "png" | "jpg"; | ||
| interface VideoFrameOptions extends MediaFrameBaseOptions { | ||
| type: VideoType; | ||
| poster?: DataType; | ||
| posterType?: PosterType; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/picture.d.ts | ||
| interface PictureOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| data: DataType; | ||
| type: "png" | "jpg" | "gif" | "bmp" | "emf" | "wmf"; | ||
| name?: string; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/group-shape.d.ts | ||
| interface GroupShapeOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| rotation?: number; | ||
| flipHorizontal?: boolean; | ||
| children: SlideChild[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/drawingml/outline.d.ts | ||
| interface OutlineOptions { | ||
| width?: number | UniversalMeasure; | ||
| color?: string; | ||
| dashStyle?: "solid" | "dash" | "dashDot" | "lgDash" | "sysDot" | "sysDash"; | ||
| } | ||
| declare const createOutlineCompat: (options?: OutlineOptions, arrowheads?: { | ||
| beginType?: string; | ||
| endType?: string; | ||
| width?: string; | ||
| length?: string; | ||
| }) => string; | ||
| //#endregion | ||
| //#region src/shared/shape/line-shape.d.ts | ||
| interface LineShapeOptions { | ||
| id?: number; | ||
| name?: string; | ||
| x1?: number | UniversalMeasure; | ||
| y1?: number | UniversalMeasure; | ||
| x2?: number | UniversalMeasure; | ||
| y2?: number | UniversalMeasure; | ||
| fill?: FillOptions$1; | ||
| outline?: OutlineOptions; | ||
| } | ||
| type ArrowheadType = "triangle" | "stealth" | "diamond" | "oval" | "open" | "none"; | ||
| interface ConnectorShapeOptions { | ||
| id?: number; | ||
| name?: string; | ||
| x1?: number | UniversalMeasure; | ||
| y1?: number | UniversalMeasure; | ||
| x2?: number | UniversalMeasure; | ||
| y2?: number | UniversalMeasure; | ||
| fill?: FillOptions$1; | ||
| outline?: OutlineOptions; | ||
| beginArrowhead?: ArrowheadType; | ||
| endArrowhead?: ArrowheadType; | ||
| arrowheadWidth?: "small" | "medium" | "large"; | ||
| arrowheadLength?: "small" | "medium" | "large"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/drawingml/shape-properties.d.ts | ||
| interface ConnectionSiteOptions { | ||
| x: number; | ||
| y: number; | ||
| angle?: number; | ||
| } | ||
| interface ShapePropertiesOptions { | ||
| x?: number; | ||
| y?: number; | ||
| width?: number; | ||
| height?: number; | ||
| flipHorizontal?: boolean; | ||
| rotation?: number; | ||
| geometry?: string | PresetGeometryOptions; | ||
| customGeometry?: CustomGeometryOptions; | ||
| fill?: FillOptions$1; | ||
| outline?: OutlineOptions; | ||
| effects?: EffectsOptions; | ||
| connectionSites?: ConnectionSiteOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/shape/shape.d.ts | ||
| interface ShapeStyleOptions { | ||
| lineReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| fillReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| effectReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| fontReference?: { | ||
| index: number; | ||
| color?: string; | ||
| }; | ||
| } | ||
| interface ShapeOptions { | ||
| id?: number; | ||
| name?: string; | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| geometry?: string | PresetGeometryOptions; | ||
| customGeometry?: CustomGeometryOptions; | ||
| fill?: ShapePropertiesOptions["fill"]; | ||
| outline?: OutlineOptions; | ||
| effects?: EffectsOptions; | ||
| flipHorizontal?: boolean; | ||
| rotation?: number; | ||
| textBody?: TextBodyOptions; | ||
| animation?: AnimationOptions; | ||
| locking?: ShapeLockingOptions; | ||
| placeholder?: "title" | "body" | "subTitle" | "sldNum" | "dt" | "ftr" | "hdr" | "obj"; | ||
| placeholderIndex?: number; | ||
| useBackgroundFill?: boolean; | ||
| isPhoto?: boolean; | ||
| userDrawn?: boolean; | ||
| hasCustomPrompt?: boolean; | ||
| style?: ShapeStyleOptions; | ||
| blackWhiteMode?: "clr" | "auto" | "gray" | "ltGray" | "invGray" | "grayWhite" | "blackGray" | "blackWhite" | "black" | "white" | "hidden"; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-row.d.ts | ||
| interface TableRowOptions { | ||
| height?: number | UniversalMeasure; | ||
| cells: TableCellOptions[]; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/table/table-frame.d.ts | ||
| interface TableOptions { | ||
| x?: number | UniversalMeasure; | ||
| y?: number | UniversalMeasure; | ||
| width?: number | UniversalMeasure; | ||
| height?: number | UniversalMeasure; | ||
| rows: TableRowOptions[]; | ||
| columnWidths?: number[]; | ||
| firstRow?: boolean; | ||
| lastRow?: boolean; | ||
| bandRow?: boolean; | ||
| firstCol?: boolean; | ||
| lastCol?: boolean; | ||
| bandCol?: boolean; | ||
| tableStyleId?: string; | ||
| borders?: { | ||
| top?: CellBorderOptions; | ||
| bottom?: CellBorderOptions; | ||
| left?: CellBorderOptions; | ||
| right?: CellBorderOptions; | ||
| }; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/slide/slide-child.d.ts | ||
| type SlideChild = { | ||
| shape: ShapeOptions; | ||
| } | { | ||
| picture: PictureOptions; | ||
| } | { | ||
| table: TableOptions; | ||
| } | { | ||
| chart: ChartOptions; | ||
| } | { | ||
| line: LineShapeOptions; | ||
| } | { | ||
| connector: ConnectorShapeOptions; | ||
| } | { | ||
| video: VideoFrameOptions; | ||
| } | { | ||
| audio: AudioFrameOptions; | ||
| } | { | ||
| group: GroupShapeOptions; | ||
| } | { | ||
| smartart: SmartArtOptions; | ||
| } | { | ||
| lockedCanvas: LockedCanvasFrameOptions; | ||
| } | { | ||
| ole: OleOptions; | ||
| } | { | ||
| contentPart: { | ||
| rId: string; | ||
| }; | ||
| }; | ||
| //#endregion | ||
| //#region src/parts/slide/slide-sync-properties.d.ts | ||
| interface SlideSyncOptions { | ||
| serverSldId: string; | ||
| serverSldModifiedTime: string; | ||
| clientInsertedTime: string; | ||
| } | ||
| //#endregion | ||
| //#region src/parts/view-properties.d.ts | ||
| type SplitterBarState = "restored" | "maximized" | "minimized"; | ||
| interface NormalViewOptions { | ||
| showOutlineIcons?: boolean; | ||
| snapVertSplitter?: boolean; | ||
| vertBarState?: SplitterBarState; | ||
| horzBarState?: SplitterBarState; | ||
| preferSingleView?: boolean; | ||
| } | ||
| interface SlideViewOptions { | ||
| snapToGrid?: boolean; | ||
| snapToObjects?: boolean; | ||
| showGuides?: boolean; | ||
| varScale?: boolean; | ||
| } | ||
| interface ViewPropertiesOptions { | ||
| lastView?: "slideView" | "slideMasterView" | "notesView" | "handoutView" | "outlineView" | "slideSorterView"; | ||
| showComments?: boolean; | ||
| gridSpacing?: { | ||
| cx: number; | ||
| cy: number; | ||
| }; | ||
| zoomScaleNumerator?: number; | ||
| zoomScaleDenominator?: number; | ||
| normalView?: NormalViewOptions; | ||
| slideView?: SlideViewOptions; | ||
| guides?: { | ||
| orient?: "vert" | "horz"; | ||
| pos?: number; | ||
| }[]; | ||
| outlineView?: { | ||
| slides?: { | ||
| rId: string; | ||
| collapse?: boolean; | ||
| }[]; | ||
| }; | ||
| sorterView?: { | ||
| showFormatting?: boolean; | ||
| }; | ||
| notesView?: boolean; | ||
| } | ||
| //#endregion | ||
| //#region src/shared/transition.d.ts | ||
| type TransitionType = "fade" | "push" | "wipe" | "split" | "blinds" | "checker" | "comb" | "randomBar" | "cover" | "pull" | "strips" | "wheel" | "zoom" | "circle" | "dissolve" | "diamond" | "newsflash" | "plus" | "wedge" | "random" | "cut"; | ||
| type TransitionDirection = "left" | "up" | "right" | "down" | "leftUp" | "rightUp" | "leftDown" | "rightDown" | "out" | "in"; | ||
| interface TransitionOptions { | ||
| type?: TransitionType; | ||
| speed?: "slow" | "med" | "fast"; | ||
| advanceOnClick?: boolean; | ||
| advanceAfterTime?: number; | ||
| direction?: TransitionDirection; | ||
| orient?: "horz" | "vert"; | ||
| thruBlk?: boolean; | ||
| spokes?: number; | ||
| startSound?: { | ||
| rId: string; | ||
| name?: string; | ||
| loop?: boolean; | ||
| }; | ||
| stopPreviousSound?: boolean; | ||
| } | ||
| declare function buildTransition(options: TransitionOptions): string; | ||
| //#endregion | ||
| //#region src/shared/file.d.ts | ||
| type MasterChild = { | ||
| shape: ShapeOptions; | ||
| }; | ||
| type SlideSize = "16:9" | "4:3" | { | ||
| width: number; | ||
| height: number; | ||
| }; | ||
| interface LayoutPlaceholderOptions { | ||
| title?: MasterPlaceholderPosition | false; | ||
| body?: MasterPlaceholderPosition | false; | ||
| subtitle?: MasterPlaceholderPosition | false; | ||
| date?: MasterPlaceholderPosition | false; | ||
| footer?: MasterPlaceholderPosition | false; | ||
| slideNumber?: MasterPlaceholderPosition | false; | ||
| } | ||
| interface LayoutDefinition { | ||
| type?: SlideLayoutType; | ||
| name?: string; | ||
| matchingName?: string; | ||
| placeholders?: LayoutPlaceholderOptions; | ||
| children?: MasterChild[]; | ||
| } | ||
| interface MasterDefinition extends SlideMasterOptions { | ||
| name?: string; | ||
| theme?: ThemeOptions; | ||
| layouts?: LayoutDefinition[]; | ||
| } | ||
| interface SlideCommentOptions { | ||
| author: string; | ||
| text: string; | ||
| x: number | UniversalMeasure; | ||
| y: number | UniversalMeasure; | ||
| initials?: string; | ||
| date?: string; | ||
| modified?: boolean; | ||
| } | ||
| interface SlideAnimation { | ||
| shapeId: number; | ||
| options: AnimationOptions; | ||
| } | ||
| interface SlideOptions { | ||
| children?: SlideChild[]; | ||
| background?: BackgroundOptions; | ||
| notes?: string; | ||
| transition?: TransitionOptions; | ||
| headerFooter?: SlideHeaderFooterOptions; | ||
| comments?: SlideCommentOptions[]; | ||
| layout?: SlideLayoutType | string; | ||
| master?: string; | ||
| showMasterShapes?: boolean; | ||
| showMasterPlaceholderAnimations?: boolean; | ||
| hidden?: boolean; | ||
| controls?: ControlOptions[]; | ||
| customerData?: { | ||
| rId: string; | ||
| }[]; | ||
| slideSync?: SlideSyncOptions; | ||
| animations?: SlideAnimation[]; | ||
| section?: string; | ||
| } | ||
| interface ShowOptions { | ||
| loop?: boolean; | ||
| type?: "present" | "browse" | "kiosk"; | ||
| showScrollbar?: boolean; | ||
| restart?: number; | ||
| showNarration?: boolean; | ||
| showAnimation?: boolean; | ||
| useTimings?: boolean; | ||
| slideRange?: { | ||
| start: number; | ||
| end: number; | ||
| }; | ||
| penColor?: string; | ||
| } | ||
| interface PresentationOptions extends CorePropertiesOptions { | ||
| size?: SlideSize; | ||
| masters?: MasterDefinition[]; | ||
| slides?: SlideOptions[]; | ||
| show?: ShowOptions; | ||
| view?: ViewPropertiesOptions; | ||
| includeHandoutMaster?: boolean; | ||
| includeNotesMaster?: boolean; | ||
| handoutMasterOptions?: HandoutMasterOptions; | ||
| notesMasterOptions?: NotesMasterOptions; | ||
| tableStyles?: TableStyleListOptions; | ||
| web?: WebPropertiesOptions; | ||
| print?: PrintPropertiesOptions; | ||
| htmlPublish?: HtmlPublishPropertiesOptions; | ||
| serverZoom?: string; | ||
| firstSlideNum?: number; | ||
| showSpecialPlsOnTitleSld?: boolean; | ||
| rtl?: boolean; | ||
| removePersonalInfoOnSave?: boolean; | ||
| compatMode?: boolean; | ||
| strictFirstAndLastChars?: boolean; | ||
| embedTrueTypeFonts?: boolean; | ||
| saveSubsetFonts?: boolean; | ||
| autoCompressPictures?: boolean; | ||
| bookmarkIdSeed?: number; | ||
| conformance?: "strict" | "transitional"; | ||
| photoAlbum?: PhotoAlbumOptions; | ||
| modifyVerifier?: ModifyVerifierOptions; | ||
| embeddedFonts?: EmbeddedFontOptions[]; | ||
| customShows?: CustomShowOptions[]; | ||
| kinsoku?: KinsokuOptions[]; | ||
| customerData?: CustomerDataOptions; | ||
| colorMru?: string[]; | ||
| appProperties?: AppPropertiesOptions; | ||
| customProperties?: CustomPropertyOptions[]; | ||
| } | ||
| //#endregion | ||
| export { ParagraphOptions as $, PosterType as A, BlipFillMediaData as At, AnimationOptions as B, SoftEdgeOptions as Bt, ShapePropertiesOptions as C, PhotoAlbumOptions as Ct, createOutlineCompat as D, buildHandoutMasterXml as Dt, OutlineOptions as E, buildNotesMasterXml as Et, MediaData as F, EffectsOptions as Ft, MediaAnimationType as G, AnimationType as H, MediaDataTransformation as I, GlowOptions as It, LockedCanvasFrameOptions as J, PathAnimationType as K, AnimationCalcMode as L, ReflectionAlignment as Lt, VideoType as M, GradientStopOptions as Mt, AudioFrameOptions as N, buildFill as Nt, GroupShapeOptions as O, BackgroundOptions as Ot, AudioType as P, extractBlipFillMedia as Pt, CellBorderOptions as Q, AnimationClass as R, ReflectionOptions as Rt, ShapeOptions as S, ModifyVerifierOptions as St, LineShapeOptions as T, ViewWrapper as Tt, AnimationValueType as U, AnimationTrigger as V, createPptxEffectList as Vt, EmphasisType as W, TableCellOptions as X, TextBodyOptions as Y, VerticalAlignment as Z, createThemeXml as _, PresentationPropertiesFullOptions as _t, PresentationOptions as a, UnderlineStyle as at, TableOptions as b, EmbeddedFontOptions as bt, SlideOptions as c, ChartOptions as ct, TransitionOptions as d, SlideMasterOptions as dt, RunOptions as et, TransitionType as f, buildSlideMasterXml as ft, ThemeOptions as g, buildLayoutXml as gt, FontSchemeOptions as h, buildCustomLayoutXml as ht, MasterDefinition as i, TextCapitalization as it, VideoFrameOptions as j, FillOptions$1 as jt, PictureOptions as k, BlipFillConfigOptions as kt, SlideSize as l, MasterPlaceholderOptions as lt, ColorSchemeOptions as m, SlideLayoutType as mt, LayoutPlaceholderOptions as n, RunPropertiesOptions as nt, ShowOptions as o, ParagraphPropertiesOptions as ot, buildTransition as p, SlideHeaderFooterOptions as pt, SmartArtOptions as q, MasterChild as r, StrikeStyle as rt, SlideCommentOptions as s, TextAlignment as st, LayoutDefinition as t, HyperlinkOptions as tt, TransitionDirection as u, MasterPlaceholderPosition as ut, ViewPropertiesOptions as v, CustomShowOptions as vt, ConnectorShapeOptions as w, PresentationPartOptions as wt, TableRowOptions as x, KinsokuOptions as xt, SlideChild as y, CustomerDataOptions as yt, AnimationDirection as z, ShadowOptions as zt }; | ||
| //# sourceMappingURL=file-Dh_35y_9.d.mts.map |
| {"version":3,"file":"file-Dh_35y_9.d.mts","names":[],"sources":["../src/shared/drawingml/effects.ts","../src/parts/background.ts","../src/parts/handout-master.ts","../src/parts/notes-master.ts","../src/parts/presentation.ts","../src/parts/presentation-properties.ts","../src/parts/slide-layout.ts","../src/shared/header-footer.ts","../src/parts/slide-master.ts","../src/parts/slide/slide.ts","../src/parts/chart-frame.ts","../src/shared/shape/paragraph/paragraph-properties.ts","../src/shared/shape/paragraph/run-properties.ts","../src/shared/shape/paragraph/run.ts","../src/shared/shape/paragraph/paragraph.ts","../src/shared/table/table-cell-properties.ts","../src/shared/table/table-cell.ts","../src/shared/shape/text-body.ts","../src/parts/locked-canvas-frame.ts","../src/parts/ole-frame.ts","../src/parts/smartart.ts","../src/shared/animation/types.ts","../src/shared/media/data.ts","../src/shared/media/media-frame-base.ts","../src/shared/media/audio-frame.ts","../src/shared/media/video-frame.ts","../src/shared/picture.ts","../src/shared/shape/group-shape.ts","../src/shared/drawingml/outline.ts","../src/shared/shape/line-shape.ts","../src/shared/drawingml/shape-properties.ts","../src/shared/shape/shape.ts","../src/shared/table/table-row.ts","../src/shared/table/table-frame.ts","../src/parts/slide/slide-child.ts","../src/parts/slide/slide-sync-properties.ts","../src/parts/view-properties.ts","../src/shared/transition.ts","../src/shared/file.ts"],"mappings":"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"} |
| import { E as SP_TREE_HEADER, _ as timingDesc, a as ParseContext, c as parseChild, d as backgroundDesc, f as pictureDesc, g as slideCommentsDesc, h as commentAuthorsDesc, i as notesMasterDesc, n as tableStylesDesc, o as PptxReadContext, p as shapeDesc, r as notesSlideDesc, t as viewPropsDesc, u as presPropsDesc, v as slideLayoutDesc } from "./view-properties-D9ZVHjXg.mjs"; | ||
| import { attr, attrNum, findChild } from "@office-open/xml"; | ||
| import { appPropertiesDesc, customPropertiesDesc, parseArchive, parseCorePropsElement, toUint8Array } from "@office-open/core"; | ||
| import { themeDesc } from "@office-open/core/theme"; | ||
| //#region src/parts/descriptors/slide.ts | ||
| const slideDesc = { | ||
| kind: "custom", | ||
| stringify(opts, ctx) { | ||
| const parts = []; | ||
| const sldAttrs = []; | ||
| if (opts.showMasterSp === false) sldAttrs.push(" showMasterSp=\"0\""); | ||
| if (opts.showMasterPhAnim === false) sldAttrs.push(" showMasterPhAnim=\"0\""); | ||
| if (opts.hidden) sldAttrs.push(" show=\"0\""); | ||
| parts.push(`<p:sld xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:p="http://schemas.openxmlformats.org/presentationml/2006/main"${sldAttrs.join("")}>`); | ||
| parts.push("<p:cSld>"); | ||
| if (opts.background) parts.push(stringifyBackground(opts.background)); | ||
| parts.push("<p:spTree>"); | ||
| parts.push(SP_TREE_HEADER); | ||
| if (opts.children) for (const child of opts.children) { | ||
| const xml = stringifySlideChild(child, ctx); | ||
| if (xml) parts.push(xml); | ||
| } | ||
| parts.push("</p:spTree>"); | ||
| if (opts.customerData && opts.customerData.length > 0) { | ||
| const cdItems = opts.customerData.map((d) => `<p:custData r:id="${d.rId}"/>`).join(""); | ||
| parts.push(`<p:custDataLst>${cdItems}</p:custDataLst>`); | ||
| } | ||
| if (opts.controls && opts.controls.length > 0) { | ||
| const ctrlItems = opts.controls.map((c) => { | ||
| const attrs = []; | ||
| if (c.shapeId !== void 0) attrs.push(`spid="${c.shapeId}"`); | ||
| if (c.name) attrs.push(`name="${c.name}"`); | ||
| if (c.showAsIcon) attrs.push("showAsIcon=\"1\""); | ||
| if (c.rId) attrs.push(`r:id="${c.rId}"`); | ||
| if (c.imageWidth !== void 0) attrs.push(`imgW="${c.imageWidth}"`); | ||
| if (c.imageHeight !== void 0) attrs.push(`imgH="${c.imageHeight}"`); | ||
| return `<p:control ${attrs.join(" ")}/>`; | ||
| }).join(""); | ||
| parts.push(`<p:controls>${ctrlItems}</p:controls>`); | ||
| } | ||
| if (opts.headerFooter) { | ||
| const hf = opts.headerFooter; | ||
| const hfChildren = []; | ||
| if (hf.slideNumber) hfChildren.push("<p:sldNum/>"); | ||
| if (hf.dateTime) hfChildren.push("<p:dt/>"); | ||
| if (hf.footer) hfChildren.push("<p:ftr/>"); | ||
| if (hf.header) hfChildren.push("<p:hdr/>"); | ||
| if (hfChildren.length > 0) parts.push(`<p:hf>${hfChildren.join("")}</p:hf>`); | ||
| } | ||
| parts.push("</p:cSld>"); | ||
| parts.push("<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>"); | ||
| if (opts.transition) parts.push(stringifyTransition(opts.transition)); | ||
| parts.push("</p:sld>"); | ||
| return parts.join(""); | ||
| }, | ||
| parse(el, _ctx) { | ||
| const result = {}; | ||
| if (el.attributes) { | ||
| if (el.attributes["showMasterSp"] !== void 0) result.showMasterSp = el.attributes["showMasterSp"] !== "0"; | ||
| if (el.attributes["showMasterPhAnim"] !== void 0) result.showMasterPhAnim = el.attributes["showMasterPhAnim"] !== "0"; | ||
| if (el.attributes["show"] === "0") result.hidden = true; | ||
| } | ||
| const cSld = findChild(el, "p:cSld"); | ||
| if (cSld) { | ||
| const bg = findChild(cSld, "p:bg"); | ||
| if (bg) result.background = readBackground(bg); | ||
| const spTree = findChild(cSld, "p:spTree"); | ||
| if (spTree) { | ||
| const children = []; | ||
| if (spTree.elements) for (const child of spTree.elements) { | ||
| if (child.name === "p:nvGrpSpPr" || child.name === "p:grpSpPr") continue; | ||
| const parsed = parseChild(child, _ctx); | ||
| if (parsed !== void 0) children.push(parsed); | ||
| } | ||
| if (children.length > 0) result.children = children; | ||
| } | ||
| const hf = findChild(cSld, "p:hf"); | ||
| if (hf) { | ||
| const hfOpts = {}; | ||
| if (findChild(hf, "p:sldNum")) hfOpts.slideNumber = true; | ||
| if (findChild(hf, "p:dt")) hfOpts.dateTime = true; | ||
| if (findChild(hf, "p:ftr")) hfOpts.footer = true; | ||
| if (findChild(hf, "p:hdr")) hfOpts.header = true; | ||
| if (hfOpts.slideNumber || hfOpts.dateTime || hfOpts.footer || hfOpts.header) result.headerFooter = hfOpts; | ||
| } | ||
| } | ||
| const transition = findChild(el, "p:transition"); | ||
| if (transition) result.transition = readTransition(transition); | ||
| const timing = findChild(el, "p:timing"); | ||
| if (timing) { | ||
| const timingOpts = timingDesc.parse(timing, _ctx); | ||
| if (timingOpts.entries && timingOpts.entries.length > 0) { | ||
| const animations = []; | ||
| for (const entry of timingOpts.entries) animations.push({ | ||
| shapeId: entry.spid, | ||
| options: entry.options | ||
| }); | ||
| result.animations = animations; | ||
| } | ||
| } | ||
| const custDataLst = findChild(el, "p:custDataLst"); | ||
| if (custDataLst) { | ||
| const items = []; | ||
| for (const cd of custDataLst.elements ?? []) if (cd.name === "p:custData") { | ||
| const rId = attr(cd, "r:id"); | ||
| if (rId) items.push({ rId }); | ||
| } | ||
| if (items.length > 0) result.customerData = items; | ||
| } | ||
| const controls = findChild(el, "p:controls"); | ||
| if (controls) { | ||
| const items = []; | ||
| for (const ctrl of controls.elements ?? []) { | ||
| if (ctrl.name !== "p:control") continue; | ||
| const item = {}; | ||
| const spid = attrNum(ctrl, "spid"); | ||
| if (spid !== void 0) item.shapeId = spid; | ||
| const name = attr(ctrl, "name"); | ||
| if (name) item.name = name; | ||
| if (attr(ctrl, "showAsIcon") === "1") item.showAsIcon = true; | ||
| const rId = attr(ctrl, "r:id"); | ||
| if (rId) item.rId = rId; | ||
| const imgW = attrNum(ctrl, "imgW"); | ||
| if (imgW !== void 0) item.imageWidth = imgW; | ||
| const imgH = attrNum(ctrl, "imgH"); | ||
| if (imgH !== void 0) item.imageHeight = imgH; | ||
| items.push(item); | ||
| } | ||
| if (items.length > 0) result.controls = items; | ||
| } | ||
| return result; | ||
| } | ||
| }; | ||
| function stringifySlideChild(child, ctx) { | ||
| if ("shape" in child) return shapeDesc.stringify(child.shape, ctx); | ||
| if ("picture" in child) return pictureDesc.stringify(child.picture, ctx); | ||
| if ("contentPart" in child) return `<p:contentPart r:id="${child.contentPart.rId}"/>`; | ||
| } | ||
| function stringifyBackground(opts) { | ||
| if (opts.color) return `<p:bg><p:bgPr${opts.transparency !== void 0 ? `><a:srgbClr val="${opts.color.replace("#", "")}"><a:alpha val="${Math.round((100 - opts.transparency) * 1e3)}"/></a:srgbClr></p:bgPr` : `><a:solidFill><a:srgbClr val="${opts.color.replace("#", "")}"/></a:solidFill></p:bgPr`}></p:bg>`; | ||
| return "<p:bg/>"; | ||
| } | ||
| function readBackground(bg) { | ||
| const result = {}; | ||
| const bgPr = findChild(bg, "p:bgPr"); | ||
| if (bgPr) { | ||
| const solidFill = findChild(bgPr, "a:solidFill"); | ||
| if (solidFill) { | ||
| const srgbClr = findChild(solidFill, "a:srgbClr"); | ||
| if (srgbClr?.attributes?.["val"]) { | ||
| result.color = String(srgbClr.attributes["val"]); | ||
| const alpha = findChild(srgbClr, "a:alpha"); | ||
| if (alpha?.attributes?.["val"]) result.transparency = 100 - Number(alpha.attributes["val"]) / 1e3; | ||
| } | ||
| } | ||
| } | ||
| return result; | ||
| } | ||
| function stringifyTransition(opts) { | ||
| const parts = []; | ||
| if (opts.type === "none") return ""; | ||
| if (opts.type === "fade") parts.push("<p:fade/>"); | ||
| else if (opts.type === "push") parts.push("<p:push dir=\"l\"/>"); | ||
| else if (opts.type === "wipe") parts.push("<p:wipe dir=\"d\"/>"); | ||
| else if (opts.type === "split") parts.push("<p:split orient=\"horz\"/>"); | ||
| else if (opts.type === "cover") parts.push("<p:cover dir=\"l\"/>"); | ||
| else if (opts.type === "pull") parts.push("<p:pull dir=\"l\"/>"); | ||
| else if (opts.type === "dissolve") parts.push("<p:dissolve/>"); | ||
| else if (opts.type === "wheel") parts.push("<p:wheel spokes=\"4\"/>"); | ||
| else if (opts.type === "random") parts.push("<p:random/>"); | ||
| const attrs = []; | ||
| if (opts.speed) attrs.push(`spd="${opts.speed}"`); | ||
| if (opts.advanceOnClick !== void 0) attrs.push(`advClick="${opts.advanceOnClick ? 1 : 0}"`); | ||
| if (opts.advanceAfterMs !== void 0) attrs.push(`advTm="${opts.advanceAfterMs}"`); | ||
| const attrStr = attrs.length ? " " + attrs.join(" ") : ""; | ||
| const body = parts.join(""); | ||
| return body ? `<p:transition${attrStr}>${body}</p:transition>` : `<p:transition${attrStr}/>`; | ||
| } | ||
| function readTransition(el) { | ||
| const result = {}; | ||
| if (el.attributes) { | ||
| if (el.attributes["spd"] !== void 0) result.speed = el.attributes["spd"]; | ||
| if (el.attributes["advClick"] !== void 0) result.advanceOnClick = el.attributes["advClick"] === "1"; | ||
| if (el.attributes["advTm"] !== void 0) result.advanceAfterMs = Number(el.attributes["advTm"]); | ||
| } | ||
| if (findChild(el, "p:fade")) result.type = "fade"; | ||
| else if (findChild(el, "p:push")) result.type = "push"; | ||
| else if (findChild(el, "p:wipe")) result.type = "wipe"; | ||
| else if (findChild(el, "p:split")) result.type = "split"; | ||
| else if (findChild(el, "p:cover")) result.type = "cover"; | ||
| else if (findChild(el, "p:pull")) result.type = "pull"; | ||
| else if (findChild(el, "p:dissolve")) result.type = "dissolve"; | ||
| else if (findChild(el, "p:wheel")) result.type = "wheel"; | ||
| else if (findChild(el, "p:random")) result.type = "random"; | ||
| return result; | ||
| } | ||
| //#endregion | ||
| //#region src/parse.ts | ||
| function resolveRelsPath(target) { | ||
| if (target.startsWith("/")) return target.slice(1); | ||
| if (target.startsWith("../")) return target.replace("../", "ppt/"); | ||
| return `ppt/${target}`; | ||
| } | ||
| function sortByNumber(paths) { | ||
| return paths.sort((a, b) => { | ||
| return parseInt(a.match(/(\d+)/)?.[1] ?? "0", 10) - parseInt(b.match(/(\d+)/)?.[1] ?? "0", 10); | ||
| }); | ||
| } | ||
| function xmlKeys(keys) { | ||
| return keys.filter((k) => k.endsWith(".xml")); | ||
| } | ||
| function parseRootRels(doc) { | ||
| const relsEl = doc.get("_rels/.rels"); | ||
| if (!relsEl) return {}; | ||
| let coreProps; | ||
| let appProps; | ||
| let customProps; | ||
| for (const child of relsEl.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const type = attr(child, "Type") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!target) continue; | ||
| const path = target.startsWith("/") ? target.slice(1) : target; | ||
| if (type.includes("/core-properties")) coreProps = path; | ||
| else if (type.includes("/extended-properties")) appProps = path; | ||
| else if (type.includes("/custom-properties")) customProps = path; | ||
| } | ||
| return { | ||
| coreProps, | ||
| appProps, | ||
| customProps | ||
| }; | ||
| } | ||
| function parseSlideRels(doc, slidePaths, refs) { | ||
| const commentsSet = new Set(refs.comments); | ||
| const chartsSet = new Set(refs.charts); | ||
| const diagramDataSet = new Set(refs.diagramData); | ||
| const mediaSet = new Set(refs.media); | ||
| for (const slidePath of slidePaths) { | ||
| const parts = slidePath.split("/"); | ||
| const fileName = parts.pop(); | ||
| const relsPath = `${parts.join("/")}/_rels/${fileName}.rels`; | ||
| const relsEl = doc.get(relsPath); | ||
| if (!relsEl) continue; | ||
| for (const child of relsEl.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const type = attr(child, "Type") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!target) continue; | ||
| const path = resolveRelsPath(target); | ||
| if (type.includes("/comments") && !type.includes("commentAuthors")) commentsSet.add(path); | ||
| else if (type.includes("/chart")) chartsSet.add(path); | ||
| else if (type.includes("/diagramData")) diagramDataSet.add(path); | ||
| else if (type.includes("/image") || type.includes("/video") || type.includes("/media")) mediaSet.add(path); | ||
| } | ||
| } | ||
| refs.comments = [...commentsSet]; | ||
| refs.charts = [...chartsSet]; | ||
| refs.diagramData = [...diagramDataSet]; | ||
| refs.media = [...mediaSet]; | ||
| } | ||
| function parsePptx(data) { | ||
| const doc = parseArchive(toUint8Array(data)); | ||
| const presentation = doc.get("ppt/presentation.xml"); | ||
| const relsXml = doc.get("ppt/_rels/presentation.xml.rels"); | ||
| const slides = []; | ||
| const slideMasters = []; | ||
| const themes = []; | ||
| const notesMasters = []; | ||
| let presProps; | ||
| let viewProps; | ||
| let tableStyles; | ||
| let commentAuthors; | ||
| if (relsXml) for (const child of relsXml.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const type = attr(child, "Type") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!target) continue; | ||
| const path = resolveRelsPath(target); | ||
| if (type.includes("/slideMaster")) slideMasters.push(path); | ||
| else if (type.includes("/slide") && !type.includes("slideLayout") && !type.includes("slideMaster")) slides.push(path); | ||
| else if (type.includes("/theme")) themes.push(path); | ||
| else if (type.includes("/notesMaster")) notesMasters.push(path); | ||
| else if (type.includes("/presProps")) presProps = path; | ||
| else if (type.includes("/viewProps")) viewProps = path; | ||
| else if (type.includes("/tableStyles")) tableStyles = path; | ||
| else if (type.includes("/commentAuthors")) commentAuthors = path; | ||
| } | ||
| sortByNumber(slides); | ||
| sortByNumber(slideMasters); | ||
| sortByNumber(themes); | ||
| sortByNumber(notesMasters); | ||
| const slideLayouts = sortByNumber(xmlKeys(doc.keys("ppt/slideLayouts/"))); | ||
| const notesSlides = sortByNumber(xmlKeys(doc.keys("ppt/notesSlides/"))); | ||
| const partRefs = { | ||
| themes, | ||
| notesMasters, | ||
| commentAuthors, | ||
| comments: [], | ||
| charts: [], | ||
| diagramData: [], | ||
| media: doc.keys("ppt/media/") | ||
| }; | ||
| parseSlideRels(doc, slides, partRefs); | ||
| sortByNumber(partRefs.comments); | ||
| sortByNumber(partRefs.charts); | ||
| sortByNumber(partRefs.diagramData); | ||
| const { coreProps, appProps, customProps } = parseRootRels(doc); | ||
| return { | ||
| doc, | ||
| presentation, | ||
| slides, | ||
| slideMasters, | ||
| slideLayouts, | ||
| notesSlides, | ||
| partRefs, | ||
| presProps, | ||
| viewProps, | ||
| tableStyles, | ||
| coreProps, | ||
| appProps, | ||
| customProps | ||
| }; | ||
| } | ||
| /** | ||
| * Parse a single slide's relationship file into a Map<rId, path>. | ||
| */ | ||
| function parseSlideRelMap(doc, slidePath) { | ||
| const rels = /* @__PURE__ */ new Map(); | ||
| const parts = slidePath.split("/"); | ||
| const fileName = parts.pop(); | ||
| const relsPath = `${parts.join("/")}/_rels/${fileName}.rels`; | ||
| const relsEl = doc.get(relsPath); | ||
| if (!relsEl) return rels; | ||
| for (const child of relsEl.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const id = attr(child, "Id") ?? ""; | ||
| const target = attr(child, "Target") ?? ""; | ||
| if (!id || !target) continue; | ||
| if (attr(child, "TargetMode") === "External") rels.set(id, target); | ||
| else rels.set(id, resolveRelsPath(target)); | ||
| } | ||
| return rels; | ||
| } | ||
| /** | ||
| * Build a map from each path to the rel target matching a predicate. | ||
| */ | ||
| function resolveRelTargets(doc, paths, predicate) { | ||
| const map = /* @__PURE__ */ new Map(); | ||
| for (const path of paths) for (const target of parseSlideRelMap(doc, path).values()) if (predicate(target)) map.set(path, target); | ||
| return map; | ||
| } | ||
| /** | ||
| * Parse p14:sectionLst from presentation.xml and map each slide path to its | ||
| * section name. Bridges p14:sldId (by slide id) -> p:sldIdLst (slide id -> | ||
| * rId) -> presentation rels (rId -> path). | ||
| */ | ||
| function parseSlideSections(presentation, doc) { | ||
| const pathToSection = /* @__PURE__ */ new Map(); | ||
| if (!presentation) return pathToSection; | ||
| const extLst = findChild(presentation, "p:extLst"); | ||
| if (!extLst) return pathToSection; | ||
| let sectionLst; | ||
| for (const ext of extLst.elements ?? []) { | ||
| if (ext.name !== "p:ext") continue; | ||
| if (attr(ext, "uri") !== "{521415D9-36F7-43E2-AB2F-B90AF26B5E84}") continue; | ||
| sectionLst = findChild(ext, "p14:sectionLst"); | ||
| if (sectionLst) break; | ||
| } | ||
| if (!sectionLst) return pathToSection; | ||
| const sectionBySlideId = /* @__PURE__ */ new Map(); | ||
| for (const section of sectionLst.elements ?? []) { | ||
| if (section.name !== "p14:section") continue; | ||
| const name = attr(section, "name"); | ||
| if (!name) continue; | ||
| const sldIdLst = findChild(section, "p14:sldIdLst"); | ||
| for (const sldId of sldIdLst?.elements ?? []) { | ||
| if (sldId.name !== "p14:sldId") continue; | ||
| const id = attrNum(sldId, "id"); | ||
| if (id !== void 0) sectionBySlideId.set(id, name); | ||
| } | ||
| } | ||
| if (sectionBySlideId.size === 0) return pathToSection; | ||
| const sldIdLst = findChild(presentation, "p:sldIdLst"); | ||
| const rIdBySlideId = /* @__PURE__ */ new Map(); | ||
| for (const sldId of sldIdLst?.elements ?? []) { | ||
| if (sldId.name !== "p:sldId") continue; | ||
| const id = attrNum(sldId, "id"); | ||
| const rId = attr(sldId, "r:id"); | ||
| if (id !== void 0 && rId) rIdBySlideId.set(id, rId); | ||
| } | ||
| const relsEl = doc.get("ppt/_rels/presentation.xml.rels"); | ||
| const pathByRId = /* @__PURE__ */ new Map(); | ||
| for (const child of relsEl?.elements ?? []) { | ||
| if (child.name !== "Relationship") continue; | ||
| const id = attr(child, "Id"); | ||
| const target = attr(child, "Target"); | ||
| if (id && target) pathByRId.set(id, resolveRelsPath(target)); | ||
| } | ||
| for (const [slideId, name] of sectionBySlideId) { | ||
| const rId = rIdBySlideId.get(slideId); | ||
| if (!rId) continue; | ||
| const path = pathByRId.get(rId); | ||
| if (path) pathToSection.set(path, name); | ||
| } | ||
| return pathToSection; | ||
| } | ||
| /** | ||
| * Parse a .pptx file and convert it into PresentationOptions. | ||
| * | ||
| * This is the main public API for parsing PPTX files. | ||
| * The returned options can be passed directly to `new Presentation(parsed)` | ||
| * to recreate the presentation. | ||
| * | ||
| * @param data - Raw bytes of a .pptx file | ||
| * @returns Parsed presentation options | ||
| */ | ||
| function parsePresentation(data) { | ||
| const pptx = parsePptx(data); | ||
| const opts = {}; | ||
| const sectionBySlidePath = parseSlideSections(pptx.presentation, pptx.doc); | ||
| if (pptx.presentation) { | ||
| const sldSz = findChild(pptx.presentation, "p:sldSz"); | ||
| if (sldSz) { | ||
| const cx = attrNum(sldSz, "cx"); | ||
| const cy = attrNum(sldSz, "cy"); | ||
| if (cx === 12192e3 && cy === 6858e3) opts.size = "16:9"; | ||
| else if (cx === 9144e3 && cy === 6858e3) opts.size = "4:3"; | ||
| else if (cx && cy) opts.size = { | ||
| width: cx, | ||
| height: cy | ||
| }; | ||
| } | ||
| } | ||
| if (pptx.coreProps) { | ||
| const corePropsEl = pptx.doc.get(pptx.coreProps); | ||
| if (corePropsEl) { | ||
| const cp = parseCorePropsElement(corePropsEl); | ||
| if (cp.title) opts.title = cp.title; | ||
| if (cp.subject) opts.subject = cp.subject; | ||
| if (cp.creator) opts.creator = cp.creator; | ||
| if (cp.keywords) opts.keywords = cp.keywords; | ||
| if (cp.description) opts.description = cp.description; | ||
| if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy; | ||
| if (cp.revision !== void 0) opts.revision = cp.revision; | ||
| if (cp.lastPrinted) opts.lastPrinted = cp.lastPrinted; | ||
| if (cp.created) opts.created = cp.created; | ||
| if (cp.modified) opts.modified = cp.modified; | ||
| } | ||
| } | ||
| if (pptx.appProps) { | ||
| const appPropsEl = pptx.doc.get(pptx.appProps); | ||
| if (appPropsEl) { | ||
| const ap = appPropertiesDesc.parse(appPropsEl, {}); | ||
| if (ap && Object.keys(ap).length > 0) opts.appProperties = ap; | ||
| } | ||
| } | ||
| if (pptx.customProps) { | ||
| const customPropsEl = pptx.doc.get(pptx.customProps); | ||
| if (customPropsEl) { | ||
| const cp = customPropertiesDesc.parse(customPropsEl, {}); | ||
| if (cp.properties?.length) opts.customProperties = cp.properties; | ||
| } | ||
| } | ||
| if (pptx.presProps) { | ||
| const presPropsEl = pptx.doc.get(pptx.presProps); | ||
| if (presPropsEl) { | ||
| const presPropsOpts = presPropsDesc.parse(presPropsEl, {}); | ||
| if (presPropsOpts.show) opts.show = presPropsOpts.show; | ||
| } | ||
| } | ||
| if (pptx.viewProps) { | ||
| const viewPropsEl = pptx.doc.get(pptx.viewProps); | ||
| if (viewPropsEl) { | ||
| const viewOpts = viewPropsDesc.parse(viewPropsEl, {}); | ||
| if (viewOpts.lastView || viewOpts.showComments !== void 0 || viewOpts.gridSpacing) opts.view = viewOpts; | ||
| } | ||
| } | ||
| if (pptx.tableStyles) { | ||
| const tableStylesEl = pptx.doc.get(pptx.tableStyles); | ||
| if (tableStylesEl) { | ||
| const tableStylesResult = tableStylesDesc.parse(tableStylesEl, {}); | ||
| if (tableStylesResult.opts) opts.tableStyles = tableStylesResult.opts; | ||
| } | ||
| } | ||
| const masterThemePaths = resolveRelTargets(pptx.doc, pptx.slideMasters, (t) => t.includes("/theme")); | ||
| const layoutMasterPaths = resolveRelTargets(pptx.doc, pptx.slideLayouts, (t) => t.includes("/slideMaster")); | ||
| const slideLayoutPaths = resolveRelTargets(pptx.doc, pptx.slides, (t) => t.includes("/slideLayout")); | ||
| const masterCount = pptx.slideMasters.length; | ||
| const masterDefs = []; | ||
| const masterReadCtx = new PptxReadContext(new ParseContext(pptx, /* @__PURE__ */ new Map())); | ||
| for (let mi = 0; mi < masterCount; mi++) { | ||
| const masterPath = pptx.slideMasters[mi]; | ||
| const masterEl = pptx.doc.get(masterPath); | ||
| if (!masterEl) continue; | ||
| const themePath = masterThemePaths.get(masterPath); | ||
| const themeEl = themePath ? pptx.doc.get(themePath) : void 0; | ||
| const themeOptions = themeEl ? themeDesc.parse(themeEl, masterReadCtx) : void 0; | ||
| const cSld = findChild(masterEl, "p:cSld"); | ||
| const bg = cSld ? findChild(cSld, "p:bg") : void 0; | ||
| const masterBackground = bg ? backgroundDesc.parse(bg, masterReadCtx) : void 0; | ||
| const hasBackground = masterBackground && Object.keys(masterBackground).length > 0; | ||
| const spTree = cSld ? findChild(cSld, "p:spTree") : void 0; | ||
| const masterChildren = []; | ||
| if (spTree) for (const child of spTree.elements ?? []) { | ||
| if (child.name === "p:nvGrpSpPr" || child.name === "p:grpSpPr") continue; | ||
| if (child.name === "p:sp") { | ||
| const nvSpPr = findChild(child, "p:nvSpPr"); | ||
| const nvPr = nvSpPr ? findChild(nvSpPr, "p:nvPr") : void 0; | ||
| if (nvPr && findChild(nvPr, "p:ph")) continue; | ||
| } | ||
| const parsed = parseChild(child, masterReadCtx); | ||
| if (parsed !== void 0) masterChildren.push(parsed); | ||
| } | ||
| const masterLayouts = []; | ||
| for (const layoutPath of pptx.slideLayouts) { | ||
| if (layoutMasterPaths.get(layoutPath) !== masterPath) continue; | ||
| const layoutEl = pptx.doc.get(layoutPath); | ||
| if (layoutEl) { | ||
| const layoutOpts = slideLayoutDesc.parse(layoutEl, masterReadCtx); | ||
| const layoutDef = { type: layoutOpts.type ?? "blank" }; | ||
| if (layoutOpts.placeholders) layoutDef.placeholders = layoutOpts.placeholders; | ||
| masterLayouts.push(layoutDef); | ||
| } | ||
| } | ||
| const masterName = themeOptions?.name ?? `master${mi + 1}`; | ||
| const masterDef = {}; | ||
| masterDef.name = masterName; | ||
| if (themeOptions) masterDef.theme = themeOptions; | ||
| if (hasBackground) masterDef.background = masterBackground; | ||
| if (masterChildren.length > 0) masterDef.children = masterChildren; | ||
| if (masterLayouts.length > 0) masterDef.layouts = masterLayouts; | ||
| masterDefs.push(masterDef); | ||
| } | ||
| if (masterCount > 1) opts.masters = masterDefs; | ||
| for (const nmPath of pptx.partRefs.notesMasters) { | ||
| const nmEl = pptx.doc.get(nmPath); | ||
| if (nmEl) { | ||
| const nmOpts = notesMasterDesc.parse(nmEl, masterReadCtx); | ||
| if (nmOpts.options) { | ||
| opts.includeNotesMaster = true; | ||
| opts.notesMasterOptions = nmOpts.options; | ||
| } | ||
| } | ||
| } | ||
| const commentAuthors = /* @__PURE__ */ new Map(); | ||
| if (pptx.partRefs.commentAuthors) { | ||
| const authorsEl = pptx.doc.get(pptx.partRefs.commentAuthors); | ||
| if (authorsEl) { | ||
| const authors = commentAuthorsDesc.parse(authorsEl, masterReadCtx); | ||
| for (const a of authors) commentAuthors.set(a.id, { | ||
| name: a.name, | ||
| initials: a.initials | ||
| }); | ||
| } | ||
| } | ||
| const result = []; | ||
| for (let si = 0; si < pptx.slides.length; si++) { | ||
| const slidePath = pptx.slides[si]; | ||
| const slideEl = pptx.doc.get(slidePath); | ||
| if (!slideEl) continue; | ||
| const slideRels = parseSlideRelMap(pptx.doc, slidePath); | ||
| const readCtx = new PptxReadContext(new ParseContext(pptx, slideRels)); | ||
| const slideOpts = slideDesc.parse(slideEl, readCtx); | ||
| const layoutPath = slideLayoutPaths.get(slidePath); | ||
| if (layoutPath) { | ||
| const layoutEl = pptx.doc.get(layoutPath); | ||
| if (layoutEl) slideOpts.layout = slideLayoutDesc.parse(layoutEl, readCtx).type ?? "blank"; | ||
| const resolvedMasterPath = layoutMasterPaths.get(layoutPath); | ||
| if (resolvedMasterPath) { | ||
| const masterIdx = pptx.slideMasters.indexOf(resolvedMasterPath); | ||
| if (masterIdx >= 0 && masterDefs[masterIdx]) slideOpts.master = masterDefs[masterIdx].name; | ||
| } | ||
| } | ||
| for (const [, relPath] of slideRels) { | ||
| if (!relPath.includes("/comments/")) continue; | ||
| const commentsEl = pptx.doc.get(relPath); | ||
| if (!commentsEl) continue; | ||
| const parsedComments = slideCommentsDesc.parse(commentsEl, readCtx); | ||
| if (parsedComments.length > 0) { | ||
| const comments = []; | ||
| for (const cm of parsedComments) { | ||
| const entry = { | ||
| x: cm.x, | ||
| y: cm.y | ||
| }; | ||
| if (cm.text) entry.text = cm.text; | ||
| if (cm.date) entry.date = cm.date; | ||
| if (cm.modified !== void 0) entry.modified = cm.modified; | ||
| const author = commentAuthors.get(cm.authorId); | ||
| if (author) { | ||
| entry.author = author.name; | ||
| if (author.initials) entry.initials = author.initials; | ||
| } | ||
| comments.push(entry); | ||
| } | ||
| if (comments.length > 0) slideOpts.comments = comments; | ||
| } | ||
| break; | ||
| } | ||
| for (const [, relPath] of slideRels) { | ||
| if (!relPath.includes("/notesSlides/")) continue; | ||
| const notesEl = pptx.doc.get(relPath); | ||
| if (!notesEl) continue; | ||
| const notesData = notesSlideDesc.parse(notesEl, readCtx); | ||
| if (notesData.text) slideOpts.notes = notesData.text; | ||
| break; | ||
| } | ||
| const sectionName = sectionBySlidePath.get(slidePath); | ||
| if (sectionName) slideOpts.section = sectionName; | ||
| result.push(slideOpts); | ||
| } | ||
| opts.slides = result; | ||
| return opts; | ||
| } | ||
| //#endregion | ||
| export { slideDesc as i, parsePptx as n, parsePresentation as r, parseArchive as t }; | ||
| //# sourceMappingURL=parse-Cn_n-WuO.mjs.map |
| {"version":3,"file":"parse-Cn_n-WuO.mjs","names":[],"sources":["../src/parts/descriptors/slide.ts","../src/parse.ts"],"sourcesContent":["/**\n * Slide (p:sld) descriptor for PPTX.\n *\n * @module\n */\n\nimport type { CustomDescriptor, WriteContext } from \"@office-open/core/descriptor\";\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\nimport type { Element as XmlElement } from \"@office-open/xml\";\nimport type { SlideChild as LegacySlideChild } from \"@parts/slide/slide-child\";\nimport { SP_TREE_HEADER } from \"@shared/constants\";\n\nimport { timingDesc } from \"./animation\";\nimport { parseChild } from \"./bridge\";\nimport { shapeDesc, pictureDesc } from \"./shape\";\nimport type {\n ShapeDescriptorOptions,\n PictureDescriptorOptions,\n TextBodyDescriptorOptions,\n} from \"./shape\";\n\n// ── Types ──\n\nexport interface HeaderFooterDescriptorOptions {\n slideNumber?: boolean;\n dateTime?: boolean;\n footer?: boolean;\n header?: boolean;\n}\n\nexport interface AnimationDescriptorOptions {\n shapeId: number;\n options: unknown;\n}\n\nexport interface SlideDescriptorOptions {\n children?: SlideChild[];\n background?: BackgroundDescriptorOptions;\n transition?: TransitionDescriptorOptions;\n showMasterSp?: boolean;\n showMasterPhAnim?: boolean;\n controls?: ControlDescriptorOptions[];\n customerData?: { rId: string }[];\n headerFooter?: HeaderFooterDescriptorOptions;\n animations?: AnimationDescriptorOptions[];\n /** Hidden slide — excluded from slideshow (emits p:sld/@show=\"0\"). */\n hidden?: boolean;\n}\n\n/** Discriminated union for slide children (JSON-friendly). */\nexport type SlideChild =\n | { shape: ShapeDescriptorOptions }\n | { picture: PictureDescriptorOptions }\n | { text: TextBodyDescriptorOptions }\n | { contentPart: { rId: string } };\n\nexport interface BackgroundDescriptorOptions {\n color?: string;\n transparency?: number;\n}\n\nexport interface TransitionDescriptorOptions {\n type?:\n | \"none\"\n | \"fade\"\n | \"push\"\n | \"wipe\"\n | \"split\"\n | \"cover\"\n | \"pull\"\n | \"dissolve\"\n | \"wheel\"\n | \"random\";\n speed?: \"slow\" | \"medium\" | \"fast\";\n advanceOnClick?: boolean;\n advanceAfterMs?: number;\n}\n\nexport interface ControlDescriptorOptions {\n shapeId?: number;\n name?: string;\n showAsIcon?: boolean;\n rId?: string;\n imageWidth?: number;\n imageHeight?: number;\n}\n\n// ── Slide (p:sld) descriptor ──\n\nexport const slideDesc: CustomDescriptor<SlideDescriptorOptions> = {\n kind: \"custom\",\n\n stringify(opts, ctx) {\n const parts: string[] = [];\n\n // Opening tag with namespace declarations\n const sldAttrs: string[] = [];\n if (opts.showMasterSp === false) sldAttrs.push(' showMasterSp=\"0\"');\n if (opts.showMasterPhAnim === false) sldAttrs.push(' showMasterPhAnim=\"0\"');\n if (opts.hidden) sldAttrs.push(' show=\"0\"');\n parts.push(\n `<p:sld xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:p=\"http://schemas.openxmlformats.org/presentationml/2006/main\"${sldAttrs.join(\"\")}>`,\n );\n\n // p:cSld — common slide data\n parts.push(\"<p:cSld>\");\n\n if (opts.background) {\n parts.push(stringifyBackground(opts.background));\n }\n\n // p:spTree — shape tree\n parts.push(\"<p:spTree>\");\n parts.push(SP_TREE_HEADER);\n\n if (opts.children) {\n for (const child of opts.children) {\n const xml = stringifySlideChild(child, ctx);\n if (xml) parts.push(xml);\n }\n }\n\n parts.push(\"</p:spTree>\");\n\n // custDataLst\n if (opts.customerData && opts.customerData.length > 0) {\n const cdItems = opts.customerData.map((d) => `<p:custData r:id=\"${d.rId}\"/>`).join(\"\");\n parts.push(`<p:custDataLst>${cdItems}</p:custDataLst>`);\n }\n\n // controls\n if (opts.controls && opts.controls.length > 0) {\n const ctrlItems = opts.controls\n .map((c) => {\n const attrs: string[] = [];\n if (c.shapeId !== undefined) attrs.push(`spid=\"${c.shapeId}\"`);\n if (c.name) attrs.push(`name=\"${c.name}\"`);\n if (c.showAsIcon) attrs.push('showAsIcon=\"1\"');\n if (c.rId) attrs.push(`r:id=\"${c.rId}\"`);\n if (c.imageWidth !== undefined) attrs.push(`imgW=\"${c.imageWidth}\"`);\n if (c.imageHeight !== undefined) attrs.push(`imgH=\"${c.imageHeight}\"`);\n return `<p:control ${attrs.join(\" \")}/>`;\n })\n .join(\"\");\n parts.push(`<p:controls>${ctrlItems}</p:controls>`);\n }\n\n // Header/Footer (p:hf)\n if (opts.headerFooter) {\n const hf = opts.headerFooter;\n const hfChildren: string[] = [];\n if (hf.slideNumber) hfChildren.push(\"<p:sldNum/>\");\n if (hf.dateTime) hfChildren.push(\"<p:dt/>\");\n if (hf.footer) hfChildren.push(\"<p:ftr/>\");\n if (hf.header) hfChildren.push(\"<p:hdr/>\");\n if (hfChildren.length > 0) parts.push(`<p:hf>${hfChildren.join(\"\")}</p:hf>`);\n }\n\n parts.push(\"</p:cSld>\");\n\n // p:clrMapOvr\n parts.push(\"<p:clrMapOvr><a:masterClrMapping/></p:clrMapOvr>\");\n\n // p:transition (optional)\n if (opts.transition) {\n parts.push(stringifyTransition(opts.transition));\n }\n\n parts.push(\"</p:sld>\");\n return parts.join(\"\");\n },\n\n parse(el, _ctx) {\n const result: Record<string, unknown> = {};\n\n // Root attributes\n if (el.attributes) {\n if (el.attributes[\"showMasterSp\"] !== undefined)\n result.showMasterSp = el.attributes[\"showMasterSp\"] !== \"0\";\n if (el.attributes[\"showMasterPhAnim\"] !== undefined)\n result.showMasterPhAnim = el.attributes[\"showMasterPhAnim\"] !== \"0\";\n if (el.attributes[\"show\"] === \"0\") result.hidden = true;\n }\n\n // p:cSld\n const cSld = findChild(el, \"p:cSld\");\n if (cSld) {\n // Background\n const bg = findChild(cSld, \"p:bg\");\n if (bg) result.background = readBackground(bg);\n\n // Shape tree\n const spTree = findChild(cSld, \"p:spTree\");\n if (spTree) {\n const children: LegacySlideChild[] = [];\n if (spTree.elements) {\n for (const child of spTree.elements) {\n // Skip tree container structure\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n const parsed = parseChild(child, _ctx);\n if (parsed !== undefined) children.push(parsed);\n }\n }\n if (children.length > 0) result.children = children;\n }\n\n // Header/Footer (p:hf)\n const hf = findChild(cSld, \"p:hf\");\n if (hf) {\n const hfOpts: HeaderFooterDescriptorOptions = {};\n if (findChild(hf, \"p:sldNum\")) hfOpts.slideNumber = true;\n if (findChild(hf, \"p:dt\")) hfOpts.dateTime = true;\n if (findChild(hf, \"p:ftr\")) hfOpts.footer = true;\n if (findChild(hf, \"p:hdr\")) hfOpts.header = true;\n if (hfOpts.slideNumber || hfOpts.dateTime || hfOpts.footer || hfOpts.header)\n result.headerFooter = hfOpts;\n }\n }\n\n // p:transition\n const transition = findChild(el, \"p:transition\");\n if (transition) result.transition = readTransition(transition);\n\n // p:timing → animations\n const timing = findChild(el, \"p:timing\");\n if (timing) {\n const timingOpts = timingDesc.parse(timing, _ctx);\n if (timingOpts.entries && timingOpts.entries.length > 0) {\n const animations: AnimationDescriptorOptions[] = [];\n for (const entry of timingOpts.entries) {\n animations.push({ shapeId: entry.spid, options: entry.options });\n }\n result.animations = animations;\n }\n }\n\n // custDataLst\n const custDataLst = findChild(el, \"p:custDataLst\");\n if (custDataLst) {\n const items: { rId: string }[] = [];\n for (const cd of custDataLst.elements ?? []) {\n if (cd.name === \"p:custData\") {\n const rId = attr(cd, \"r:id\");\n if (rId) items.push({ rId });\n }\n }\n if (items.length > 0) result.customerData = items;\n }\n\n // controls\n const controls = findChild(el, \"p:controls\");\n if (controls) {\n const items: ControlDescriptorOptions[] = [];\n for (const ctrl of controls.elements ?? []) {\n if (ctrl.name !== \"p:control\") continue;\n const item: ControlDescriptorOptions = {};\n const spid = attrNum(ctrl, \"spid\");\n if (spid !== undefined) item.shapeId = spid;\n const name = attr(ctrl, \"name\");\n if (name) item.name = name;\n if (attr(ctrl, \"showAsIcon\") === \"1\") item.showAsIcon = true;\n const rId = attr(ctrl, \"r:id\");\n if (rId) item.rId = rId;\n const imgW = attrNum(ctrl, \"imgW\");\n if (imgW !== undefined) item.imageWidth = imgW;\n const imgH = attrNum(ctrl, \"imgH\");\n if (imgH !== undefined) item.imageHeight = imgH;\n items.push(item);\n }\n if (items.length > 0) result.controls = items;\n }\n\n return result as unknown as SlideDescriptorOptions;\n },\n};\n\n// ── Child serializer ──\n\nfunction stringifySlideChild(child: SlideChild, ctx: WriteContext): string | undefined {\n if (\"shape\" in child) return shapeDesc.stringify(child.shape, ctx);\n if (\"picture\" in child) return pictureDesc.stringify(child.picture, ctx);\n if (\"contentPart\" in child) return `<p:contentPart r:id=\"${child.contentPart.rId}\"/>`;\n return undefined;\n}\n\n// ── Background helpers ──\n\nfunction stringifyBackground(opts: BackgroundDescriptorOptions): string {\n if (opts.color) {\n const alphaAttr =\n opts.transparency !== undefined\n ? `><a:srgbClr val=\"${opts.color.replace(\"#\", \"\")}\"><a:alpha val=\"${Math.round((100 - opts.transparency) * 1000)}\"/></a:srgbClr></p:bgPr`\n : `><a:solidFill><a:srgbClr val=\"${opts.color.replace(\"#\", \"\")}\"/></a:solidFill></p:bgPr`;\n return `<p:bg><p:bgPr${alphaAttr}></p:bg>`;\n }\n return \"<p:bg/>\";\n}\n\nfunction readBackground(bg: XmlElement): BackgroundDescriptorOptions {\n const result: BackgroundDescriptorOptions = {};\n const bgPr = findChild(bg, \"p:bgPr\");\n if (bgPr) {\n const solidFill = findChild(bgPr, \"a:solidFill\");\n if (solidFill) {\n const srgbClr = findChild(solidFill, \"a:srgbClr\");\n if (srgbClr?.attributes?.[\"val\"]) {\n result.color = String(srgbClr.attributes[\"val\"]);\n const alpha = findChild(srgbClr, \"a:alpha\");\n if (alpha?.attributes?.[\"val\"]) {\n result.transparency = 100 - Number(alpha.attributes[\"val\"]) / 1000;\n }\n }\n }\n }\n return result;\n}\n\n// ── Transition helpers ──\n\nfunction stringifyTransition(opts: TransitionDescriptorOptions): string {\n const parts: string[] = [];\n\n if (opts.type === \"none\") return \"\";\n if (opts.type === \"fade\") parts.push(\"<p:fade/>\");\n else if (opts.type === \"push\") parts.push('<p:push dir=\"l\"/>');\n else if (opts.type === \"wipe\") parts.push('<p:wipe dir=\"d\"/>');\n else if (opts.type === \"split\") parts.push('<p:split orient=\"horz\"/>');\n else if (opts.type === \"cover\") parts.push('<p:cover dir=\"l\"/>');\n else if (opts.type === \"pull\") parts.push('<p:pull dir=\"l\"/>');\n else if (opts.type === \"dissolve\") parts.push(\"<p:dissolve/>\");\n else if (opts.type === \"wheel\") parts.push('<p:wheel spokes=\"4\"/>');\n else if (opts.type === \"random\") parts.push(\"<p:random/>\");\n\n const attrs: string[] = [];\n if (opts.speed) attrs.push(`spd=\"${opts.speed}\"`);\n if (opts.advanceOnClick !== undefined) attrs.push(`advClick=\"${opts.advanceOnClick ? 1 : 0}\"`);\n if (opts.advanceAfterMs !== undefined) attrs.push(`advTm=\"${opts.advanceAfterMs}\"`);\n\n const attrStr = attrs.length ? \" \" + attrs.join(\" \") : \"\";\n const body = parts.join(\"\");\n return body ? `<p:transition${attrStr}>${body}</p:transition>` : `<p:transition${attrStr}/>`;\n}\n\nfunction readTransition(el: XmlElement): TransitionDescriptorOptions {\n const result: TransitionDescriptorOptions = {};\n\n if (el.attributes) {\n if (el.attributes[\"spd\"] !== undefined)\n result.speed = el.attributes[\"spd\"] as \"slow\" | \"medium\" | \"fast\";\n if (el.attributes[\"advClick\"] !== undefined)\n result.advanceOnClick = el.attributes[\"advClick\"] === \"1\";\n if (el.attributes[\"advTm\"] !== undefined)\n result.advanceAfterMs = Number(el.attributes[\"advTm\"]);\n }\n\n // Detect transition type from child elements\n if (findChild(el, \"p:fade\")) result.type = \"fade\";\n else if (findChild(el, \"p:push\")) result.type = \"push\";\n else if (findChild(el, \"p:wipe\")) result.type = \"wipe\";\n else if (findChild(el, \"p:split\")) result.type = \"split\";\n else if (findChild(el, \"p:cover\")) result.type = \"cover\";\n else if (findChild(el, \"p:pull\")) result.type = \"pull\";\n else if (findChild(el, \"p:dissolve\")) result.type = \"dissolve\";\n else if (findChild(el, \"p:wheel\")) result.type = \"wheel\";\n else if (findChild(el, \"p:random\")) result.type = \"random\";\n\n return result;\n}\n","import type { ParsedArchive } from \"@office-open/core\";\nimport {\n appPropertiesDesc,\n customPropertiesDesc,\n parseArchive,\n parseCorePropsElement,\n} from \"@office-open/core\";\nimport type { DataType } from \"@office-open/core\";\nimport { toUint8Array } from \"@office-open/core\";\nimport type { ReadContext } from \"@office-open/core/descriptor\";\nimport { themeDesc } from \"@office-open/core/theme\";\nimport type { Element } from \"@office-open/xml\";\nimport { attr, attrNum, findChild } from \"@office-open/xml\";\n\nimport { PptxReadContext, ParseContext } from \"./context\";\nimport { backgroundDesc } from \"./parts/descriptors/background\";\nimport { parseChild } from \"./parts/descriptors/bridge\";\nimport { commentAuthorsDesc, slideCommentsDesc } from \"./parts/descriptors/comments\";\nimport { notesMasterDesc } from \"./parts/descriptors/notes-master\";\nimport { notesSlideDesc } from \"./parts/descriptors/notes-slide\";\nimport { presPropsDesc } from \"./parts/descriptors/presentation-properties\";\nimport { slideDesc } from \"./parts/descriptors/slide\";\nimport { slideLayoutDesc } from \"./parts/descriptors/slide-layout\";\nimport { tableStylesDesc } from \"./parts/descriptors/table-styles\";\nimport { viewPropsDesc } from \"./parts/descriptors/view-properties\";\nimport type { SlideChild } from \"./parts/slide/slide-child\";\n\nexport { parseArchive };\n\nimport type { SlideLayoutType } from \"./parts/slide-layout\";\nimport type {\n LayoutDefinition,\n MasterChild,\n MasterDefinition,\n SlideOptions,\n SlideCommentOptions,\n PresentationOptions,\n} from \"./shared/file\";\n\n/**\n * All part paths extracted from the PPTX package.\n * Field names correspond directly to the OOXML directory structure.\n */\nexport interface PptxPartRefs {\n /** ppt/theme/themeN.xml */\n themes: string[];\n /** ppt/notesMasters/notesMasterN.xml */\n notesMasters: string[];\n /** ppt/commentAuthors.xml */\n commentAuthors?: string;\n /** ppt/comments/commentN.xml (from slide rels) */\n comments: string[];\n /** ppt/charts/chartN.xml (from slide rels) */\n charts: string[];\n /** ppt/diagrams/dataN.xml (from slide rels) */\n diagramData: string[];\n /** ppt/media/* (all media files) */\n media: string[];\n}\n\nexport interface PptxDocument {\n doc: ParsedArchive;\n /** ppt/presentation.xml root element (p:presentation) */\n presentation?: Element;\n /** ppt/slides/slideN.xml */\n slides: string[];\n /** ppt/slideMasters/slideMasterN.xml */\n slideMasters: string[];\n /** ppt/slideLayouts/slideLayoutN.xml */\n slideLayouts: string[];\n /** ppt/notesSlides/notesSlideN.xml */\n notesSlides: string[];\n partRefs: PptxPartRefs;\n /** ppt/presProps.xml */\n presProps?: string;\n /** ppt/viewProps.xml */\n viewProps?: string;\n /** ppt/tableStyles.xml */\n tableStyles?: string;\n /** docProps/core.xml */\n coreProps?: string;\n /** docProps/app.xml */\n appProps?: string;\n /** docProps/custom.xml */\n customProps?: string;\n}\n\nfunction resolveRelsPath(target: string): string {\n if (target.startsWith(\"/\")) return target.slice(1);\n if (target.startsWith(\"../\")) return target.replace(\"../\", \"ppt/\");\n return `ppt/${target}`;\n}\n\nfunction sortByNumber(paths: string[]): string[] {\n return paths.sort((a, b) => {\n const numA = parseInt(a.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n const numB = parseInt(b.match(/(\\d+)/)?.[1] ?? \"0\", 10);\n return numA - numB;\n });\n}\n\nfunction xmlKeys(keys: string[]): string[] {\n return keys.filter((k) => k.endsWith(\".xml\"));\n}\n\nfunction parseRootRels(doc: ParsedArchive): {\n coreProps?: string;\n appProps?: string;\n customProps?: string;\n} {\n const relsEl = doc.get(\"_rels/.rels\");\n if (!relsEl) return {};\n\n let coreProps: string | undefined;\n let appProps: string | undefined;\n let customProps: string | undefined;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = target.startsWith(\"/\") ? target.slice(1) : target;\n\n if (type.includes(\"/core-properties\")) {\n coreProps = path;\n } else if (type.includes(\"/extended-properties\")) {\n appProps = path;\n } else if (type.includes(\"/custom-properties\")) {\n customProps = path;\n }\n }\n\n return { coreProps, appProps, customProps };\n}\n\nfunction parseSlideRels(doc: ParsedArchive, slidePaths: string[], refs: PptxPartRefs): void {\n const commentsSet = new Set(refs.comments);\n const chartsSet = new Set(refs.charts);\n const diagramDataSet = new Set(refs.diagramData);\n const mediaSet = new Set(refs.media);\n\n for (const slidePath of slidePaths) {\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) continue;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/comments\") && !type.includes(\"commentAuthors\")) {\n commentsSet.add(path);\n } else if (type.includes(\"/chart\")) {\n chartsSet.add(path);\n } else if (type.includes(\"/diagramData\")) {\n diagramDataSet.add(path);\n } else if (type.includes(\"/image\") || type.includes(\"/video\") || type.includes(\"/media\")) {\n mediaSet.add(path);\n }\n }\n }\n\n refs.comments = [...commentsSet];\n refs.charts = [...chartsSet];\n refs.diagramData = [...diagramDataSet];\n refs.media = [...mediaSet];\n}\n\nexport function parsePptx(data: DataType): PptxDocument {\n const uint8 = toUint8Array(data);\n const doc = parseArchive(uint8);\n\n const presentation = doc.get(\"ppt/presentation.xml\");\n\n const relsXml = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const slides: string[] = [];\n const slideMasters: string[] = [];\n const themes: string[] = [];\n const notesMasters: string[] = [];\n let presProps: string | undefined;\n let viewProps: string | undefined;\n let tableStyles: string | undefined;\n let commentAuthors: string | undefined;\n\n if (relsXml) {\n for (const child of relsXml.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const type = attr(child, \"Type\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!target) continue;\n\n const path = resolveRelsPath(target);\n\n if (type.includes(\"/slideMaster\")) {\n slideMasters.push(path);\n } else if (\n type.includes(\"/slide\") &&\n !type.includes(\"slideLayout\") &&\n !type.includes(\"slideMaster\")\n ) {\n slides.push(path);\n } else if (type.includes(\"/theme\")) {\n themes.push(path);\n } else if (type.includes(\"/notesMaster\")) {\n notesMasters.push(path);\n } else if (type.includes(\"/presProps\")) {\n presProps = path;\n } else if (type.includes(\"/viewProps\")) {\n viewProps = path;\n } else if (type.includes(\"/tableStyles\")) {\n tableStyles = path;\n } else if (type.includes(\"/commentAuthors\")) {\n commentAuthors = path;\n }\n }\n }\n\n sortByNumber(slides);\n sortByNumber(slideMasters);\n sortByNumber(themes);\n sortByNumber(notesMasters);\n\n const slideLayouts = sortByNumber(xmlKeys(doc.keys(\"ppt/slideLayouts/\")));\n const notesSlides = sortByNumber(xmlKeys(doc.keys(\"ppt/notesSlides/\")));\n\n const partRefs: PptxPartRefs = {\n themes,\n notesMasters,\n commentAuthors,\n comments: [],\n charts: [],\n diagramData: [],\n media: doc.keys(\"ppt/media/\"),\n };\n\n parseSlideRels(doc, slides, partRefs);\n sortByNumber(partRefs.comments);\n sortByNumber(partRefs.charts);\n sortByNumber(partRefs.diagramData);\n\n const { coreProps, appProps, customProps } = parseRootRels(doc);\n\n return {\n doc,\n presentation,\n slides,\n slideMasters,\n slideLayouts,\n notesSlides,\n partRefs,\n presProps,\n viewProps,\n tableStyles,\n coreProps,\n appProps,\n customProps,\n };\n}\n\n/**\n * Parse a single slide's relationship file into a Map<rId, path>.\n */\nfunction parseSlideRelMap(doc: ParsedArchive, slidePath: string): Map<string, string> {\n const rels = new Map<string, string>();\n const parts = slidePath.split(\"/\");\n const fileName = parts.pop()!;\n const relsPath = `${parts.join(\"/\")}/_rels/${fileName}.rels`;\n\n const relsEl = doc.get(relsPath);\n if (!relsEl) return rels;\n\n for (const child of relsEl.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const id = attr(child, \"Id\") ?? \"\";\n const target = attr(child, \"Target\") ?? \"\";\n if (!id || !target) continue;\n // External links (hyperlinks) keep their original URL target\n if (attr(child, \"TargetMode\") === \"External\") {\n rels.set(id, target);\n } else {\n rels.set(id, resolveRelsPath(target));\n }\n }\n\n return rels;\n}\n\n/**\n * Build a map from each path to the rel target matching a predicate.\n */\nfunction resolveRelTargets(\n doc: ParsedArchive,\n paths: string[],\n predicate: (target: string) => boolean,\n): Map<string, string> {\n const map = new Map<string, string>();\n for (const path of paths) {\n for (const target of parseSlideRelMap(doc, path).values()) {\n if (predicate(target)) map.set(path, target);\n }\n }\n return map;\n}\n\n/**\n * Parse p14:sectionLst from presentation.xml and map each slide path to its\n * section name. Bridges p14:sldId (by slide id) -> p:sldIdLst (slide id ->\n * rId) -> presentation rels (rId -> path).\n */\nfunction parseSlideSections(\n presentation: Element | undefined,\n doc: ParsedArchive,\n): Map<string, string> {\n const pathToSection = new Map<string, string>();\n if (!presentation) return pathToSection;\n\n const extLst = findChild(presentation, \"p:extLst\");\n if (!extLst) return pathToSection;\n\n let sectionLst: Element | undefined;\n for (const ext of extLst.elements ?? []) {\n if (ext.name !== \"p:ext\") continue;\n if (attr(ext, \"uri\") !== \"{521415D9-36F7-43E2-AB2F-B90AF26B5E84}\") continue;\n sectionLst = findChild(ext, \"p14:sectionLst\");\n if (sectionLst) break;\n }\n if (!sectionLst) return pathToSection;\n\n // slideId -> sectionName\n const sectionBySlideId = new Map<number, string>();\n for (const section of sectionLst.elements ?? []) {\n if (section.name !== \"p14:section\") continue;\n const name = attr(section, \"name\");\n if (!name) continue;\n const sldIdLst = findChild(section, \"p14:sldIdLst\");\n for (const sldId of sldIdLst?.elements ?? []) {\n if (sldId.name !== \"p14:sldId\") continue;\n const id = attrNum(sldId, \"id\");\n if (id !== undefined) sectionBySlideId.set(id, name);\n }\n }\n if (sectionBySlideId.size === 0) return pathToSection;\n\n // slideId -> rId (from p:sldIdLst)\n const sldIdLst = findChild(presentation, \"p:sldIdLst\");\n const rIdBySlideId = new Map<number, string>();\n for (const sldId of sldIdLst?.elements ?? []) {\n if (sldId.name !== \"p:sldId\") continue;\n const id = attrNum(sldId, \"id\");\n const rId = attr(sldId, \"r:id\");\n if (id !== undefined && rId) rIdBySlideId.set(id, rId);\n }\n\n // rId -> path (from presentation.xml.rels)\n const relsEl = doc.get(\"ppt/_rels/presentation.xml.rels\");\n const pathByRId = new Map<string, string>();\n for (const child of relsEl?.elements ?? []) {\n if (child.name !== \"Relationship\") continue;\n const id = attr(child, \"Id\");\n const target = attr(child, \"Target\");\n if (id && target) pathByRId.set(id, resolveRelsPath(target));\n }\n\n for (const [slideId, name] of sectionBySlideId) {\n const rId = rIdBySlideId.get(slideId);\n if (!rId) continue;\n const path = pathByRId.get(rId);\n if (path) pathToSection.set(path, name);\n }\n\n return pathToSection;\n}\n\n/**\n * Parse a .pptx file and convert it into PresentationOptions.\n *\n * This is the main public API for parsing PPTX files.\n * The returned options can be passed directly to `new Presentation(parsed)`\n * to recreate the presentation.\n *\n * @param data - Raw bytes of a .pptx file\n * @returns Parsed presentation options\n */\nexport function parsePresentation(data: DataType): PresentationOptions {\n const pptx = parsePptx(data);\n const opts: Partial<PresentationOptions> = {};\n const sectionBySlidePath = parseSlideSections(pptx.presentation, pptx.doc);\n\n // 1. Parse slide size from p:sldSz\n if (pptx.presentation) {\n const sldSz = findChild(pptx.presentation, \"p:sldSz\");\n if (sldSz) {\n const cx = attrNum(sldSz, \"cx\");\n const cy = attrNum(sldSz, \"cy\");\n if (cx === 12192000 && cy === 6858000) {\n opts.size = \"16:9\";\n } else if (cx === 9144000 && cy === 6858000) {\n opts.size = \"4:3\";\n } else if (cx && cy) {\n opts.size = { width: cx, height: cy };\n }\n }\n }\n\n // 2. Parse core properties\n if (pptx.coreProps) {\n const corePropsEl = pptx.doc.get(pptx.coreProps);\n if (corePropsEl) {\n const cp = parseCorePropsElement(corePropsEl);\n if (cp.title) opts.title = cp.title;\n if (cp.subject) opts.subject = cp.subject;\n if (cp.creator) opts.creator = cp.creator;\n if (cp.keywords) opts.keywords = cp.keywords;\n if (cp.description) opts.description = cp.description;\n if (cp.lastModifiedBy) opts.lastModifiedBy = cp.lastModifiedBy;\n if (cp.revision !== undefined) opts.revision = cp.revision;\n if (cp.lastPrinted) opts.lastPrinted = cp.lastPrinted;\n if (cp.created) opts.created = cp.created;\n if (cp.modified) opts.modified = cp.modified;\n }\n }\n\n // 2b. Parse extended (app) properties\n if (pptx.appProps) {\n const appPropsEl = pptx.doc.get(pptx.appProps);\n if (appPropsEl) {\n const ap = appPropertiesDesc.parse(appPropsEl, {} as ReadContext);\n if (ap && Object.keys(ap).length > 0) opts.appProperties = ap;\n }\n }\n\n // 2c. Parse custom properties\n if (pptx.customProps) {\n const customPropsEl = pptx.doc.get(pptx.customProps);\n if (customPropsEl) {\n const cp = customPropertiesDesc.parse(customPropsEl, {} as ReadContext);\n if (cp.properties?.length) opts.customProperties = cp.properties;\n }\n }\n\n // 3. Parse show options from presProps\n if (pptx.presProps) {\n const presPropsEl = pptx.doc.get(pptx.presProps);\n if (presPropsEl) {\n const presPropsOpts = presPropsDesc.parse(presPropsEl, {} as ReadContext);\n if (presPropsOpts.show) opts.show = presPropsOpts.show;\n }\n }\n\n // 3b. Parse view properties\n if (pptx.viewProps) {\n const viewPropsEl = pptx.doc.get(pptx.viewProps);\n if (viewPropsEl) {\n const viewOpts = viewPropsDesc.parse(viewPropsEl, {} as ReadContext);\n if (viewOpts.lastView || viewOpts.showComments !== undefined || viewOpts.gridSpacing) {\n opts.view = viewOpts;\n }\n }\n }\n\n // 3c. Parse table styles\n if (pptx.tableStyles) {\n const tableStylesEl = pptx.doc.get(pptx.tableStyles);\n if (tableStylesEl) {\n const tableStylesResult = tableStylesDesc.parse(tableStylesEl, {} as ReadContext);\n if (tableStylesResult.opts) opts.tableStyles = tableStylesResult.opts;\n }\n }\n\n // 4. Build relationship maps\n const masterThemePaths = resolveRelTargets(pptx.doc, pptx.slideMasters, (t) =>\n t.includes(\"/theme\"),\n );\n const layoutMasterPaths = resolveRelTargets(pptx.doc, pptx.slideLayouts, (t) =>\n t.includes(\"/slideMaster\"),\n );\n const slideLayoutPaths = resolveRelTargets(pptx.doc, pptx.slides, (t) =>\n t.includes(\"/slideLayout\"),\n );\n\n // 5. Parse masters\n const masterCount = pptx.slideMasters.length;\n const masterDefs: MasterDefinition[] = [];\n const masterReadCtx = new PptxReadContext(new ParseContext(pptx, new Map()));\n for (let mi = 0; mi < masterCount; mi++) {\n const masterPath = pptx.slideMasters[mi];\n const masterEl = pptx.doc.get(masterPath);\n if (!masterEl) continue;\n\n // Theme\n const themePath = masterThemePaths.get(masterPath);\n const themeEl = themePath ? pptx.doc.get(themePath) : undefined;\n const themeOptions = themeEl ? themeDesc.parse(themeEl, masterReadCtx) : undefined;\n\n // Background (inline: findChild → backgroundDesc.parse)\n const cSld = findChild(masterEl, \"p:cSld\");\n const bg = cSld ? findChild(cSld, \"p:bg\") : undefined;\n const masterBackground = bg ? backgroundDesc.parse(bg, masterReadCtx) : undefined;\n const hasBackground = masterBackground && Object.keys(masterBackground).length > 0;\n\n // Children: extract non-placeholder shapes from spTree\n const spTree = cSld ? findChild(cSld, \"p:spTree\") : undefined;\n const masterChildren: SlideChild[] = [];\n if (spTree) {\n for (const child of spTree.elements ?? []) {\n // Skip nvGrpSpPr/grpSpPr (tree container structure, not shapes)\n if (child.name === \"p:nvGrpSpPr\" || child.name === \"p:grpSpPr\") continue;\n // Skip placeholder shapes (generated by DefaultSlideMaster template)\n if (child.name === \"p:sp\") {\n const nvSpPr = findChild(child, \"p:nvSpPr\");\n const nvPr = nvSpPr ? findChild(nvSpPr, \"p:nvPr\") : undefined;\n if (nvPr && findChild(nvPr, \"p:ph\")) continue;\n }\n const parsed = parseChild(child, masterReadCtx);\n if (parsed !== undefined) masterChildren.push(parsed);\n }\n }\n\n // Layouts belonging to this master\n const masterLayouts: LayoutDefinition[] = [];\n for (const layoutPath of pptx.slideLayouts) {\n if (layoutMasterPaths.get(layoutPath) !== masterPath) continue;\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) {\n const layoutOpts = slideLayoutDesc.parse(layoutEl, masterReadCtx);\n const layoutDef: LayoutDefinition = {\n type: (layoutOpts.type ?? \"blank\") as SlideLayoutType,\n };\n if (layoutOpts.placeholders) layoutDef.placeholders = layoutOpts.placeholders;\n masterLayouts.push(layoutDef);\n }\n }\n\n const masterName = themeOptions?.name ?? `master${mi + 1}`;\n const masterDef: Partial<MasterDefinition> = {};\n masterDef.name = masterName;\n if (themeOptions) masterDef.theme = themeOptions;\n if (hasBackground) masterDef.background = masterBackground;\n // MasterChild (shared) declares only { shape }; parse yields the full\n // SlideChild union (parts-layer). The shared/parts split prevents unifying\n // them (SlideChild cannot move to shared — circular dep), so the cast stays\n // local to this known impedance.\n if (masterChildren.length > 0) masterDef.children = masterChildren as unknown as MasterChild[];\n if (masterLayouts.length > 0) masterDef.layouts = masterLayouts;\n masterDefs.push(masterDef as MasterDefinition);\n }\n\n // Only set masters if there's more than one (single master is auto-created)\n if (masterCount > 1) {\n opts.masters = masterDefs;\n }\n\n // 5b. Parse notes masters\n for (const nmPath of pptx.partRefs.notesMasters) {\n const nmEl = pptx.doc.get(nmPath);\n if (nmEl) {\n const nmOpts = notesMasterDesc.parse(nmEl, masterReadCtx);\n if (nmOpts.options) {\n opts.includeNotesMaster = true;\n opts.notesMasterOptions = nmOpts.options;\n }\n }\n }\n\n // 5c. Parse handout masters (no separate handling needed, just mark inclusion)\n // Handout masters are referenced from presentation.xml rels but not stored in PptxDocument currently\n\n // 6. Parse comment authors\n const commentAuthors = new Map<number, { name: string; initials: string }>();\n if (pptx.partRefs.commentAuthors) {\n const authorsEl = pptx.doc.get(pptx.partRefs.commentAuthors);\n if (authorsEl) {\n const authors = commentAuthorsDesc.parse(authorsEl, masterReadCtx);\n for (const a of authors) {\n commentAuthors.set(a.id, { name: a.name, initials: a.initials });\n }\n }\n }\n\n // 7. Parse slides with layout and master references\n const result: SlideOptions[] = [];\n for (let si = 0; si < pptx.slides.length; si++) {\n const slidePath = pptx.slides[si];\n const slideEl = pptx.doc.get(slidePath);\n if (!slideEl) continue;\n\n const slideRels = parseSlideRelMap(pptx.doc, slidePath);\n const ctx = new ParseContext(pptx, slideRels);\n const readCtx = new PptxReadContext(ctx);\n // slideDesc.parse returns SlideDescriptorOptions (internal descriptor type:\n // 4-variant SlideChild, no layout/master/comments/notes/section). We enrich\n // it with those public-API fields below and coerce to SlideOptions at push.\n // Record bridges this descriptor/public impedance — slide.ts itself is a\n // known stringify≠parse split, so the wrapper stays until that is resolved.\n const slideOpts = slideDesc.parse(slideEl, readCtx) as Record<string, unknown>;\n\n // Resolve layout → master\n const layoutPath = slideLayoutPaths.get(slidePath);\n if (layoutPath) {\n const layoutEl = pptx.doc.get(layoutPath);\n if (layoutEl) {\n const layoutOpts = slideLayoutDesc.parse(layoutEl, readCtx);\n slideOpts.layout = (layoutOpts.type ?? \"blank\") as SlideLayoutType;\n }\n\n const resolvedMasterPath = layoutMasterPaths.get(layoutPath);\n if (resolvedMasterPath) {\n const masterIdx = pptx.slideMasters.indexOf(resolvedMasterPath);\n if (masterIdx >= 0 && masterDefs[masterIdx]) {\n slideOpts.master = masterDefs[masterIdx].name;\n }\n }\n }\n\n // Comments via slide rels\n for (const [, relPath] of slideRels) {\n if (!relPath.includes(\"/comments/\")) continue;\n const commentsEl = pptx.doc.get(relPath);\n if (!commentsEl) continue;\n\n const parsedComments = slideCommentsDesc.parse(commentsEl, readCtx);\n if (parsedComments.length > 0) {\n const comments: Partial<SlideCommentOptions>[] = [];\n for (const cm of parsedComments) {\n const entry: Partial<SlideCommentOptions> = { x: cm.x, y: cm.y };\n if (cm.text) entry.text = cm.text;\n if (cm.date) entry.date = cm.date;\n if (cm.modified !== undefined) entry.modified = cm.modified;\n const author = commentAuthors.get(cm.authorId);\n if (author) {\n entry.author = author.name;\n if (author.initials) entry.initials = author.initials;\n }\n comments.push(entry);\n }\n if (comments.length > 0) slideOpts.comments = comments as SlideCommentOptions[];\n }\n break;\n }\n\n // Notes slide via slide rels\n for (const [, relPath] of slideRels) {\n if (!relPath.includes(\"/notesSlides/\")) continue;\n const notesEl = pptx.doc.get(relPath);\n if (!notesEl) continue;\n const notesData = notesSlideDesc.parse(notesEl, readCtx);\n if (notesData.text) slideOpts.notes = notesData.text;\n break;\n }\n\n // Section (p14:sectionLst) — bridged via slide id -> rId -> path\n const sectionName = sectionBySlidePath.get(slidePath);\n if (sectionName) slideOpts.section = sectionName;\n\n result.push(slideOpts as SlideOptions);\n }\n\n opts.slides = result;\n return opts as PresentationOptions;\n}\n"],"mappings":";;;;;AAyFA,MAAa,YAAsD;CACjE,MAAM;CAEN,UAAU,MAAM,KAAK;EACnB,MAAM,QAAkB,CAAC;EAGzB,MAAM,WAAqB,CAAC;EAC5B,IAAI,KAAK,iBAAiB,OAAO,SAAS,KAAK,qBAAmB;EAClE,IAAI,KAAK,qBAAqB,OAAO,SAAS,KAAK,yBAAuB;EAC1E,IAAI,KAAK,QAAQ,SAAS,KAAK,aAAW;EAC1C,MAAM,KACJ,4NAA4N,SAAS,KAAK,EAAE,EAAE,EAChP;EAGA,MAAM,KAAK,UAAU;EAErB,IAAI,KAAK,YACP,MAAM,KAAK,oBAAoB,KAAK,UAAU,CAAC;EAIjD,MAAM,KAAK,YAAY;EACvB,MAAM,KAAK,cAAc;EAEzB,IAAI,KAAK,UACP,KAAK,MAAM,SAAS,KAAK,UAAU;GACjC,MAAM,MAAM,oBAAoB,OAAO,GAAG;GAC1C,IAAI,KAAK,MAAM,KAAK,GAAG;EACzB;EAGF,MAAM,KAAK,aAAa;EAGxB,IAAI,KAAK,gBAAgB,KAAK,aAAa,SAAS,GAAG;GACrD,MAAM,UAAU,KAAK,aAAa,KAAK,MAAM,qBAAqB,EAAE,IAAI,IAAI,CAAC,CAAC,KAAK,EAAE;GACrF,MAAM,KAAK,kBAAkB,QAAQ,iBAAiB;EACxD;EAGA,IAAI,KAAK,YAAY,KAAK,SAAS,SAAS,GAAG;GAC7C,MAAM,YAAY,KAAK,SACpB,KAAK,MAAM;IACV,MAAM,QAAkB,CAAC;IACzB,IAAI,EAAE,YAAY,KAAA,GAAW,MAAM,KAAK,SAAS,EAAE,QAAQ,EAAE;IAC7D,IAAI,EAAE,MAAM,MAAM,KAAK,SAAS,EAAE,KAAK,EAAE;IACzC,IAAI,EAAE,YAAY,MAAM,KAAK,kBAAgB;IAC7C,IAAI,EAAE,KAAK,MAAM,KAAK,SAAS,EAAE,IAAI,EAAE;IACvC,IAAI,EAAE,eAAe,KAAA,GAAW,MAAM,KAAK,SAAS,EAAE,WAAW,EAAE;IACnE,IAAI,EAAE,gBAAgB,KAAA,GAAW,MAAM,KAAK,SAAS,EAAE,YAAY,EAAE;IACrE,OAAO,cAAc,MAAM,KAAK,GAAG,EAAE;GACvC,CAAC,CAAC,CACD,KAAK,EAAE;GACV,MAAM,KAAK,eAAe,UAAU,cAAc;EACpD;EAGA,IAAI,KAAK,cAAc;GACrB,MAAM,KAAK,KAAK;GAChB,MAAM,aAAuB,CAAC;GAC9B,IAAI,GAAG,aAAa,WAAW,KAAK,aAAa;GACjD,IAAI,GAAG,UAAU,WAAW,KAAK,SAAS;GAC1C,IAAI,GAAG,QAAQ,WAAW,KAAK,UAAU;GACzC,IAAI,GAAG,QAAQ,WAAW,KAAK,UAAU;GACzC,IAAI,WAAW,SAAS,GAAG,MAAM,KAAK,SAAS,WAAW,KAAK,EAAE,EAAE,QAAQ;EAC7E;EAEA,MAAM,KAAK,WAAW;EAGtB,MAAM,KAAK,kDAAkD;EAG7D,IAAI,KAAK,YACP,MAAM,KAAK,oBAAoB,KAAK,UAAU,CAAC;EAGjD,MAAM,KAAK,UAAU;EACrB,OAAO,MAAM,KAAK,EAAE;CACtB;CAEA,MAAM,IAAI,MAAM;EACd,MAAM,SAAkC,CAAC;EAGzC,IAAI,GAAG,YAAY;GACjB,IAAI,GAAG,WAAW,oBAAoB,KAAA,GACpC,OAAO,eAAe,GAAG,WAAW,oBAAoB;GAC1D,IAAI,GAAG,WAAW,wBAAwB,KAAA,GACxC,OAAO,mBAAmB,GAAG,WAAW,wBAAwB;GAClE,IAAI,GAAG,WAAW,YAAY,KAAK,OAAO,SAAS;EACrD;EAGA,MAAM,OAAO,UAAU,IAAI,QAAQ;EACnC,IAAI,MAAM;GAER,MAAM,KAAK,UAAU,MAAM,MAAM;GACjC,IAAI,IAAI,OAAO,aAAa,eAAe,EAAE;GAG7C,MAAM,SAAS,UAAU,MAAM,UAAU;GACzC,IAAI,QAAQ;IACV,MAAM,WAA+B,CAAC;IACtC,IAAI,OAAO,UACT,KAAK,MAAM,SAAS,OAAO,UAAU;KAEnC,IAAI,MAAM,SAAS,iBAAiB,MAAM,SAAS,aAAa;KAChE,MAAM,SAAS,WAAW,OAAO,IAAI;KACrC,IAAI,WAAW,KAAA,GAAW,SAAS,KAAK,MAAM;IAChD;IAEF,IAAI,SAAS,SAAS,GAAG,OAAO,WAAW;GAC7C;GAGA,MAAM,KAAK,UAAU,MAAM,MAAM;GACjC,IAAI,IAAI;IACN,MAAM,SAAwC,CAAC;IAC/C,IAAI,UAAU,IAAI,UAAU,GAAG,OAAO,cAAc;IACpD,IAAI,UAAU,IAAI,MAAM,GAAG,OAAO,WAAW;IAC7C,IAAI,UAAU,IAAI,OAAO,GAAG,OAAO,SAAS;IAC5C,IAAI,UAAU,IAAI,OAAO,GAAG,OAAO,SAAS;IAC5C,IAAI,OAAO,eAAe,OAAO,YAAY,OAAO,UAAU,OAAO,QACnE,OAAO,eAAe;GAC1B;EACF;EAGA,MAAM,aAAa,UAAU,IAAI,cAAc;EAC/C,IAAI,YAAY,OAAO,aAAa,eAAe,UAAU;EAG7D,MAAM,SAAS,UAAU,IAAI,UAAU;EACvC,IAAI,QAAQ;GACV,MAAM,aAAa,WAAW,MAAM,QAAQ,IAAI;GAChD,IAAI,WAAW,WAAW,WAAW,QAAQ,SAAS,GAAG;IACvD,MAAM,aAA2C,CAAC;IAClD,KAAK,MAAM,SAAS,WAAW,SAC7B,WAAW,KAAK;KAAE,SAAS,MAAM;KAAM,SAAS,MAAM;IAAQ,CAAC;IAEjE,OAAO,aAAa;GACtB;EACF;EAGA,MAAM,cAAc,UAAU,IAAI,eAAe;EACjD,IAAI,aAAa;GACf,MAAM,QAA2B,CAAC;GAClC,KAAK,MAAM,MAAM,YAAY,YAAY,CAAC,GACxC,IAAI,GAAG,SAAS,cAAc;IAC5B,MAAM,MAAM,KAAK,IAAI,MAAM;IAC3B,IAAI,KAAK,MAAM,KAAK,EAAE,IAAI,CAAC;GAC7B;GAEF,IAAI,MAAM,SAAS,GAAG,OAAO,eAAe;EAC9C;EAGA,MAAM,WAAW,UAAU,IAAI,YAAY;EAC3C,IAAI,UAAU;GACZ,MAAM,QAAoC,CAAC;GAC3C,KAAK,MAAM,QAAQ,SAAS,YAAY,CAAC,GAAG;IAC1C,IAAI,KAAK,SAAS,aAAa;IAC/B,MAAM,OAAiC,CAAC;IACxC,MAAM,OAAO,QAAQ,MAAM,MAAM;IACjC,IAAI,SAAS,KAAA,GAAW,KAAK,UAAU;IACvC,MAAM,OAAO,KAAK,MAAM,MAAM;IAC9B,IAAI,MAAM,KAAK,OAAO;IACtB,IAAI,KAAK,MAAM,YAAY,MAAM,KAAK,KAAK,aAAa;IACxD,MAAM,MAAM,KAAK,MAAM,MAAM;IAC7B,IAAI,KAAK,KAAK,MAAM;IACpB,MAAM,OAAO,QAAQ,MAAM,MAAM;IACjC,IAAI,SAAS,KAAA,GAAW,KAAK,aAAa;IAC1C,MAAM,OAAO,QAAQ,MAAM,MAAM;IACjC,IAAI,SAAS,KAAA,GAAW,KAAK,cAAc;IAC3C,MAAM,KAAK,IAAI;GACjB;GACA,IAAI,MAAM,SAAS,GAAG,OAAO,WAAW;EAC1C;EAEA,OAAO;CACT;AACF;AAIA,SAAS,oBAAoB,OAAmB,KAAuC;CACrF,IAAI,WAAW,OAAO,OAAO,UAAU,UAAU,MAAM,OAAO,GAAG;CACjE,IAAI,aAAa,OAAO,OAAO,YAAY,UAAU,MAAM,SAAS,GAAG;CACvE,IAAI,iBAAiB,OAAO,OAAO,wBAAwB,MAAM,YAAY,IAAI;AAEnF;AAIA,SAAS,oBAAoB,MAA2C;CACtE,IAAI,KAAK,OAKP,OAAO,gBAHL,KAAK,iBAAiB,KAAA,IAClB,oBAAoB,KAAK,MAAM,QAAQ,KAAK,EAAE,EAAE,kBAAkB,KAAK,OAAO,MAAM,KAAK,gBAAgB,GAAI,EAAE,2BAC/G,iCAAiC,KAAK,MAAM,QAAQ,KAAK,EAAE,EAAE,2BAClC;CAEnC,OAAO;AACT;AAEA,SAAS,eAAe,IAA6C;CACnE,MAAM,SAAsC,CAAC;CAC7C,MAAM,OAAO,UAAU,IAAI,QAAQ;CACnC,IAAI,MAAM;EACR,MAAM,YAAY,UAAU,MAAM,aAAa;EAC/C,IAAI,WAAW;GACb,MAAM,UAAU,UAAU,WAAW,WAAW;GAChD,IAAI,SAAS,aAAa,QAAQ;IAChC,OAAO,QAAQ,OAAO,QAAQ,WAAW,MAAM;IAC/C,MAAM,QAAQ,UAAU,SAAS,SAAS;IAC1C,IAAI,OAAO,aAAa,QACtB,OAAO,eAAe,MAAM,OAAO,MAAM,WAAW,MAAM,IAAI;GAElE;EACF;CACF;CACA,OAAO;AACT;AAIA,SAAS,oBAAoB,MAA2C;CACtE,MAAM,QAAkB,CAAC;CAEzB,IAAI,KAAK,SAAS,QAAQ,OAAO;CACjC,IAAI,KAAK,SAAS,QAAQ,MAAM,KAAK,WAAW;MAC3C,IAAI,KAAK,SAAS,QAAQ,MAAM,KAAK,qBAAmB;MACxD,IAAI,KAAK,SAAS,QAAQ,MAAM,KAAK,qBAAmB;MACxD,IAAI,KAAK,SAAS,SAAS,MAAM,KAAK,4BAA0B;MAChE,IAAI,KAAK,SAAS,SAAS,MAAM,KAAK,sBAAoB;MAC1D,IAAI,KAAK,SAAS,QAAQ,MAAM,KAAK,qBAAmB;MACxD,IAAI,KAAK,SAAS,YAAY,MAAM,KAAK,eAAe;MACxD,IAAI,KAAK,SAAS,SAAS,MAAM,KAAK,yBAAuB;MAC7D,IAAI,KAAK,SAAS,UAAU,MAAM,KAAK,aAAa;CAEzD,MAAM,QAAkB,CAAC;CACzB,IAAI,KAAK,OAAO,MAAM,KAAK,QAAQ,KAAK,MAAM,EAAE;CAChD,IAAI,KAAK,mBAAmB,KAAA,GAAW,MAAM,KAAK,aAAa,KAAK,iBAAiB,IAAI,EAAE,EAAE;CAC7F,IAAI,KAAK,mBAAmB,KAAA,GAAW,MAAM,KAAK,UAAU,KAAK,eAAe,EAAE;CAElF,MAAM,UAAU,MAAM,SAAS,MAAM,MAAM,KAAK,GAAG,IAAI;CACvD,MAAM,OAAO,MAAM,KAAK,EAAE;CAC1B,OAAO,OAAO,gBAAgB,QAAQ,GAAG,KAAK,mBAAmB,gBAAgB,QAAQ;AAC3F;AAEA,SAAS,eAAe,IAA6C;CACnE,MAAM,SAAsC,CAAC;CAE7C,IAAI,GAAG,YAAY;EACjB,IAAI,GAAG,WAAW,WAAW,KAAA,GAC3B,OAAO,QAAQ,GAAG,WAAW;EAC/B,IAAI,GAAG,WAAW,gBAAgB,KAAA,GAChC,OAAO,iBAAiB,GAAG,WAAW,gBAAgB;EACxD,IAAI,GAAG,WAAW,aAAa,KAAA,GAC7B,OAAO,iBAAiB,OAAO,GAAG,WAAW,QAAQ;CACzD;CAGA,IAAI,UAAU,IAAI,QAAQ,GAAG,OAAO,OAAO;MACtC,IAAI,UAAU,IAAI,QAAQ,GAAG,OAAO,OAAO;MAC3C,IAAI,UAAU,IAAI,QAAQ,GAAG,OAAO,OAAO;MAC3C,IAAI,UAAU,IAAI,SAAS,GAAG,OAAO,OAAO;MAC5C,IAAI,UAAU,IAAI,SAAS,GAAG,OAAO,OAAO;MAC5C,IAAI,UAAU,IAAI,QAAQ,GAAG,OAAO,OAAO;MAC3C,IAAI,UAAU,IAAI,YAAY,GAAG,OAAO,OAAO;MAC/C,IAAI,UAAU,IAAI,SAAS,GAAG,OAAO,OAAO;MAC5C,IAAI,UAAU,IAAI,UAAU,GAAG,OAAO,OAAO;CAElD,OAAO;AACT;;;ACxRA,SAAS,gBAAgB,QAAwB;CAC/C,IAAI,OAAO,WAAW,GAAG,GAAG,OAAO,OAAO,MAAM,CAAC;CACjD,IAAI,OAAO,WAAW,KAAK,GAAG,OAAO,OAAO,QAAQ,OAAO,MAAM;CACjE,OAAO,OAAO;AAChB;AAEA,SAAS,aAAa,OAA2B;CAC/C,OAAO,MAAM,MAAM,GAAG,MAAM;EAG1B,OAFa,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,MAAM,KAAK,EAE1C,IADG,SAAS,EAAE,MAAM,OAAO,CAAC,GAAG,MAAM,KAAK,EACnC;CACnB,CAAC;AACH;AAEA,SAAS,QAAQ,MAA0B;CACzC,OAAO,KAAK,QAAQ,MAAM,EAAE,SAAS,MAAM,CAAC;AAC9C;AAEA,SAAS,cAAc,KAIrB;CACA,MAAM,SAAS,IAAI,IAAI,aAAa;CACpC,IAAI,CAAC,QAAQ,OAAO,CAAC;CAErB,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,KAAK,MAAM,SAAS,OAAO,YAAY,CAAC,GAAG;EACzC,IAAI,MAAM,SAAS,gBAAgB;EACnC,MAAM,OAAO,KAAK,OAAO,MAAM,KAAK;EACpC,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK;EACxC,IAAI,CAAC,QAAQ;EAEb,MAAM,OAAO,OAAO,WAAW,GAAG,IAAI,OAAO,MAAM,CAAC,IAAI;EAExD,IAAI,KAAK,SAAS,kBAAkB,GAClC,YAAY;OACP,IAAI,KAAK,SAAS,sBAAsB,GAC7C,WAAW;OACN,IAAI,KAAK,SAAS,oBAAoB,GAC3C,cAAc;CAElB;CAEA,OAAO;EAAE;EAAW;EAAU;CAAY;AAC5C;AAEA,SAAS,eAAe,KAAoB,YAAsB,MAA0B;CAC1F,MAAM,cAAc,IAAI,IAAI,KAAK,QAAQ;CACzC,MAAM,YAAY,IAAI,IAAI,KAAK,MAAM;CACrC,MAAM,iBAAiB,IAAI,IAAI,KAAK,WAAW;CAC/C,MAAM,WAAW,IAAI,IAAI,KAAK,KAAK;CAEnC,KAAK,MAAM,aAAa,YAAY;EAClC,MAAM,QAAQ,UAAU,MAAM,GAAG;EACjC,MAAM,WAAW,MAAM,IAAI;EAC3B,MAAM,WAAW,GAAG,MAAM,KAAK,GAAG,EAAE,SAAS,SAAS;EAEtD,MAAM,SAAS,IAAI,IAAI,QAAQ;EAC/B,IAAI,CAAC,QAAQ;EAEb,KAAK,MAAM,SAAS,OAAO,YAAY,CAAC,GAAG;GACzC,IAAI,MAAM,SAAS,gBAAgB;GACnC,MAAM,OAAO,KAAK,OAAO,MAAM,KAAK;GACpC,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK;GACxC,IAAI,CAAC,QAAQ;GAEb,MAAM,OAAO,gBAAgB,MAAM;GAEnC,IAAI,KAAK,SAAS,WAAW,KAAK,CAAC,KAAK,SAAS,gBAAgB,GAC/D,YAAY,IAAI,IAAI;QACf,IAAI,KAAK,SAAS,QAAQ,GAC/B,UAAU,IAAI,IAAI;QACb,IAAI,KAAK,SAAS,cAAc,GACrC,eAAe,IAAI,IAAI;QAClB,IAAI,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,QAAQ,KAAK,KAAK,SAAS,QAAQ,GACrF,SAAS,IAAI,IAAI;EAErB;CACF;CAEA,KAAK,WAAW,CAAC,GAAG,WAAW;CAC/B,KAAK,SAAS,CAAC,GAAG,SAAS;CAC3B,KAAK,cAAc,CAAC,GAAG,cAAc;CACrC,KAAK,QAAQ,CAAC,GAAG,QAAQ;AAC3B;AAEA,SAAgB,UAAU,MAA8B;CAEtD,MAAM,MAAM,aADE,aAAa,IACE,CAAC;CAE9B,MAAM,eAAe,IAAI,IAAI,sBAAsB;CAEnD,MAAM,UAAU,IAAI,IAAI,iCAAiC;CACzD,MAAM,SAAmB,CAAC;CAC1B,MAAM,eAAyB,CAAC;CAChC,MAAM,SAAmB,CAAC;CAC1B,MAAM,eAAyB,CAAC;CAChC,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CAEJ,IAAI,SACF,KAAK,MAAM,SAAS,QAAQ,YAAY,CAAC,GAAG;EAC1C,IAAI,MAAM,SAAS,gBAAgB;EACnC,MAAM,OAAO,KAAK,OAAO,MAAM,KAAK;EACpC,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK;EACxC,IAAI,CAAC,QAAQ;EAEb,MAAM,OAAO,gBAAgB,MAAM;EAEnC,IAAI,KAAK,SAAS,cAAc,GAC9B,aAAa,KAAK,IAAI;OACjB,IACL,KAAK,SAAS,QAAQ,KACtB,CAAC,KAAK,SAAS,aAAa,KAC5B,CAAC,KAAK,SAAS,aAAa,GAE5B,OAAO,KAAK,IAAI;OACX,IAAI,KAAK,SAAS,QAAQ,GAC/B,OAAO,KAAK,IAAI;OACX,IAAI,KAAK,SAAS,cAAc,GACrC,aAAa,KAAK,IAAI;OACjB,IAAI,KAAK,SAAS,YAAY,GACnC,YAAY;OACP,IAAI,KAAK,SAAS,YAAY,GACnC,YAAY;OACP,IAAI,KAAK,SAAS,cAAc,GACrC,cAAc;OACT,IAAI,KAAK,SAAS,iBAAiB,GACxC,iBAAiB;CAErB;CAGF,aAAa,MAAM;CACnB,aAAa,YAAY;CACzB,aAAa,MAAM;CACnB,aAAa,YAAY;CAEzB,MAAM,eAAe,aAAa,QAAQ,IAAI,KAAK,mBAAmB,CAAC,CAAC;CACxE,MAAM,cAAc,aAAa,QAAQ,IAAI,KAAK,kBAAkB,CAAC,CAAC;CAEtE,MAAM,WAAyB;EAC7B;EACA;EACA;EACA,UAAU,CAAC;EACX,QAAQ,CAAC;EACT,aAAa,CAAC;EACd,OAAO,IAAI,KAAK,YAAY;CAC9B;CAEA,eAAe,KAAK,QAAQ,QAAQ;CACpC,aAAa,SAAS,QAAQ;CAC9B,aAAa,SAAS,MAAM;CAC5B,aAAa,SAAS,WAAW;CAEjC,MAAM,EAAE,WAAW,UAAU,gBAAgB,cAAc,GAAG;CAE9D,OAAO;EACL;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;AACF;;;;AAKA,SAAS,iBAAiB,KAAoB,WAAwC;CACpF,MAAM,uBAAO,IAAI,IAAoB;CACrC,MAAM,QAAQ,UAAU,MAAM,GAAG;CACjC,MAAM,WAAW,MAAM,IAAI;CAC3B,MAAM,WAAW,GAAG,MAAM,KAAK,GAAG,EAAE,SAAS,SAAS;CAEtD,MAAM,SAAS,IAAI,IAAI,QAAQ;CAC/B,IAAI,CAAC,QAAQ,OAAO;CAEpB,KAAK,MAAM,SAAS,OAAO,YAAY,CAAC,GAAG;EACzC,IAAI,MAAM,SAAS,gBAAgB;EACnC,MAAM,KAAK,KAAK,OAAO,IAAI,KAAK;EAChC,MAAM,SAAS,KAAK,OAAO,QAAQ,KAAK;EACxC,IAAI,CAAC,MAAM,CAAC,QAAQ;EAEpB,IAAI,KAAK,OAAO,YAAY,MAAM,YAChC,KAAK,IAAI,IAAI,MAAM;OAEnB,KAAK,IAAI,IAAI,gBAAgB,MAAM,CAAC;CAExC;CAEA,OAAO;AACT;;;;AAKA,SAAS,kBACP,KACA,OACA,WACqB;CACrB,MAAM,sBAAM,IAAI,IAAoB;CACpC,KAAK,MAAM,QAAQ,OACjB,KAAK,MAAM,UAAU,iBAAiB,KAAK,IAAI,CAAC,CAAC,OAAO,GACtD,IAAI,UAAU,MAAM,GAAG,IAAI,IAAI,MAAM,MAAM;CAG/C,OAAO;AACT;;;;;;AAOA,SAAS,mBACP,cACA,KACqB;CACrB,MAAM,gCAAgB,IAAI,IAAoB;CAC9C,IAAI,CAAC,cAAc,OAAO;CAE1B,MAAM,SAAS,UAAU,cAAc,UAAU;CACjD,IAAI,CAAC,QAAQ,OAAO;CAEpB,IAAI;CACJ,KAAK,MAAM,OAAO,OAAO,YAAY,CAAC,GAAG;EACvC,IAAI,IAAI,SAAS,SAAS;EAC1B,IAAI,KAAK,KAAK,KAAK,MAAM,0CAA0C;EACnE,aAAa,UAAU,KAAK,gBAAgB;EAC5C,IAAI,YAAY;CAClB;CACA,IAAI,CAAC,YAAY,OAAO;CAGxB,MAAM,mCAAmB,IAAI,IAAoB;CACjD,KAAK,MAAM,WAAW,WAAW,YAAY,CAAC,GAAG;EAC/C,IAAI,QAAQ,SAAS,eAAe;EACpC,MAAM,OAAO,KAAK,SAAS,MAAM;EACjC,IAAI,CAAC,MAAM;EACX,MAAM,WAAW,UAAU,SAAS,cAAc;EAClD,KAAK,MAAM,SAAS,UAAU,YAAY,CAAC,GAAG;GAC5C,IAAI,MAAM,SAAS,aAAa;GAChC,MAAM,KAAK,QAAQ,OAAO,IAAI;GAC9B,IAAI,OAAO,KAAA,GAAW,iBAAiB,IAAI,IAAI,IAAI;EACrD;CACF;CACA,IAAI,iBAAiB,SAAS,GAAG,OAAO;CAGxC,MAAM,WAAW,UAAU,cAAc,YAAY;CACrD,MAAM,+BAAe,IAAI,IAAoB;CAC7C,KAAK,MAAM,SAAS,UAAU,YAAY,CAAC,GAAG;EAC5C,IAAI,MAAM,SAAS,WAAW;EAC9B,MAAM,KAAK,QAAQ,OAAO,IAAI;EAC9B,MAAM,MAAM,KAAK,OAAO,MAAM;EAC9B,IAAI,OAAO,KAAA,KAAa,KAAK,aAAa,IAAI,IAAI,GAAG;CACvD;CAGA,MAAM,SAAS,IAAI,IAAI,iCAAiC;CACxD,MAAM,4BAAY,IAAI,IAAoB;CAC1C,KAAK,MAAM,SAAS,QAAQ,YAAY,CAAC,GAAG;EAC1C,IAAI,MAAM,SAAS,gBAAgB;EACnC,MAAM,KAAK,KAAK,OAAO,IAAI;EAC3B,MAAM,SAAS,KAAK,OAAO,QAAQ;EACnC,IAAI,MAAM,QAAQ,UAAU,IAAI,IAAI,gBAAgB,MAAM,CAAC;CAC7D;CAEA,KAAK,MAAM,CAAC,SAAS,SAAS,kBAAkB;EAC9C,MAAM,MAAM,aAAa,IAAI,OAAO;EACpC,IAAI,CAAC,KAAK;EACV,MAAM,OAAO,UAAU,IAAI,GAAG;EAC9B,IAAI,MAAM,cAAc,IAAI,MAAM,IAAI;CACxC;CAEA,OAAO;AACT;;;;;;;;;;;AAYA,SAAgB,kBAAkB,MAAqC;CACrE,MAAM,OAAO,UAAU,IAAI;CAC3B,MAAM,OAAqC,CAAC;CAC5C,MAAM,qBAAqB,mBAAmB,KAAK,cAAc,KAAK,GAAG;CAGzE,IAAI,KAAK,cAAc;EACrB,MAAM,QAAQ,UAAU,KAAK,cAAc,SAAS;EACpD,IAAI,OAAO;GACT,MAAM,KAAK,QAAQ,OAAO,IAAI;GAC9B,MAAM,KAAK,QAAQ,OAAO,IAAI;GAC9B,IAAI,OAAO,WAAY,OAAO,QAC5B,KAAK,OAAO;QACP,IAAI,OAAO,UAAW,OAAO,QAClC,KAAK,OAAO;QACP,IAAI,MAAM,IACf,KAAK,OAAO;IAAE,OAAO;IAAI,QAAQ;GAAG;EAExC;CACF;CAGA,IAAI,KAAK,WAAW;EAClB,MAAM,cAAc,KAAK,IAAI,IAAI,KAAK,SAAS;EAC/C,IAAI,aAAa;GACf,MAAM,KAAK,sBAAsB,WAAW;GAC5C,IAAI,GAAG,OAAO,KAAK,QAAQ,GAAG;GAC9B,IAAI,GAAG,SAAS,KAAK,UAAU,GAAG;GAClC,IAAI,GAAG,SAAS,KAAK,UAAU,GAAG;GAClC,IAAI,GAAG,UAAU,KAAK,WAAW,GAAG;GACpC,IAAI,GAAG,aAAa,KAAK,cAAc,GAAG;GAC1C,IAAI,GAAG,gBAAgB,KAAK,iBAAiB,GAAG;GAChD,IAAI,GAAG,aAAa,KAAA,GAAW,KAAK,WAAW,GAAG;GAClD,IAAI,GAAG,aAAa,KAAK,cAAc,GAAG;GAC1C,IAAI,GAAG,SAAS,KAAK,UAAU,GAAG;GAClC,IAAI,GAAG,UAAU,KAAK,WAAW,GAAG;EACtC;CACF;CAGA,IAAI,KAAK,UAAU;EACjB,MAAM,aAAa,KAAK,IAAI,IAAI,KAAK,QAAQ;EAC7C,IAAI,YAAY;GACd,MAAM,KAAK,kBAAkB,MAAM,YAAY,CAAC,CAAgB;GAChE,IAAI,MAAM,OAAO,KAAK,EAAE,CAAC,CAAC,SAAS,GAAG,KAAK,gBAAgB;EAC7D;CACF;CAGA,IAAI,KAAK,aAAa;EACpB,MAAM,gBAAgB,KAAK,IAAI,IAAI,KAAK,WAAW;EACnD,IAAI,eAAe;GACjB,MAAM,KAAK,qBAAqB,MAAM,eAAe,CAAC,CAAgB;GACtE,IAAI,GAAG,YAAY,QAAQ,KAAK,mBAAmB,GAAG;EACxD;CACF;CAGA,IAAI,KAAK,WAAW;EAClB,MAAM,cAAc,KAAK,IAAI,IAAI,KAAK,SAAS;EAC/C,IAAI,aAAa;GACf,MAAM,gBAAgB,cAAc,MAAM,aAAa,CAAC,CAAgB;GACxE,IAAI,cAAc,MAAM,KAAK,OAAO,cAAc;EACpD;CACF;CAGA,IAAI,KAAK,WAAW;EAClB,MAAM,cAAc,KAAK,IAAI,IAAI,KAAK,SAAS;EAC/C,IAAI,aAAa;GACf,MAAM,WAAW,cAAc,MAAM,aAAa,CAAC,CAAgB;GACnE,IAAI,SAAS,YAAY,SAAS,iBAAiB,KAAA,KAAa,SAAS,aACvE,KAAK,OAAO;EAEhB;CACF;CAGA,IAAI,KAAK,aAAa;EACpB,MAAM,gBAAgB,KAAK,IAAI,IAAI,KAAK,WAAW;EACnD,IAAI,eAAe;GACjB,MAAM,oBAAoB,gBAAgB,MAAM,eAAe,CAAC,CAAgB;GAChF,IAAI,kBAAkB,MAAM,KAAK,cAAc,kBAAkB;EACnE;CACF;CAGA,MAAM,mBAAmB,kBAAkB,KAAK,KAAK,KAAK,eAAe,MACvE,EAAE,SAAS,QAAQ,CACrB;CACA,MAAM,oBAAoB,kBAAkB,KAAK,KAAK,KAAK,eAAe,MACxE,EAAE,SAAS,cAAc,CAC3B;CACA,MAAM,mBAAmB,kBAAkB,KAAK,KAAK,KAAK,SAAS,MACjE,EAAE,SAAS,cAAc,CAC3B;CAGA,MAAM,cAAc,KAAK,aAAa;CACtC,MAAM,aAAiC,CAAC;CACxC,MAAM,gBAAgB,IAAI,gBAAgB,IAAI,aAAa,sBAAM,IAAI,IAAI,CAAC,CAAC;CAC3E,KAAK,IAAI,KAAK,GAAG,KAAK,aAAa,MAAM;EACvC,MAAM,aAAa,KAAK,aAAa;EACrC,MAAM,WAAW,KAAK,IAAI,IAAI,UAAU;EACxC,IAAI,CAAC,UAAU;EAGf,MAAM,YAAY,iBAAiB,IAAI,UAAU;EACjD,MAAM,UAAU,YAAY,KAAK,IAAI,IAAI,SAAS,IAAI,KAAA;EACtD,MAAM,eAAe,UAAU,UAAU,MAAM,SAAS,aAAa,IAAI,KAAA;EAGzE,MAAM,OAAO,UAAU,UAAU,QAAQ;EACzC,MAAM,KAAK,OAAO,UAAU,MAAM,MAAM,IAAI,KAAA;EAC5C,MAAM,mBAAmB,KAAK,eAAe,MAAM,IAAI,aAAa,IAAI,KAAA;EACxE,MAAM,gBAAgB,oBAAoB,OAAO,KAAK,gBAAgB,CAAC,CAAC,SAAS;EAGjF,MAAM,SAAS,OAAO,UAAU,MAAM,UAAU,IAAI,KAAA;EACpD,MAAM,iBAA+B,CAAC;EACtC,IAAI,QACF,KAAK,MAAM,SAAS,OAAO,YAAY,CAAC,GAAG;GAEzC,IAAI,MAAM,SAAS,iBAAiB,MAAM,SAAS,aAAa;GAEhE,IAAI,MAAM,SAAS,QAAQ;IACzB,MAAM,SAAS,UAAU,OAAO,UAAU;IAC1C,MAAM,OAAO,SAAS,UAAU,QAAQ,QAAQ,IAAI,KAAA;IACpD,IAAI,QAAQ,UAAU,MAAM,MAAM,GAAG;GACvC;GACA,MAAM,SAAS,WAAW,OAAO,aAAa;GAC9C,IAAI,WAAW,KAAA,GAAW,eAAe,KAAK,MAAM;EACtD;EAIF,MAAM,gBAAoC,CAAC;EAC3C,KAAK,MAAM,cAAc,KAAK,cAAc;GAC1C,IAAI,kBAAkB,IAAI,UAAU,MAAM,YAAY;GACtD,MAAM,WAAW,KAAK,IAAI,IAAI,UAAU;GACxC,IAAI,UAAU;IACZ,MAAM,aAAa,gBAAgB,MAAM,UAAU,aAAa;IAChE,MAAM,YAA8B,EAClC,MAAO,WAAW,QAAQ,QAC5B;IACA,IAAI,WAAW,cAAc,UAAU,eAAe,WAAW;IACjE,cAAc,KAAK,SAAS;GAC9B;EACF;EAEA,MAAM,aAAa,cAAc,QAAQ,SAAS,KAAK;EACvD,MAAM,YAAuC,CAAC;EAC9C,UAAU,OAAO;EACjB,IAAI,cAAc,UAAU,QAAQ;EACpC,IAAI,eAAe,UAAU,aAAa;EAK1C,IAAI,eAAe,SAAS,GAAG,UAAU,WAAW;EACpD,IAAI,cAAc,SAAS,GAAG,UAAU,UAAU;EAClD,WAAW,KAAK,SAA6B;CAC/C;CAGA,IAAI,cAAc,GAChB,KAAK,UAAU;CAIjB,KAAK,MAAM,UAAU,KAAK,SAAS,cAAc;EAC/C,MAAM,OAAO,KAAK,IAAI,IAAI,MAAM;EAChC,IAAI,MAAM;GACR,MAAM,SAAS,gBAAgB,MAAM,MAAM,aAAa;GACxD,IAAI,OAAO,SAAS;IAClB,KAAK,qBAAqB;IAC1B,KAAK,qBAAqB,OAAO;GACnC;EACF;CACF;CAMA,MAAM,iCAAiB,IAAI,IAAgD;CAC3E,IAAI,KAAK,SAAS,gBAAgB;EAChC,MAAM,YAAY,KAAK,IAAI,IAAI,KAAK,SAAS,cAAc;EAC3D,IAAI,WAAW;GACb,MAAM,UAAU,mBAAmB,MAAM,WAAW,aAAa;GACjE,KAAK,MAAM,KAAK,SACd,eAAe,IAAI,EAAE,IAAI;IAAE,MAAM,EAAE;IAAM,UAAU,EAAE;GAAS,CAAC;EAEnE;CACF;CAGA,MAAM,SAAyB,CAAC;CAChC,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,OAAO,QAAQ,MAAM;EAC9C,MAAM,YAAY,KAAK,OAAO;EAC9B,MAAM,UAAU,KAAK,IAAI,IAAI,SAAS;EACtC,IAAI,CAAC,SAAS;EAEd,MAAM,YAAY,iBAAiB,KAAK,KAAK,SAAS;EAEtD,MAAM,UAAU,IAAI,gBAAgB,IADpB,aAAa,MAAM,SACG,CAAC;EAMvC,MAAM,YAAY,UAAU,MAAM,SAAS,OAAO;EAGlD,MAAM,aAAa,iBAAiB,IAAI,SAAS;EACjD,IAAI,YAAY;GACd,MAAM,WAAW,KAAK,IAAI,IAAI,UAAU;GACxC,IAAI,UAEF,UAAU,SADS,gBAAgB,MAAM,UAAU,OACtB,CAAC,CAAC,QAAQ;GAGzC,MAAM,qBAAqB,kBAAkB,IAAI,UAAU;GAC3D,IAAI,oBAAoB;IACtB,MAAM,YAAY,KAAK,aAAa,QAAQ,kBAAkB;IAC9D,IAAI,aAAa,KAAK,WAAW,YAC/B,UAAU,SAAS,WAAW,UAAU,CAAC;GAE7C;EACF;EAGA,KAAK,MAAM,GAAG,YAAY,WAAW;GACnC,IAAI,CAAC,QAAQ,SAAS,YAAY,GAAG;GACrC,MAAM,aAAa,KAAK,IAAI,IAAI,OAAO;GACvC,IAAI,CAAC,YAAY;GAEjB,MAAM,iBAAiB,kBAAkB,MAAM,YAAY,OAAO;GAClE,IAAI,eAAe,SAAS,GAAG;IAC7B,MAAM,WAA2C,CAAC;IAClD,KAAK,MAAM,MAAM,gBAAgB;KAC/B,MAAM,QAAsC;MAAE,GAAG,GAAG;MAAG,GAAG,GAAG;KAAE;KAC/D,IAAI,GAAG,MAAM,MAAM,OAAO,GAAG;KAC7B,IAAI,GAAG,MAAM,MAAM,OAAO,GAAG;KAC7B,IAAI,GAAG,aAAa,KAAA,GAAW,MAAM,WAAW,GAAG;KACnD,MAAM,SAAS,eAAe,IAAI,GAAG,QAAQ;KAC7C,IAAI,QAAQ;MACV,MAAM,SAAS,OAAO;MACtB,IAAI,OAAO,UAAU,MAAM,WAAW,OAAO;KAC/C;KACA,SAAS,KAAK,KAAK;IACrB;IACA,IAAI,SAAS,SAAS,GAAG,UAAU,WAAW;GAChD;GACA;EACF;EAGA,KAAK,MAAM,GAAG,YAAY,WAAW;GACnC,IAAI,CAAC,QAAQ,SAAS,eAAe,GAAG;GACxC,MAAM,UAAU,KAAK,IAAI,IAAI,OAAO;GACpC,IAAI,CAAC,SAAS;GACd,MAAM,YAAY,eAAe,MAAM,SAAS,OAAO;GACvD,IAAI,UAAU,MAAM,UAAU,QAAQ,UAAU;GAChD;EACF;EAGA,MAAM,cAAc,mBAAmB,IAAI,SAAS;EACpD,IAAI,aAAa,UAAU,UAAU;EAErC,OAAO,KAAK,SAAyB;CACvC;CAEA,KAAK,SAAS;CACd,OAAO;AACT"} |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is too big to display
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
32
23.08%4
-20%999837
-0.21%7120
-0.52%1
Infinity%+ Added
+ Added
- Removed
- Removed
Updated
Updated