pptx-vanilla-viewer 2.9.0 → 2.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import "jszip";
3
3
  import { ChatTransport, LanguageModel, ToolSet, UIMessage } from "ai";
4
4
  import "pptx-viewer-mcp";
5
5
  import { Options } from "html2canvas-pro";
6
- //#region ../core/dist/text-operations-BtHy_zMG.d.ts
6
+ //#region ../core/dist/text-operations-RYdDEI5D.d.ts
7
7
  //#region src/core/types/actions.d.ts
8
8
  /**
9
9
  * Action types: hyperlinks, slide jumps, macros, and action buttons.
@@ -3144,6 +3144,18 @@ interface PptxChartDataPoint {
3144
3144
  }
3145
3145
  /** Schema values accepted by `c:dLblPos`. */
3146
3146
  type PptxChartDataLabelPosition = 'bestFit' | 'b' | 'ctr' | 'inBase' | 'inEnd' | 'l' | 'outEnd' | 'r' | 't';
3147
+ /**
3148
+ * `c15:dlblRangeCache`/`c15:datalabelsRange` (CT_SeriesDataLabelsRange):
3149
+ * PowerPoint 2013+'s "Value From Cells" custom label source, one cell range
3150
+ * supplying every label in a group (chart-type or series `c:dLbls`), with a
3151
+ * cache aligned to point order. See `utils/chart-data-labels-range.ts`.
3152
+ */
3153
+ interface PptxChartDataLabelsRange {
3154
+ /** `c15:f`: the cell range formula (e.g. `Sheet1!$D$2:$D$5`). */
3155
+ formula: string;
3156
+ /** `c15:dlblRangeCache`: cached label text, index-aligned with data points. */
3157
+ cache: string[];
3158
+ }
3147
3159
  /** Individual data label override (c:dLbl). */
3148
3160
  interface PptxChartDataLabel {
3149
3161
  idx: number;
@@ -3185,6 +3197,14 @@ interface PptxChartDataLabel {
3185
3197
  * over any chart/series-level default when set.
3186
3198
  */
3187
3199
  spPr?: PptxChartShapeProps;
3200
+ /**
3201
+ * `c15:xForSave`: this override exists only so its properties survive a
3202
+ * save/reload round trip; PowerPoint merges it back onto the series'
3203
+ * default label on load. Round-tripped as-is (an edited chart keeps an
3204
+ * existing point's whole `extLst`, this flag included); introspection
3205
+ * only otherwise. See `utils/chart-data-labels-range.ts`.
3206
+ */
3207
+ savedForCompatibilityOnly?: boolean;
3188
3208
  }
3189
3209
  /** Axis number format. */
3190
3210
  interface PptxChartAxisNumFmt {
@@ -3573,6 +3593,22 @@ interface PptxChartDataLabelOptions {
3573
3593
  * (point > series > chart-type).
3574
3594
  */
3575
3595
  txPr?: PptxChartLegendTextStyle;
3596
+ /**
3597
+ * PowerPoint 2013+ "Value From Cells", series-wide form
3598
+ * (`c15:datalabelsRange`, chart15 uri `{CE6537A1-...}`): one cell range
3599
+ * supplies every label in this group, aligned by point index. A
3600
+ * SERIES-WIDE alternative to the per-point `c15:dlblFieldTable` mechanism
3601
+ * (already resolved into {@link PptxChartDataLabel.text} at parse time).
3602
+ * See `utils/chart-data-labels-range.ts`.
3603
+ */
3604
+ dataLabelsRange?: PptxChartDataLabelsRange;
3605
+ /**
3606
+ * `c15:showDataLabelsRange` at the SAME level as {@link dataLabelsRange}:
3607
+ * whether every label in this group resolves through the range's cache.
3608
+ * Distinct from the per-point {@link PptxChartDataLabel} flag of the same
3609
+ * XML name. Only meaningful when {@link dataLabelsRange} is set.
3610
+ */
3611
+ showDataLabelsRange?: boolean;
3576
3612
  }
3577
3613
  /** Typed text defaults for a single chart legend entry. */
3578
3614
  interface PptxChartLegendTextStyle {
@@ -3847,6 +3883,19 @@ interface PptxChartData {
3847
3883
  * when the chart has no such extension. See {@link PptxChartFilteredSeries}.
3848
3884
  */
3849
3885
  filteredSeries?: PptxChartFilteredSeries[];
3886
+ /**
3887
+ * `c15:filteredSeriesTitle`: the auto-generated series title text (e.g.
3888
+ * "Series 3") PowerPoint preserved when the chart filter hid the series
3889
+ * whose data would otherwise have supplied it. See
3890
+ * `utils/chart-ext-titles.ts`. Read-mostly like {@link filteredSeries}.
3891
+ */
3892
+ filteredSeriesTitle?: string;
3893
+ /**
3894
+ * `c15:filteredCategoryTitle`: the auto-numbered category labels ("1",
3895
+ * "2", "3", ...) PowerPoint preserved when the chart filter hid the
3896
+ * category axis source entirely. See `utils/chart-ext-titles.ts`.
3897
+ */
3898
+ filteredCategoryTitle?: string[];
3850
3899
  /** Chart style/formatting metadata. */
3851
3900
  style?: PptxChartStyle;
3852
3901
  /** Grouping mode for bar/area/line charts: 'clustered' | 'stacked' | 'percentStacked' */
@@ -4769,7 +4818,95 @@ interface PptxSmartArtLayoutNode {
4769
4818
  rules?: PptxSmartArtNumericRule[];
4770
4819
  /** `dgm:shape`: this node's own preset geometry override, when present. */
4771
4820
  shape?: PptxSmartArtLayoutNodeShape;
4821
+ /**
4822
+ * `dgm:presOf` (CT_PresentationOf, same iterator shape as `dgm:forEach`):
4823
+ * which data-model point(s) this node's OWN text/geometry binds to -
4824
+ * `axis: ['self']` the point currently being iterated, `['des']` all of
4825
+ * its descendants, `['ch']` its direct children, and so on. Absent or
4826
+ * empty `axis` (including a bare `<dgm:presOf/>`) means the node carries
4827
+ * no text of its own (a pure positioning/decoration wrapper - `composite`,
4828
+ * `sp` spacer, connector cap). See `smartart-layout-interpreter-item-
4829
+ * roles.ts`, the one consumer: it is what lets the interpreter tell a
4830
+ * text-bearing per-item role (a list layout's `childText`, a card
4831
+ * layout's `roleText`/`bodyText`) apart from a same-generation sibling
4832
+ * that positions or decorates instead.
4833
+ */
4834
+ presentationOf?: PptxSmartArtIteratorAttributes;
4835
+ /**
4836
+ * EVERY `dgm:constr` reachable from this node, including ones declared
4837
+ * inside a `dgm:choose`/`dgm:if`/`dgm:else` that wraps THIS layoutNode's
4838
+ * `constrLst` (a genuinely conditional constraint set, e.g. one branch
4839
+ * per data-point count - `gear`'s composite positions its `gear1`/
4840
+ * `gear2`/`gear3` slots this way, so its plain, direct-child-only
4841
+ * `constraints` above is empty for it). Stops at a nested `dgm:layoutNode`
4842
+ * boundary: that child's own conditional constrLst becomes ITS
4843
+ * `allConstraints`, not folded into the parent's. Read-only /
4844
+ * interpretation-only - `constraints` above (this node's own DIRECT
4845
+ * constrLst) remains the one `applySmartArtLayoutDefinition` round-trips,
4846
+ * so editing an unrelated property can never collapse a genuinely
4847
+ * conditional constrLst into a single branch. `undefined` when this node
4848
+ * declares no constrLst at all, in or out of a choose (the common case);
4849
+ * otherwise a superset of `constraints` (every branch, blindly unioned -
4850
+ * this interpreter does not evaluate `dgm:choose` conditions when
4851
+ * indexing constraints, matching the same "flatten both branches"
4852
+ * convention `nestedLayoutNodes` already uses for `children`). See
4853
+ * `smartart-constraint-solver.ts`'s `buildConstraintIndex`, the only
4854
+ * consumer.
4855
+ */
4856
+ allConstraints?: PptxSmartArtConstraint[];
4772
4857
  children?: PptxSmartArtLayoutNode[];
4858
+ /**
4859
+ * The iterator attributes of the ENCLOSING `dgm:forEach` this node was
4860
+ * found through, when `nestedLayoutNodes` (`smartart-layout-definition
4861
+ * .ts`) reached it by walking one - as opposed to being a direct child of
4862
+ * its parent layoutNode, or reached only through a `dgm:choose` wrapper
4863
+ * (a condition, not an iteration, leaves this `undefined`).
4864
+ *
4865
+ * `forEach` above records a node's OWN direct `dgm:forEach` children
4866
+ * (which wrap ITS descendants); this is the opposite direction - the
4867
+ * forEach that wraps the node ITSELF, one level up. A layoutNode can sit
4868
+ * inside more than one enclosing forEach only via nesting, so this is
4869
+ * always the SINGLE nearest one, not a list.
4870
+ *
4871
+ * This is what tells a genuinely repeated per-child template
4872
+ * (`axis="ch"`, `ptType` absent or `"node"`) apart from a once-only or
4873
+ * transition-only sibling that merely happens to sit inside SOME
4874
+ * `dgm:forEach` (a `ptType="parTrans"`/`"sibTrans"` connector, or
4875
+ * `axis="followSib" cnt="1"`) - both can be direct siblings under the
4876
+ * SAME parent layoutNode (`lProcess1`'s `vertFlow` has one forEach for
4877
+ * its `parTrans` connector and a SEPARATE one, `axis="ch"`, for its
4878
+ * repeated `child` items; `vertFlow.forEach` bundles both, but only
4879
+ * `child.forEachOrigin` says which ONE produced it). See
4880
+ * `smartart-layout-interpreter-item-roles-recursive.ts`, the one
4881
+ * consumer. Read-only / interpretation-only, like `allConstraints`:
4882
+ * never round-tripped by `applySmartArtLayoutDefinition`.
4883
+ */
4884
+ forEachOrigin?: PptxSmartArtIteratorAttributes;
4885
+ /**
4886
+ * The condition of the NEAREST enclosing `dgm:if` this node was found
4887
+ * through, when `nestedLayoutNodes` (`smartart-layout-definition.ts`)
4888
+ * reached it via a `dgm:choose`'s `if` branch (as opposed to a direct
4889
+ * child, a `dgm:else` branch - always `undefined` here, see below - or a
4890
+ * `dgm:forEach`, which sets {@link forEachOrigin} instead). Lets a
4891
+ * caller that already has the data-model node list decide whether this
4892
+ * node's OWN branch is genuinely live for a specific point, instead of
4893
+ * treating every choose-flattened branch as unconditionally present
4894
+ * (`nestedLayoutNodes`' pre-existing "flatten every branch" convention,
4895
+ * still the default when this is absent or a caller does not evaluate
4896
+ * it) - e.g. `cycle-matrix--fallback-n2.pptx`'s `child1group`..
4897
+ * `child4group`, each gated on a DIFFERENT top-level point existing and
4898
+ * having its own child (`axis="ch ch" st="N 1" cnt="1 0" func="cnt"
4899
+ * op="gte" val="1"`).
4900
+ *
4901
+ * Deliberately `undefined` for a `dgm:else` branch: ECMA-376 defines it
4902
+ * as "none of the sibling ifs matched", which would need the FULL
4903
+ * sibling list's conditions negated and ANDed together, not a single
4904
+ * condition - no gallery fixture measured needs an else branch's own
4905
+ * guard yet, so it is left unconditional (rendered by default, matching
4906
+ * the pre-existing flatten-everything behaviour) rather than guessed at.
4907
+ * Evaluate with `smartart-layout-interpreter-when.ts`'s `evaluateWhen`.
4908
+ */
4909
+ chooseGuard?: PptxSmartArtWhen;
4773
4910
  }
4774
4911
  /** Metadata and root node from DiagramML CT_DiagramDefinition. */
4775
4912
  interface PptxSmartArtLayoutDefinition {
@@ -5402,6 +5539,14 @@ interface PptxSmartArtData {
5402
5539
  * Consulted by the fallback layout engine for direction/org-chart hints.
5403
5540
  */
5404
5541
  presLayoutVars?: PptxSmartArtPresLayoutVars;
5542
+ /**
5543
+ * The deck's own theme minor-Latin font (`a:fontScheme/a:minorFont/a:latin/
5544
+ * @typeface`): what SmartArt text actually renders in when no per-run
5545
+ * `a:latin` override is present (the common case - see
5546
+ * `smartart-layout-item-font-size.ts`'s font-fit, the one consumer).
5547
+ * Undefined when the theme carries no font scheme at all.
5548
+ */
5549
+ themeMinorFont?: string;
5405
5550
  /** Relationship ID for the diagram data part (for round-trip save). */
5406
5551
  dataRelId?: string;
5407
5552
  /** Relationship ID for the diagram layout part. */
@@ -6361,7 +6506,7 @@ interface SmartArtPptxElement extends PptxElementBase {
6361
6506
  *
6362
6507
  * Used to show type-specific icons and previews in the editor.
6363
6508
  */
6364
- type OleObjectType = 'excel' | 'word' | 'pdf' | 'visio' | 'mathtype' | 'package' | 'unknown';
6509
+ type OleObjectType = 'excel' | 'word' | 'powerpoint' | 'pdf' | 'visio' | 'mathtype' | 'package' | 'unknown';
6365
6510
  /**
6366
6511
  * An OLE (Object Linking and Embedding) object.
6367
6512
  *
@@ -6439,6 +6584,15 @@ interface OlePptxElement extends PptxElementBase {
6439
6584
  * `false`; `undefined` means the source authored no explicit value.
6440
6585
  */
6441
6586
  oleUpdateAutomatic?: boolean;
6587
+ /**
6588
+ * Set by the in-viewer OLE content editors (`ole-edit-api.ts`) whenever
6589
+ * `oleEmbeddedData` and/or `previewImageData` have been changed in memory
6590
+ * and still need to be written back into the saved package. Never
6591
+ * authored from a parsed file; purely an in-memory save signal, mirroring
6592
+ * `PptxSlide.isDirty`. The save writer clears it once the pending write
6593
+ * has been queued.
6594
+ */
6595
+ oleContentDirty?: boolean;
6442
6596
  /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6443
6597
  altText?: string;
6444
6598
  /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
@@ -7368,10 +7522,27 @@ interface PptxNativeAnimation {
7368
7522
  buildLevel?: number;
7369
7523
  /** Group ID linking a `p:bldP` entry to its timing animation node. */
7370
7524
  groupId?: string;
7371
- /** Sound relationship ID to play when animation triggers (`p:stSnd`). */
7525
+ /**
7526
+ * Sound relationship ID to play when animation triggers. Modern PowerPoint
7527
+ * (COM-verified against 2016) writes this as a `p:audio/p:cMediaNode`
7528
+ * sibling of the effect's own `p:childTnLst`, targeting `p:sndTgt` rather
7529
+ * than a shape; the legacy `p:stSnd` form (directly on `p:cTn`) is still
7530
+ * accepted on load for round-trip of older-authored decks, but PowerPoint
7531
+ * itself no longer writes it and does not recognise it back
7532
+ * (`Effect.EffectInformation.SoundEffect` reads empty against it).
7533
+ */
7372
7534
  soundRId?: string;
7373
7535
  /** Resolved sound file path from relationship. */
7374
7536
  soundPath?: string;
7537
+ /**
7538
+ * The embedded sound's `@_name` (from `p:snd`/`p:sndTgt`). For one of
7539
+ * PowerPoint's 19 built-in stock sounds this is the exact upper-case file
7540
+ * name PowerPoint itself writes (e.g. `"CHIMES.WAV"`); see
7541
+ * `pptx-viewer-shared`'s `effect-sound-catalogue.ts`, which matches this
7542
+ * value back to a gallery entry. Absent for a custom sound with no name,
7543
+ * or when unresolved.
7544
+ */
7545
+ soundName?: string;
7375
7546
  /** Whether to stop any currently playing sound (`p:endSnd`). */
7376
7547
  stopSound?: boolean;
7377
7548
  /**
@@ -7931,10 +8102,24 @@ interface PptxElementAnimation {
7931
8102
  motionPathRotationCenterX?: number;
7932
8103
  /** Motion-path rotation centre Y in slide percentage units (`p:rCtr/@y`). */
7933
8104
  motionPathRotationCenterY?: number;
7934
- /** Sound relationship ID to play when animation triggers (`p:stSnd`). */
8105
+ /**
8106
+ * Sound relationship ID to play when animation triggers. Written on save
8107
+ * as a `p:audio/p:cMediaNode` sibling of the effect's own `p:childTnLst`
8108
+ * (see `PptxNativeAnimation.soundRId` for the COM-verified detail).
8109
+ */
7935
8110
  soundRId?: string;
7936
8111
  /** Resolved sound file path from relationship. */
7937
8112
  soundPath?: string;
8113
+ /**
8114
+ * The `@_name` to write on the embedded sound (`p:sndTgt`). For a stock
8115
+ * gallery pick this is the exact PowerPoint file name (e.g.
8116
+ * `"CHIMES.WAV"`), which is what makes PowerPoint itself recognise the
8117
+ * sound as that built-in entry when it reopens the saved deck (there is no
8118
+ * separate "built-in" flag anywhere in the schema). Set by
8119
+ * `pptx-viewer-shared`'s `setEffectSound` when the pick carries a
8120
+ * `soundName`; absent for a custom file with no meaningful name.
8121
+ */
8122
+ soundName?: string;
7938
8123
  /** Whether to stop any currently playing sound (`p:endSnd`). */
7939
8124
  stopSound?: boolean;
7940
8125
  /**
@@ -7949,7 +8134,9 @@ interface PptxElementAnimation {
7949
8134
  /**
7950
8135
  * Display name for the chosen sound (e.g. the uploaded file's name),
7951
8136
  * shown by the authoring UI's sound picker. Purely cosmetic; has no
7952
- * OOXML equivalent and is not required for playback.
8137
+ * OOXML equivalent and is not required for playback. For a stock gallery
8138
+ * pick, the UI derives its label from {@link soundName} via the catalogue
8139
+ * instead of this field.
7953
8140
  */
7954
8141
  soundFileName?: string;
7955
8142
  /**
@@ -9644,7 +9831,7 @@ interface PptxEmbeddedFont {
9644
9831
  originalPartBytes?: Uint8Array;
9645
9832
  }
9646
9833
  //#endregion
9647
- //#region ../core/dist/index-0zviqnUe.d.ts
9834
+ //#region ../core/dist/index-D5JK1ibj.d.ts
9648
9835
  //#region src/core/types/theme-presets.d.ts
9649
9836
  /**
9650
9837
  * A complete theme preset that can be applied to a presentation.
@@ -10298,7 +10485,7 @@ interface PptxHandlerLoadOptions {
10298
10485
  allowExternalImages?: boolean;
10299
10486
  }
10300
10487
  /** Output format for the save pipeline. */
10301
- type PptxSaveFormat = 'pptx' | 'ppsx' | 'pptm';
10488
+ type PptxSaveFormat = 'pptx' | 'ppsx' | 'pptm' | 'ppt';
10302
10489
  interface PptxHandlerSaveOptions {
10303
10490
  headerFooter?: PptxHeaderFooter;
10304
10491
  presentationProperties?: PptxPresentationProperties;
@@ -10394,8 +10581,23 @@ interface PptxHandlerSaveOptions {
10394
10581
  * - `'pptx'` (default): Standard presentation.
10395
10582
  * - `'ppsx'`: Slide-show file (opens in presentation mode).
10396
10583
  * - `'pptm'`: Macro-enabled presentation (requires VBA data).
10584
+ * - `'ppt'`: Legacy binary PowerPoint 97-2003 presentation. Bypasses the
10585
+ * OOXML ZIP pipeline entirely; see `PptxHandlerRuntimeSaveLegacyPpt`.
10586
+ * Elements with no binary equivalent (charts, SmartArt, media, OLE, ink,
10587
+ * 3D models) are degraded to a rasterised preview picture or a labelled
10588
+ * placeholder, each reported via a `scope: 'save'`-adjacent
10589
+ * `PptxCompatibilityWarning`.
10397
10590
  */
10398
10591
  outputFormat?: PptxSaveFormat;
10592
+ /**
10593
+ * Password for RC4 CryptoAPI encryption of a `'ppt'`-format save. Ignored
10594
+ * for every other {@link outputFormat}; encrypting a `.pptx`/`.ppsx`/`.pptm`
10595
+ * save uses {@link IPptxHandlerRuntime.saveEncrypted}'s separate AES/Agile
10596
+ * OLE2 wrapping instead, since the legacy binary format's own encryption
10597
+ * scheme is embedded directly in the `.ppt` stream rather than wrapping an
10598
+ * already-produced package.
10599
+ */
10600
+ pptPassword?: string;
10399
10601
  /**
10400
10602
  * Embedded fonts to write back (or add) to the saved PPTX.
10401
10603
  *
@@ -11795,16 +11997,17 @@ interface SlideSizeEmu {
11795
11997
  * working loader unreachable in practice. Whenever the loader learns a format,
11796
11998
  * exactly one list has to change.
11797
11999
  *
11798
- * ## Read many, write one
12000
+ * ## Read many, write several
11799
12001
  *
11800
12002
  * Input is a superset of output. We READ `.pptx`, `.ppsx`, `.pptm`, `.potx`,
11801
- * legacy binary `.ppt` and portable `pptx-viewer-json`; we WRITE only the
11802
- * OpenXML family. That asymmetry is deliberate (PowerPoint itself does the
11803
- * same: open a 97-2003 deck and Save As offers `.pptx`), and it is why
11804
- * {@link savedPresentationFileName} always REPLACES the source extension
11805
- * rather than keeping it. A deck opened as `report.ppt` and saved as
11806
- * `report.ppt` would be a file whose bytes and whose name disagree, which is
11807
- * the kind of thing PowerPoint refuses to open.
12003
+ * legacy binary `.ppt` and portable `pptx-viewer-json`; we WRITE the OpenXML
12004
+ * family plus legacy binary `.ppt` (via `packages/core/src/core/ppt/writer/`,
12005
+ * a real MS-PPT/OLE2 encoder, not a stub). `savedPresentationFileName`
12006
+ * REPLACES the source extension with the extension of the format actually
12007
+ * being written rather than keeping the source's: a deck opened as
12008
+ * `report.pptx` and saved back as `.ppt` (or vice versa) must have its name
12009
+ * agree with its bytes, which is the kind of mismatch PowerPoint itself
12010
+ * refuses to open.
11808
12011
  *
11809
12012
  * This module deliberately imports nothing, so any layer (render, export, a
11810
12013
  * binding, a host app) can depend on it without risking an import cycle.
@@ -11819,9 +12022,9 @@ interface SlideSizeEmu {
11819
12022
  * suite, which asserts a `.ppt` loads to the same model as the `.pptx` it was
11820
12023
  * exported from.
11821
12024
  */
11822
- declare const PRESENTATION_OPEN_EXTENSIONS: readonly ['.pptx', '.ppsx', '.pptm', '.potx', '.ppt', '.json'];
12025
+ export declare const PRESENTATION_OPEN_EXTENSIONS: readonly ['.pptx', '.ppsx', '.pptm', '.potx', '.ppt', '.json'];
11823
12026
  /** Comma-separated `accept` attribute for a presentation file input. */
11824
- declare const PPTX_OPEN_ACCEPT: string;
12027
+ export declare const PPTX_OPEN_ACCEPT: string;
11825
12028
  /**
11826
12029
  * True when a picked / dropped file's name looks like something the loader can
11827
12030
  * open. Use this instead of a hand-rolled `endsWith` chain: a drop handler that
@@ -11832,27 +12035,32 @@ declare const PPTX_OPEN_ACCEPT: string;
11832
12035
  * `PptxHandler.load()`; this is only the cheap pre-filter a drop target needs
11833
12036
  * before it hands bytes to the loader.
11834
12037
  */
11835
- declare function isSupportedPresentationFile(name: string | null | undefined): boolean;
11836
- /** True for the binary PowerPoint 97-2003 family, which we read but never write. */
11837
- declare function isLegacyBinaryPresentation(name: string | null | undefined): boolean;
11838
- /** The formats the save path can produce. Binary `.ppt` is deliberately absent. */
11839
- type SavedPresentationFormat = 'pptx' | 'ppsx' | 'pptm';
12038
+ export declare function isSupportedPresentationFile(name: string | null | undefined): boolean;
12039
+ /**
12040
+ * True for the binary PowerPoint 97-2003 family. `.ppt` itself is now also a
12041
+ * SAVE target (see {@link SavedPresentationFormat}); `.pps`/`.pot` (97-2003
12042
+ * show/template) remain read-only siblings sharing the same record format.
12043
+ */
12044
+ export declare function isLegacyBinaryPresentation(name: string | null | undefined): boolean;
12045
+ /** The formats the save path can produce. */
12046
+ type SavedPresentationFormat = 'pptx' | 'ppsx' | 'pptm' | 'ppt';
11840
12047
  /**
11841
12048
  * The stem of a presentation file name: directories and any loadable extension
11842
12049
  * removed. `C:\decks\report.ppt` becomes `report`; a name with no recognised
11843
12050
  * extension is kept whole, so `Untitled Presentation` survives intact rather
11844
12051
  * than losing everything after its last dot.
11845
12052
  */
11846
- declare function presentationBaseName(sourceName: string | null | undefined, fallback?: string): string;
12053
+ export declare function presentationBaseName(sourceName: string | null | undefined, fallback?: string): string;
11847
12054
  /**
11848
12055
  * The name a saved copy should be offered under: the source stem plus the
11849
12056
  * extension of the format actually being written.
11850
12057
  *
11851
- * This is what turns `report.ppt` into `report.pptx` on Save As. Output is
11852
- * always an OpenXML package, so keeping the source extension would mislabel
11853
- * the bytes.
12058
+ * This is what turns `report.ppt` into `report.pptx` on a regular Save As,
12059
+ * and `report.pptx` into `report.ppt` when the user explicitly picks the
12060
+ * PowerPoint 97-2003 format. Keeping the source extension would mislabel the
12061
+ * bytes either way.
11854
12062
  */
11855
- declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
12063
+ export declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
11856
12064
  //#endregion
11857
12065
  //#region src/render/session-restore.d.ts
11858
12066
  /**
@@ -11893,24 +12101,24 @@ interface SessionDeck {
11893
12101
  * @param create Mint and persist an id when the tab does not have one yet.
11894
12102
  * Reads pass `false` so a fresh tab never claims another tab's record.
11895
12103
  */
11896
- declare function getSessionTabId(create?: boolean): string | null;
12104
+ export declare function getSessionTabId(create?: boolean): string | null;
11897
12105
  /**
11898
12106
  * Remember `data` as the deck this tab has open, so the next load can restore
11899
12107
  * it. Resolves `false` when the browser refused to store it; callers treat that
11900
12108
  * as "no restore available later", never as an error.
11901
12109
  */
11902
- declare function rememberSessionDeck(fileName: string, data: Uint8Array): Promise<boolean>;
12110
+ export declare function rememberSessionDeck(fileName: string, data: Uint8Array): Promise<boolean>;
11903
12111
  /** The deck remembered for this tab, or `null` when there is nothing to restore. */
11904
- declare function loadSessionDeck(): Promise<SessionDeck | null>;
12112
+ export declare function loadSessionDeck(): Promise<SessionDeck | null>;
11905
12113
  /** Forget this tab's deck (the host closed it, or handed the tab to another flow). */
11906
- declare function forgetSessionDeck(): Promise<void>;
12114
+ export declare function forgetSessionDeck(): Promise<void>;
11907
12115
  /**
11908
12116
  * The deck to reopen on load: this tab's remembered bytes, upgraded to a newer
11909
12117
  * autosave snapshot of the same file when the viewer wrote one after they were
11910
12118
  * remembered. Without that upgrade a refresh mid-edit would silently roll the
11911
12119
  * presentation back to the state it was opened in.
11912
12120
  */
11913
- declare function restoreSessionDeck(): Promise<SessionDeck | null>;
12121
+ export declare function restoreSessionDeck(): Promise<SessionDeck | null>;
11914
12122
  /** Optional seed values for the share start form. */
11915
12123
  interface ShareDefaults {
11916
12124
  roomId?: string;
@@ -11962,8 +12170,8 @@ interface PresentationInkStroke {
11962
12170
  width: number;
11963
12171
  points: PresentationInkPoint[];
11964
12172
  }
11965
- declare function parsePresentationSessionId(hash: string): string | null;
11966
- declare function loadPresentationDeck(sessionId: string): Promise<Uint8Array | null>;
12173
+ export declare function parsePresentationSessionId(hash: string): string | null;
12174
+ export declare function loadPresentationDeck(sessionId: string): Promise<Uint8Array | null>;
11967
12175
  //#endregion
11968
12176
  //#region src/render/presentation-blackboard.d.ts
11969
12177
  /** Blackout state, as carried by {@link PresentationSnapshot}. */
@@ -12204,11 +12412,13 @@ interface ReadOnlyRecommendation {
12204
12412
  /**
12205
12413
  * Whether lifting this recommendation requires a correct password, rather
12206
12414
  * than a plain "Edit anyway". True only for a `modifyVerifier` that carries
12207
- * a hash this viewer can actually check (`hashData` + `saltData` +
12208
- * `algorithmName`, see `checkModifyPassword`). "Mark as Final" is purely
12209
- * advisory and never requires one, and a `modifyVerifier` missing pieces of
12210
- * its hash cannot be verified either way, so both fall back to the plain
12211
- * "Edit anyway" a binding already had.
12415
+ * a hash this viewer can actually check (`hashData` plus a resolvable
12416
+ * algorithm, see `checkModifyPassword`; `saltData` is optional and NOT
12417
+ * required, a missing salt is still checkable). "Mark as Final" is purely
12418
+ * advisory and never requires one, and a `modifyVerifier` with no hash at
12419
+ * all, or naming an algorithm this viewer does not implement, cannot be
12420
+ * verified either way, so both fall back to the plain "Edit anyway" a
12421
+ * binding already had.
12212
12422
  */
12213
12423
  readonly requiresPassword: boolean;
12214
12424
  }
@@ -12252,7 +12462,7 @@ type TranslationMessages = Record<string, Record<string, string>>;
12252
12462
  * Build a {@link Translator} for a locale. `messages[locale]` (when provided)
12253
12463
  * wins over the built-in English dictionary; English is always the fallback.
12254
12464
  */
12255
- declare function createTranslator(locale?: string, messages?: TranslationMessages): Translator;
12465
+ export declare function createTranslator(locale?: string, messages?: TranslationMessages): Translator;
12256
12466
  //#endregion
12257
12467
  //#region src/viewer/state/store.d.ts
12258
12468
  /**
@@ -12273,7 +12483,7 @@ interface Store<T extends object> {
12273
12483
  /** Subscribe to state changes; returns an unsubscribe function. */
12274
12484
  subscribe(listener: StoreListener<T>): () => void;
12275
12485
  }
12276
- declare function createStore<T extends object>(initial: T): Store<T>;
12486
+ export declare function createStore<T extends object>(initial: T): Store<T>;
12277
12487
  //#endregion
12278
12488
  //#region src/viewer/render/types.d.ts
12279
12489
  /** Discriminant values of the {@link PptxElement} union (`'text'`, `'chart'`, ...). */
@@ -12494,7 +12704,7 @@ interface ElementRendererRegistry {
12494
12704
  * `./elements`) installs the built-in renderers plus the typed placeholder
12495
12705
  * fallback.
12496
12706
  */
12497
- declare function createElementRendererRegistry(): ElementRendererRegistry;
12707
+ export declare function createElementRendererRegistry(): ElementRendererRegistry;
12498
12708
  //#endregion
12499
12709
  //#region src/viewer/render/dom.d.ts
12500
12710
  /**
@@ -12502,11 +12712,11 @@ declare function createElementRendererRegistry(): ElementRendererRegistry;
12502
12712
  * of camelCase (`backgroundColor`) and kebab-case (`background-color`) keys;
12503
12713
  * both are normalised to `style.setProperty` calls.
12504
12714
  */
12505
- declare function applyStyleMap(el: HTMLElement | SVGElement, style: CssStyleMap): void;
12715
+ export declare function applyStyleMap(el: HTMLElement | SVGElement, style: CssStyleMap): void;
12506
12716
  /** Create an element with an optional class and style map. */
12507
- declare function createEl<K extends keyof HTMLElementTagNameMap>(doc: Document, tag: K, className?: string, style?: CssStyleMap): HTMLElementTagNameMap[K];
12717
+ export declare function createEl<K extends keyof HTMLElementTagNameMap>(doc: Document, tag: K, className?: string, style?: CssStyleMap): HTMLElementTagNameMap[K];
12508
12718
  /** Create a namespaced SVG element with optional attributes. */
12509
- declare function createSvgEl<K extends keyof SVGElementTagNameMap>(doc: Document, tag: K, attrs?: Record<string, string | number | undefined>): SVGElementTagNameMap[K];
12719
+ export declare function createSvgEl<K extends keyof SVGElementTagNameMap>(doc: Document, tag: K, attrs?: Record<string, string | number | undefined>): SVGElementTagNameMap[K];
12510
12720
  //#endregion
12511
12721
  //#region src/viewer/render/slide-stage.d.ts
12512
12722
  interface SlideStageOptions {
@@ -12607,7 +12817,7 @@ interface SlideStageOptions {
12607
12817
  * unscaled canvas size, so the caller should wrap it in a box sized to
12608
12818
  * `canvasSize * scale` (the viewer's stage host and thumbnails both do).
12609
12819
  */
12610
- declare function renderSlideStage(options: SlideStageOptions): HTMLElement;
12820
+ export declare function renderSlideStage(options: SlideStageOptions): HTMLElement;
12611
12821
  //#endregion
12612
12822
  //#region src/viewer/render/elements/index.d.ts
12613
12823
  /**
@@ -12618,7 +12828,7 @@ declare function renderSlideStage(options: SlideStageOptions): HTMLElement;
12618
12828
  * `contentPart`, `zoom`, and `model3d`. Only unknown extension elements fall
12619
12829
  * through to the typed placeholder fallback.
12620
12830
  */
12621
- declare function createDefaultRegistry(): ElementRendererRegistry;
12831
+ export declare function createDefaultRegistry(): ElementRendererRegistry;
12622
12832
  //#endregion
12623
12833
  //#region src/viewer/state/viewer-state.d.ts
12624
12834
  /** Why the last password attempt failed; see `checkModifyPassword` (`pptx-viewer-shared`). */
@@ -12897,7 +13107,7 @@ interface ViewerState {
12897
13107
  */
12898
13108
  compatToasts: CompatibilityWarningToast[];
12899
13109
  }
12900
- declare function createInitialViewerState(): ViewerState;
13110
+ export declare function createInitialViewerState(): ViewerState;
12901
13111
  //#endregion
12902
13112
  //#region src/viewer/editor/editor-animation-actions.d.ts
12903
13113
  /**
@@ -12956,6 +13166,8 @@ interface AnimationActions {
12956
13166
  dataUrl: string;
12957
13167
  fileName?: string;
12958
13168
  } | undefined): void;
13169
+ /** Stage one of PowerPoint's 19 built-in stock sounds by catalogue id. */
13170
+ setAnimationStockSound(elementId: string, catalogueId: string): void;
12959
13171
  reorderAnimation(elementId: string, direction: 'up' | 'down'): void;
12960
13172
  moveAnimation(elementId: string, index: number): void;
12961
13173
  }
@@ -13169,6 +13381,8 @@ interface InspectorActions {
13169
13381
  setTitle(text: string): void;
13170
13382
  /** Set the selected OLE element's Object Name (`p:oleObj/@name`). */
13171
13383
  setOleName(name: string): void;
13384
+ /** Patch an in-place OLE content edit (see `InspectorHandlers.setOleContent`). */
13385
+ setOleContent(patch: Partial<OlePptxElement>): void;
13172
13386
  setChartData(data: PptxChartData): void;
13173
13387
  setMediaProperties(patch: Partial<MediaPptxElement>): void;
13174
13388
  setTableHeaderRow(enabled: boolean): void;
@@ -13437,6 +13651,12 @@ interface InspectorState {
13437
13651
  oleIsLinked: boolean;
13438
13652
  /** The OLE object's author-assigned name (`p:oleObj/@name`), if any. */
13439
13653
  oleName: string | undefined;
13654
+ /**
13655
+ * The full selected OLE element, feeding the "Edit content" dialog (which
13656
+ * needs `oleEmbeddedData`/`oleFileExtension`/`oleShowAsIcon` etc., not just
13657
+ * the flattened fields above). `undefined` when the selection isn't OLE.
13658
+ */
13659
+ oleElement: OlePptxElement | undefined;
13440
13660
  x: number;
13441
13661
  y: number;
13442
13662
  width: number;
@@ -13725,6 +13945,7 @@ interface RibbonFileHandlers {
13725
13945
  save(): void;
13726
13946
  saveAsPpsx(): void;
13727
13947
  saveAsPptm(): void;
13948
+ saveAsPpt(): void;
13728
13949
  exportPng(): void;
13729
13950
  copySlideAsImage(): void;
13730
13951
  exportPdf(): void;
@@ -14046,7 +14267,7 @@ interface Ribbon {
14046
14267
  * never called, and a hidden button/cluster inside a tab is never built by
14047
14268
  * that tab's own module (see `ribbon-types.ts` handlers vs. this file).
14048
14269
  */
14049
- declare function createRibbon(doc: Document, t: Translator, handlers: RibbonHandlers, hiddenActions?: readonly ToolbarActionId[], accountAuth?: AccountAuthConfig): Ribbon;
14270
+ export declare function createRibbon(doc: Document, t: Translator, handlers: RibbonHandlers, hiddenActions?: readonly ToolbarActionId[], accountAuth?: AccountAuthConfig): Ribbon;
14050
14271
  //#endregion
14051
14272
  //#region src/viewer/ui/shortcut-panel.d.ts
14052
14273
  interface ShortcutPanel {
@@ -14589,7 +14810,7 @@ interface PptxAiBridge {
14589
14810
  * module is that dictionary for the demos, shared so all three stay in sync
14590
14811
  * instead of drifting into three separate copies.
14591
14812
  */
14592
- declare const translationsEn: Record<string, string>;
14813
+ export declare const translationsEn: Record<string, string>;
14593
14814
  /**
14594
14815
  * Every key in the English dictionary. A new locale dictionary typed as
14595
14816
  * `Record<TranslationKey, string>` gets a compile error for any key it's
@@ -14602,7 +14823,7 @@ type TranslationKey = keyof typeof translationsEn;
14602
14823
  * explicit dictionary entry exists yet. Takes the last segment and converts
14603
14824
  * camelCase to Title Case, e.g. "pptx.slideSorter.zoomIn" -> "Zoom In".
14604
14825
  */
14605
- declare function keyToLabel(key: string): string;
14826
+ export declare function keyToLabel(key: string): string;
14606
14827
  //#endregion
14607
14828
  //#region src/i18n/locale-catalog.d.ts
14608
14829
  /** One selectable entry in the viewer chrome's built-in language picker (File > Options > Language). */
@@ -14765,9 +14986,9 @@ interface ExportPdfOptions {
14765
14986
  //#endregion
14766
14987
  //#region src/viewer/export/export-svg.d.ts
14767
14988
  /** Export one parsed slide as resolution-independent SVG markup. */
14768
- declare function exportSlideToSvg(slide: PptxSlide, width: number, height: number, options?: SvgExportOptions): string;
14989
+ export declare function exportSlideToSvg(slide: PptxSlide, width: number, height: number, options?: SvgExportOptions): string;
14769
14990
  /** Export the selected slides in a parsed presentation as SVG markup. */
14770
- declare function exportAllSlidesToSvg(data: PptxData, options?: SvgExportOptions): string[];
14991
+ export declare function exportAllSlidesToSvg(data: PptxData, options?: SvgExportOptions): string[];
14771
14992
  //#endregion
14772
14993
  //#region src/viewer/export/render-to-canvas.d.ts
14773
14994
  /**
@@ -14781,7 +15002,7 @@ declare function exportAllSlidesToSvg(data: PptxData, options?: SvgExportOptions
14781
15002
  * per-binding. `html2canvas-pro` is imported dynamically so it stays out of
14782
15003
  * the main bundle until export is actually used.
14783
15004
  */
14784
- declare function renderToCanvas(element: HTMLElement, options?: Partial<Options>): Promise<HTMLCanvasElement>;
15005
+ export declare function renderToCanvas(element: HTMLElement, options?: Partial<Options>): Promise<HTMLCanvasElement>;
14785
15006
  //#endregion
14786
15007
  //#region src/viewer/load/source.d.ts
14787
15008
  /**
@@ -15384,7 +15605,7 @@ declare abstract class ViewerExportHost implements ViewerExportApi {
15384
15605
  * builds chrome inside `container`, loads `options.source` when given, and
15385
15606
  * re-renders through a tiny reactive store.
15386
15607
  */
15387
- declare class PptxViewer extends ViewerExportHost implements PptxViewerInstance, ChromeHost {
15608
+ export declare class PptxViewer extends ViewerExportHost implements PptxViewerInstance, ChromeHost {
15388
15609
  readonly container: HTMLElement;
15389
15610
  readonly doc: Document;
15390
15611
  readonly options: PptxViewerOptions;
@@ -15780,11 +16001,11 @@ declare class PptxViewer extends ViewerExportHost implements PptxViewerInstance,
15780
16001
  private remountChrome;
15781
16002
  }
15782
16003
  /** Create a PowerPoint viewer inside `container` (see {@link PptxViewerOptions}). */
15783
- declare function createPptxViewer(container: HTMLElement, options?: PptxViewerOptions): PptxViewerInstance;
16004
+ export declare function createPptxViewer(container: HTMLElement, options?: PptxViewerOptions): PptxViewerInstance;
15784
16005
  //#endregion
15785
16006
  //#region src/viewer/styles/inject.d.ts
15786
16007
  /** The complete viewer stylesheet text (for hosts that self-manage CSS). */
15787
- declare function getViewerCss(): string;
16008
+ export declare function getViewerCss(): string;
15788
16009
  //#endregion
15789
- export { type AccountAuthConfig, type AutosaveRecord, type AutosaveStatus, type CollaborationConfig, type CollaborationRole, type CollaborationTransport, type ConnectionStatus, type CssStyleMap, type EditActions, type ElementRenderContext, type ElementRenderer, type ElementRendererRegistry, type ExportGifOptions, type ExportPdfOptions, type ExportProgress, type ExportVideoOptions, type FindReplaceActions, type OpenPrintWindow, PPTX_OPEN_ACCEPT, PRESENTATION_OPEN_EXTENSIONS, type PptxAiBridge, type PptxAiConfig, type PptxAiConnection, type PptxAiContextStrategy, type PptxAiToolName, type PptxAiWritePolicy, type PptxElement, type PptxElementType, type PptxHandler, type PptxSlide, PptxViewer, type PptxViewerCallbacks, type PptxViewerInstance, type PptxViewerOptions, type PptxViewerSource, type PrintOptions, type Ribbon, type RibbonDesignHandlers, type RibbonDrawHandlers, type RibbonDrawState, type RibbonEditState, type RibbonFileHandlers, type RibbonHandlers, type RibbonInsertHandlers, type RibbonNavHandlers, type RibbonNavState, type RibbonPrimaryHandlers, type RibbonSelectionState, type RibbonSlideShowHandlers, type RibbonTabId, type SavedPresentationFormat, type SessionDeck, type SlideStageOptions, type Store, type SvgExportOptions, type ToolbarActionId, type TranslationKey, type TranslationMessages, type Translator, type ViewerState, type ViewerTheme, type ViewerThemeColors, type ZoomLevel, applyStyleMap, createDefaultRegistry, createEl, createElementRendererRegistry, createInitialViewerState, createPptxViewer, createRibbon, createStore, createSvgEl, createTranslator, defaultCssVars, defaultRadius, defaultThemeColors, exportAllSlidesToSvg, exportSlideToSvg, forgetSessionDeck, getSessionTabId, getViewerCss, isLegacyBinaryPresentation, isSupportedPresentationFile, keyToLabel, loadPresentationDeck, loadSessionDeck, parsePresentationSessionId, presentationBaseName, rememberSessionDeck, renderSlideStage, renderToCanvas, restoreSessionDeck, savedPresentationFileName, themeToCssVars, translationsEn, vermilionDarkTheme, vermilionLightTheme };
16010
+ export { type AccountAuthConfig, type AutosaveRecord, type AutosaveStatus, type CollaborationConfig, type CollaborationRole, type CollaborationTransport, type ConnectionStatus, type CssStyleMap, type EditActions, type ElementRenderContext, type ElementRenderer, type ElementRendererRegistry, type ExportGifOptions, type ExportPdfOptions, type ExportProgress, type ExportVideoOptions, type FindReplaceActions, type OpenPrintWindow, type PptxAiBridge, type PptxAiConfig, type PptxAiConnection, type PptxAiContextStrategy, type PptxAiToolName, type PptxAiWritePolicy, type PptxElement, type PptxElementType, type PptxHandler, type PptxSlide, type PptxViewerCallbacks, type PptxViewerInstance, type PptxViewerOptions, type PptxViewerSource, type PrintOptions, type Ribbon, type RibbonDesignHandlers, type RibbonDrawHandlers, type RibbonDrawState, type RibbonEditState, type RibbonFileHandlers, type RibbonHandlers, type RibbonInsertHandlers, type RibbonNavHandlers, type RibbonNavState, type RibbonPrimaryHandlers, type RibbonSelectionState, type RibbonSlideShowHandlers, type RibbonTabId, type SavedPresentationFormat, type SessionDeck, type SlideStageOptions, type Store, type SvgExportOptions, type ToolbarActionId, type TranslationKey, type TranslationMessages, type Translator, type ViewerState, type ViewerTheme, type ViewerThemeColors, type ZoomLevel, defaultCssVars, defaultRadius, defaultThemeColors, themeToCssVars, vermilionDarkTheme, vermilionLightTheme };
15790
16011
  //# sourceMappingURL=index.d.ts.map