pptx-vanilla-viewer 2.9.0 → 2.11.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-B8ed8e82.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,108 @@ 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 conditions of EVERY enclosing `dgm:if` this node was found through,
4887
+ * outermost first, when `nestedLayoutNodes` (`smartart-layout-
4888
+ * definition.ts`) reached it via one or more `dgm:choose`'s `if` branches
4889
+ * (as opposed to a direct child, a `dgm:else` branch contributing no
4890
+ * condition of its own - see below - or a `dgm:forEach`, which sets
4891
+ * {@link forEachOrigin} instead). ALL must hold (evaluate `!== false`,
4892
+ * per {@link chooseGuard}'s own AND semantics - see `evaluateWhen`) for
4893
+ * this node's branch to be genuinely live. A caller that already has the
4894
+ * data-model node list can use this instead of treating every
4895
+ * choose-flattened branch as unconditionally present
4896
+ * (`nestedLayoutNodes`' pre-existing "flatten every branch" convention,
4897
+ * still the default when this is absent or a caller does not evaluate
4898
+ * it) - e.g. `cycle-matrix--fallback-n2.pptx`'s `child1group`..
4899
+ * `child4group`, each gated on a DIFFERENT top-level point existing and
4900
+ * having its own child (`axis="ch ch" st="N 1" cnt="1 0" func="cnt"
4901
+ * op="gte" val="1"`).
4902
+ *
4903
+ * A CHAIN, not a single condition, because a node can sit inside NESTED
4904
+ * `dgm:choose`s whose OWN conditions are each individually necessary -
4905
+ * `sub-step-process--hier5.pptx`'s `chLin1`..`chLin7` each sit inside
4906
+ * BOTH an outer `dgm:if func="pos" op="equ" val="N"` (which one of the
4907
+ * 7 hand-duplicated per-position templates this is) AND an inner,
4908
+ * nearly-vacuous `dgm:if func="cnt" op="gte" val="1"` (has >= 1 point at
4909
+ * all) - keeping only the NEAREST (inner) one, as an earlier single-
4910
+ * condition design did, loses the ONE piece of information (the outer
4911
+ * `pos` guard) that actually discriminates `chLin1` from `chLin2`.
4912
+ *
4913
+ * A `dgm:else` branch contributes NO condition of its own (ECMA-376
4914
+ * defines it as "none of the sibling ifs matched", which would need the
4915
+ * FULL sibling list's conditions negated and ANDed together, not a
4916
+ * single condition - no gallery fixture measured needs an else branch's
4917
+ * own guard yet, so it is left unconditional, matching the pre-existing
4918
+ * flatten-everything behaviour) but does NOT clear any OUTER ancestor
4919
+ * guard already accumulated before it. Evaluate with `smartart-layout-
4920
+ * interpreter-when.ts`'s `evaluateWhen`, once per entry, ANDed.
4921
+ */
4922
+ chooseGuard?: PptxSmartArtWhen[];
4773
4923
  }
4774
4924
  /** Metadata and root node from DiagramML CT_DiagramDefinition. */
4775
4925
  interface PptxSmartArtLayoutDefinition {
@@ -5402,6 +5552,14 @@ interface PptxSmartArtData {
5402
5552
  * Consulted by the fallback layout engine for direction/org-chart hints.
5403
5553
  */
5404
5554
  presLayoutVars?: PptxSmartArtPresLayoutVars;
5555
+ /**
5556
+ * The deck's own theme minor-Latin font (`a:fontScheme/a:minorFont/a:latin/
5557
+ * @typeface`): what SmartArt text actually renders in when no per-run
5558
+ * `a:latin` override is present (the common case - see
5559
+ * `smartart-layout-item-font-size.ts`'s font-fit, the one consumer).
5560
+ * Undefined when the theme carries no font scheme at all.
5561
+ */
5562
+ themeMinorFont?: string;
5405
5563
  /** Relationship ID for the diagram data part (for round-trip save). */
5406
5564
  dataRelId?: string;
5407
5565
  /** Relationship ID for the diagram layout part. */
@@ -6361,7 +6519,7 @@ interface SmartArtPptxElement extends PptxElementBase {
6361
6519
  *
6362
6520
  * Used to show type-specific icons and previews in the editor.
6363
6521
  */
6364
- type OleObjectType = 'excel' | 'word' | 'pdf' | 'visio' | 'mathtype' | 'package' | 'unknown';
6522
+ type OleObjectType = 'excel' | 'word' | 'powerpoint' | 'pdf' | 'visio' | 'mathtype' | 'package' | 'unknown';
6365
6523
  /**
6366
6524
  * An OLE (Object Linking and Embedding) object.
6367
6525
  *
@@ -6439,6 +6597,15 @@ interface OlePptxElement extends PptxElementBase {
6439
6597
  * `false`; `undefined` means the source authored no explicit value.
6440
6598
  */
6441
6599
  oleUpdateAutomatic?: boolean;
6600
+ /**
6601
+ * Set by the in-viewer OLE content editors (`ole-edit-api.ts`) whenever
6602
+ * `oleEmbeddedData` and/or `previewImageData` have been changed in memory
6603
+ * and still need to be written back into the saved package. Never
6604
+ * authored from a parsed file; purely an in-memory save signal, mirroring
6605
+ * `PptxSlide.isDirty`. The save writer clears it once the pending write
6606
+ * has been queued.
6607
+ */
6608
+ oleContentDirty?: boolean;
6442
6609
  /** Accessibility description from `p:nvGraphicFramePr/p:cNvPr/@descr`. */
6443
6610
  altText?: string;
6444
6611
  /** Accessibility title from `p:nvGraphicFramePr/p:cNvPr/@title`. */
@@ -7368,10 +7535,27 @@ interface PptxNativeAnimation {
7368
7535
  buildLevel?: number;
7369
7536
  /** Group ID linking a `p:bldP` entry to its timing animation node. */
7370
7537
  groupId?: string;
7371
- /** Sound relationship ID to play when animation triggers (`p:stSnd`). */
7538
+ /**
7539
+ * Sound relationship ID to play when animation triggers. Modern PowerPoint
7540
+ * (COM-verified against 2016) writes this as a `p:audio/p:cMediaNode`
7541
+ * sibling of the effect's own `p:childTnLst`, targeting `p:sndTgt` rather
7542
+ * than a shape; the legacy `p:stSnd` form (directly on `p:cTn`) is still
7543
+ * accepted on load for round-trip of older-authored decks, but PowerPoint
7544
+ * itself no longer writes it and does not recognise it back
7545
+ * (`Effect.EffectInformation.SoundEffect` reads empty against it).
7546
+ */
7372
7547
  soundRId?: string;
7373
7548
  /** Resolved sound file path from relationship. */
7374
7549
  soundPath?: string;
7550
+ /**
7551
+ * The embedded sound's `@_name` (from `p:snd`/`p:sndTgt`). For one of
7552
+ * PowerPoint's 19 built-in stock sounds this is the exact upper-case file
7553
+ * name PowerPoint itself writes (e.g. `"CHIMES.WAV"`); see
7554
+ * `pptx-viewer-shared`'s `effect-sound-catalogue.ts`, which matches this
7555
+ * value back to a gallery entry. Absent for a custom sound with no name,
7556
+ * or when unresolved.
7557
+ */
7558
+ soundName?: string;
7375
7559
  /** Whether to stop any currently playing sound (`p:endSnd`). */
7376
7560
  stopSound?: boolean;
7377
7561
  /**
@@ -7931,10 +8115,24 @@ interface PptxElementAnimation {
7931
8115
  motionPathRotationCenterX?: number;
7932
8116
  /** Motion-path rotation centre Y in slide percentage units (`p:rCtr/@y`). */
7933
8117
  motionPathRotationCenterY?: number;
7934
- /** Sound relationship ID to play when animation triggers (`p:stSnd`). */
8118
+ /**
8119
+ * Sound relationship ID to play when animation triggers. Written on save
8120
+ * as a `p:audio/p:cMediaNode` sibling of the effect's own `p:childTnLst`
8121
+ * (see `PptxNativeAnimation.soundRId` for the COM-verified detail).
8122
+ */
7935
8123
  soundRId?: string;
7936
8124
  /** Resolved sound file path from relationship. */
7937
8125
  soundPath?: string;
8126
+ /**
8127
+ * The `@_name` to write on the embedded sound (`p:sndTgt`). For a stock
8128
+ * gallery pick this is the exact PowerPoint file name (e.g.
8129
+ * `"CHIMES.WAV"`), which is what makes PowerPoint itself recognise the
8130
+ * sound as that built-in entry when it reopens the saved deck (there is no
8131
+ * separate "built-in" flag anywhere in the schema). Set by
8132
+ * `pptx-viewer-shared`'s `setEffectSound` when the pick carries a
8133
+ * `soundName`; absent for a custom file with no meaningful name.
8134
+ */
8135
+ soundName?: string;
7938
8136
  /** Whether to stop any currently playing sound (`p:endSnd`). */
7939
8137
  stopSound?: boolean;
7940
8138
  /**
@@ -7949,7 +8147,9 @@ interface PptxElementAnimation {
7949
8147
  /**
7950
8148
  * Display name for the chosen sound (e.g. the uploaded file's name),
7951
8149
  * shown by the authoring UI's sound picker. Purely cosmetic; has no
7952
- * OOXML equivalent and is not required for playback.
8150
+ * OOXML equivalent and is not required for playback. For a stock gallery
8151
+ * pick, the UI derives its label from {@link soundName} via the catalogue
8152
+ * instead of this field.
7953
8153
  */
7954
8154
  soundFileName?: string;
7955
8155
  /**
@@ -9644,7 +9844,7 @@ interface PptxEmbeddedFont {
9644
9844
  originalPartBytes?: Uint8Array;
9645
9845
  }
9646
9846
  //#endregion
9647
- //#region ../core/dist/index-0zviqnUe.d.ts
9847
+ //#region ../core/dist/index-C93FwBlY.d.ts
9648
9848
  //#region src/core/types/theme-presets.d.ts
9649
9849
  /**
9650
9850
  * A complete theme preset that can be applied to a presentation.
@@ -10298,7 +10498,7 @@ interface PptxHandlerLoadOptions {
10298
10498
  allowExternalImages?: boolean;
10299
10499
  }
10300
10500
  /** Output format for the save pipeline. */
10301
- type PptxSaveFormat = 'pptx' | 'ppsx' | 'pptm';
10501
+ type PptxSaveFormat = 'pptx' | 'ppsx' | 'pptm' | 'ppt';
10302
10502
  interface PptxHandlerSaveOptions {
10303
10503
  headerFooter?: PptxHeaderFooter;
10304
10504
  presentationProperties?: PptxPresentationProperties;
@@ -10394,8 +10594,23 @@ interface PptxHandlerSaveOptions {
10394
10594
  * - `'pptx'` (default): Standard presentation.
10395
10595
  * - `'ppsx'`: Slide-show file (opens in presentation mode).
10396
10596
  * - `'pptm'`: Macro-enabled presentation (requires VBA data).
10597
+ * - `'ppt'`: Legacy binary PowerPoint 97-2003 presentation. Bypasses the
10598
+ * OOXML ZIP pipeline entirely; see `PptxHandlerRuntimeSaveLegacyPpt`.
10599
+ * Elements with no binary equivalent (charts, SmartArt, media, OLE, ink,
10600
+ * 3D models) are degraded to a rasterised preview picture or a labelled
10601
+ * placeholder, each reported via a `scope: 'save'`-adjacent
10602
+ * `PptxCompatibilityWarning`.
10397
10603
  */
10398
10604
  outputFormat?: PptxSaveFormat;
10605
+ /**
10606
+ * Password for RC4 CryptoAPI encryption of a `'ppt'`-format save. Ignored
10607
+ * for every other {@link outputFormat}; encrypting a `.pptx`/`.ppsx`/`.pptm`
10608
+ * save uses {@link IPptxHandlerRuntime.saveEncrypted}'s separate AES/Agile
10609
+ * OLE2 wrapping instead, since the legacy binary format's own encryption
10610
+ * scheme is embedded directly in the `.ppt` stream rather than wrapping an
10611
+ * already-produced package.
10612
+ */
10613
+ pptPassword?: string;
10399
10614
  /**
10400
10615
  * Embedded fonts to write back (or add) to the saved PPTX.
10401
10616
  *
@@ -11795,16 +12010,17 @@ interface SlideSizeEmu {
11795
12010
  * working loader unreachable in practice. Whenever the loader learns a format,
11796
12011
  * exactly one list has to change.
11797
12012
  *
11798
- * ## Read many, write one
12013
+ * ## Read many, write several
11799
12014
  *
11800
12015
  * 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.
12016
+ * legacy binary `.ppt` and portable `pptx-viewer-json`; we WRITE the OpenXML
12017
+ * family plus legacy binary `.ppt` (via `packages/core/src/core/ppt/writer/`,
12018
+ * a real MS-PPT/OLE2 encoder, not a stub). `savedPresentationFileName`
12019
+ * REPLACES the source extension with the extension of the format actually
12020
+ * being written rather than keeping the source's: a deck opened as
12021
+ * `report.pptx` and saved back as `.ppt` (or vice versa) must have its name
12022
+ * agree with its bytes, which is the kind of mismatch PowerPoint itself
12023
+ * refuses to open.
11808
12024
  *
11809
12025
  * This module deliberately imports nothing, so any layer (render, export, a
11810
12026
  * binding, a host app) can depend on it without risking an import cycle.
@@ -11819,9 +12035,9 @@ interface SlideSizeEmu {
11819
12035
  * suite, which asserts a `.ppt` loads to the same model as the `.pptx` it was
11820
12036
  * exported from.
11821
12037
  */
11822
- declare const PRESENTATION_OPEN_EXTENSIONS: readonly ['.pptx', '.ppsx', '.pptm', '.potx', '.ppt', '.json'];
12038
+ export declare const PRESENTATION_OPEN_EXTENSIONS: readonly ['.pptx', '.ppsx', '.pptm', '.potx', '.ppt', '.json'];
11823
12039
  /** Comma-separated `accept` attribute for a presentation file input. */
11824
- declare const PPTX_OPEN_ACCEPT: string;
12040
+ export declare const PPTX_OPEN_ACCEPT: string;
11825
12041
  /**
11826
12042
  * True when a picked / dropped file's name looks like something the loader can
11827
12043
  * open. Use this instead of a hand-rolled `endsWith` chain: a drop handler that
@@ -11832,27 +12048,32 @@ declare const PPTX_OPEN_ACCEPT: string;
11832
12048
  * `PptxHandler.load()`; this is only the cheap pre-filter a drop target needs
11833
12049
  * before it hands bytes to the loader.
11834
12050
  */
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';
12051
+ export declare function isSupportedPresentationFile(name: string | null | undefined): boolean;
12052
+ /**
12053
+ * True for the binary PowerPoint 97-2003 family. `.ppt` itself is now also a
12054
+ * SAVE target (see {@link SavedPresentationFormat}); `.pps`/`.pot` (97-2003
12055
+ * show/template) remain read-only siblings sharing the same record format.
12056
+ */
12057
+ export declare function isLegacyBinaryPresentation(name: string | null | undefined): boolean;
12058
+ /** The formats the save path can produce. */
12059
+ type SavedPresentationFormat = 'pptx' | 'ppsx' | 'pptm' | 'ppt';
11840
12060
  /**
11841
12061
  * The stem of a presentation file name: directories and any loadable extension
11842
12062
  * removed. `C:\decks\report.ppt` becomes `report`; a name with no recognised
11843
12063
  * extension is kept whole, so `Untitled Presentation` survives intact rather
11844
12064
  * than losing everything after its last dot.
11845
12065
  */
11846
- declare function presentationBaseName(sourceName: string | null | undefined, fallback?: string): string;
12066
+ export declare function presentationBaseName(sourceName: string | null | undefined, fallback?: string): string;
11847
12067
  /**
11848
12068
  * The name a saved copy should be offered under: the source stem plus the
11849
12069
  * extension of the format actually being written.
11850
12070
  *
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.
12071
+ * This is what turns `report.ppt` into `report.pptx` on a regular Save As,
12072
+ * and `report.pptx` into `report.ppt` when the user explicitly picks the
12073
+ * PowerPoint 97-2003 format. Keeping the source extension would mislabel the
12074
+ * bytes either way.
11854
12075
  */
11855
- declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
12076
+ export declare function savedPresentationFileName(sourceName: string | null | undefined, format?: SavedPresentationFormat): string;
11856
12077
  //#endregion
11857
12078
  //#region src/render/session-restore.d.ts
11858
12079
  /**
@@ -11893,24 +12114,24 @@ interface SessionDeck {
11893
12114
  * @param create Mint and persist an id when the tab does not have one yet.
11894
12115
  * Reads pass `false` so a fresh tab never claims another tab's record.
11895
12116
  */
11896
- declare function getSessionTabId(create?: boolean): string | null;
12117
+ export declare function getSessionTabId(create?: boolean): string | null;
11897
12118
  /**
11898
12119
  * Remember `data` as the deck this tab has open, so the next load can restore
11899
12120
  * it. Resolves `false` when the browser refused to store it; callers treat that
11900
12121
  * as "no restore available later", never as an error.
11901
12122
  */
11902
- declare function rememberSessionDeck(fileName: string, data: Uint8Array): Promise<boolean>;
12123
+ export declare function rememberSessionDeck(fileName: string, data: Uint8Array): Promise<boolean>;
11903
12124
  /** The deck remembered for this tab, or `null` when there is nothing to restore. */
11904
- declare function loadSessionDeck(): Promise<SessionDeck | null>;
12125
+ export declare function loadSessionDeck(): Promise<SessionDeck | null>;
11905
12126
  /** Forget this tab's deck (the host closed it, or handed the tab to another flow). */
11906
- declare function forgetSessionDeck(): Promise<void>;
12127
+ export declare function forgetSessionDeck(): Promise<void>;
11907
12128
  /**
11908
12129
  * The deck to reopen on load: this tab's remembered bytes, upgraded to a newer
11909
12130
  * autosave snapshot of the same file when the viewer wrote one after they were
11910
12131
  * remembered. Without that upgrade a refresh mid-edit would silently roll the
11911
12132
  * presentation back to the state it was opened in.
11912
12133
  */
11913
- declare function restoreSessionDeck(): Promise<SessionDeck | null>;
12134
+ export declare function restoreSessionDeck(): Promise<SessionDeck | null>;
11914
12135
  /** Optional seed values for the share start form. */
11915
12136
  interface ShareDefaults {
11916
12137
  roomId?: string;
@@ -11962,8 +12183,8 @@ interface PresentationInkStroke {
11962
12183
  width: number;
11963
12184
  points: PresentationInkPoint[];
11964
12185
  }
11965
- declare function parsePresentationSessionId(hash: string): string | null;
11966
- declare function loadPresentationDeck(sessionId: string): Promise<Uint8Array | null>;
12186
+ export declare function parsePresentationSessionId(hash: string): string | null;
12187
+ export declare function loadPresentationDeck(sessionId: string): Promise<Uint8Array | null>;
11967
12188
  //#endregion
11968
12189
  //#region src/render/presentation-blackboard.d.ts
11969
12190
  /** Blackout state, as carried by {@link PresentationSnapshot}. */
@@ -12204,11 +12425,13 @@ interface ReadOnlyRecommendation {
12204
12425
  /**
12205
12426
  * Whether lifting this recommendation requires a correct password, rather
12206
12427
  * 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.
12428
+ * a hash this viewer can actually check (`hashData` plus a resolvable
12429
+ * algorithm, see `checkModifyPassword`; `saltData` is optional and NOT
12430
+ * required, a missing salt is still checkable). "Mark as Final" is purely
12431
+ * advisory and never requires one, and a `modifyVerifier` with no hash at
12432
+ * all, or naming an algorithm this viewer does not implement, cannot be
12433
+ * verified either way, so both fall back to the plain "Edit anyway" a
12434
+ * binding already had.
12212
12435
  */
12213
12436
  readonly requiresPassword: boolean;
12214
12437
  }
@@ -12252,7 +12475,7 @@ type TranslationMessages = Record<string, Record<string, string>>;
12252
12475
  * Build a {@link Translator} for a locale. `messages[locale]` (when provided)
12253
12476
  * wins over the built-in English dictionary; English is always the fallback.
12254
12477
  */
12255
- declare function createTranslator(locale?: string, messages?: TranslationMessages): Translator;
12478
+ export declare function createTranslator(locale?: string, messages?: TranslationMessages): Translator;
12256
12479
  //#endregion
12257
12480
  //#region src/viewer/state/store.d.ts
12258
12481
  /**
@@ -12273,7 +12496,7 @@ interface Store<T extends object> {
12273
12496
  /** Subscribe to state changes; returns an unsubscribe function. */
12274
12497
  subscribe(listener: StoreListener<T>): () => void;
12275
12498
  }
12276
- declare function createStore<T extends object>(initial: T): Store<T>;
12499
+ export declare function createStore<T extends object>(initial: T): Store<T>;
12277
12500
  //#endregion
12278
12501
  //#region src/viewer/render/types.d.ts
12279
12502
  /** Discriminant values of the {@link PptxElement} union (`'text'`, `'chart'`, ...). */
@@ -12494,7 +12717,7 @@ interface ElementRendererRegistry {
12494
12717
  * `./elements`) installs the built-in renderers plus the typed placeholder
12495
12718
  * fallback.
12496
12719
  */
12497
- declare function createElementRendererRegistry(): ElementRendererRegistry;
12720
+ export declare function createElementRendererRegistry(): ElementRendererRegistry;
12498
12721
  //#endregion
12499
12722
  //#region src/viewer/render/dom.d.ts
12500
12723
  /**
@@ -12502,11 +12725,11 @@ declare function createElementRendererRegistry(): ElementRendererRegistry;
12502
12725
  * of camelCase (`backgroundColor`) and kebab-case (`background-color`) keys;
12503
12726
  * both are normalised to `style.setProperty` calls.
12504
12727
  */
12505
- declare function applyStyleMap(el: HTMLElement | SVGElement, style: CssStyleMap): void;
12728
+ export declare function applyStyleMap(el: HTMLElement | SVGElement, style: CssStyleMap): void;
12506
12729
  /** 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];
12730
+ export declare function createEl<K extends keyof HTMLElementTagNameMap>(doc: Document, tag: K, className?: string, style?: CssStyleMap): HTMLElementTagNameMap[K];
12508
12731
  /** 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];
12732
+ export declare function createSvgEl<K extends keyof SVGElementTagNameMap>(doc: Document, tag: K, attrs?: Record<string, string | number | undefined>): SVGElementTagNameMap[K];
12510
12733
  //#endregion
12511
12734
  //#region src/viewer/render/slide-stage.d.ts
12512
12735
  interface SlideStageOptions {
@@ -12607,7 +12830,7 @@ interface SlideStageOptions {
12607
12830
  * unscaled canvas size, so the caller should wrap it in a box sized to
12608
12831
  * `canvasSize * scale` (the viewer's stage host and thumbnails both do).
12609
12832
  */
12610
- declare function renderSlideStage(options: SlideStageOptions): HTMLElement;
12833
+ export declare function renderSlideStage(options: SlideStageOptions): HTMLElement;
12611
12834
  //#endregion
12612
12835
  //#region src/viewer/render/elements/index.d.ts
12613
12836
  /**
@@ -12618,7 +12841,7 @@ declare function renderSlideStage(options: SlideStageOptions): HTMLElement;
12618
12841
  * `contentPart`, `zoom`, and `model3d`. Only unknown extension elements fall
12619
12842
  * through to the typed placeholder fallback.
12620
12843
  */
12621
- declare function createDefaultRegistry(): ElementRendererRegistry;
12844
+ export declare function createDefaultRegistry(): ElementRendererRegistry;
12622
12845
  //#endregion
12623
12846
  //#region src/viewer/state/viewer-state.d.ts
12624
12847
  /** Why the last password attempt failed; see `checkModifyPassword` (`pptx-viewer-shared`). */
@@ -12897,7 +13120,7 @@ interface ViewerState {
12897
13120
  */
12898
13121
  compatToasts: CompatibilityWarningToast[];
12899
13122
  }
12900
- declare function createInitialViewerState(): ViewerState;
13123
+ export declare function createInitialViewerState(): ViewerState;
12901
13124
  //#endregion
12902
13125
  //#region src/viewer/editor/editor-animation-actions.d.ts
12903
13126
  /**
@@ -12956,6 +13179,8 @@ interface AnimationActions {
12956
13179
  dataUrl: string;
12957
13180
  fileName?: string;
12958
13181
  } | undefined): void;
13182
+ /** Stage one of PowerPoint's 19 built-in stock sounds by catalogue id. */
13183
+ setAnimationStockSound(elementId: string, catalogueId: string): void;
12959
13184
  reorderAnimation(elementId: string, direction: 'up' | 'down'): void;
12960
13185
  moveAnimation(elementId: string, index: number): void;
12961
13186
  }
@@ -13169,6 +13394,8 @@ interface InspectorActions {
13169
13394
  setTitle(text: string): void;
13170
13395
  /** Set the selected OLE element's Object Name (`p:oleObj/@name`). */
13171
13396
  setOleName(name: string): void;
13397
+ /** Patch an in-place OLE content edit (see `InspectorHandlers.setOleContent`). */
13398
+ setOleContent(patch: Partial<OlePptxElement>): void;
13172
13399
  setChartData(data: PptxChartData): void;
13173
13400
  setMediaProperties(patch: Partial<MediaPptxElement>): void;
13174
13401
  setTableHeaderRow(enabled: boolean): void;
@@ -13437,6 +13664,12 @@ interface InspectorState {
13437
13664
  oleIsLinked: boolean;
13438
13665
  /** The OLE object's author-assigned name (`p:oleObj/@name`), if any. */
13439
13666
  oleName: string | undefined;
13667
+ /**
13668
+ * The full selected OLE element, feeding the "Edit content" dialog (which
13669
+ * needs `oleEmbeddedData`/`oleFileExtension`/`oleShowAsIcon` etc., not just
13670
+ * the flattened fields above). `undefined` when the selection isn't OLE.
13671
+ */
13672
+ oleElement: OlePptxElement | undefined;
13440
13673
  x: number;
13441
13674
  y: number;
13442
13675
  width: number;
@@ -13725,6 +13958,7 @@ interface RibbonFileHandlers {
13725
13958
  save(): void;
13726
13959
  saveAsPpsx(): void;
13727
13960
  saveAsPptm(): void;
13961
+ saveAsPpt(): void;
13728
13962
  exportPng(): void;
13729
13963
  copySlideAsImage(): void;
13730
13964
  exportPdf(): void;
@@ -14046,7 +14280,7 @@ interface Ribbon {
14046
14280
  * never called, and a hidden button/cluster inside a tab is never built by
14047
14281
  * that tab's own module (see `ribbon-types.ts` handlers vs. this file).
14048
14282
  */
14049
- declare function createRibbon(doc: Document, t: Translator, handlers: RibbonHandlers, hiddenActions?: readonly ToolbarActionId[], accountAuth?: AccountAuthConfig): Ribbon;
14283
+ export declare function createRibbon(doc: Document, t: Translator, handlers: RibbonHandlers, hiddenActions?: readonly ToolbarActionId[], accountAuth?: AccountAuthConfig): Ribbon;
14050
14284
  //#endregion
14051
14285
  //#region src/viewer/ui/shortcut-panel.d.ts
14052
14286
  interface ShortcutPanel {
@@ -14589,7 +14823,7 @@ interface PptxAiBridge {
14589
14823
  * module is that dictionary for the demos, shared so all three stay in sync
14590
14824
  * instead of drifting into three separate copies.
14591
14825
  */
14592
- declare const translationsEn: Record<string, string>;
14826
+ export declare const translationsEn: Record<string, string>;
14593
14827
  /**
14594
14828
  * Every key in the English dictionary. A new locale dictionary typed as
14595
14829
  * `Record<TranslationKey, string>` gets a compile error for any key it's
@@ -14602,7 +14836,7 @@ type TranslationKey = keyof typeof translationsEn;
14602
14836
  * explicit dictionary entry exists yet. Takes the last segment and converts
14603
14837
  * camelCase to Title Case, e.g. "pptx.slideSorter.zoomIn" -> "Zoom In".
14604
14838
  */
14605
- declare function keyToLabel(key: string): string;
14839
+ export declare function keyToLabel(key: string): string;
14606
14840
  //#endregion
14607
14841
  //#region src/i18n/locale-catalog.d.ts
14608
14842
  /** One selectable entry in the viewer chrome's built-in language picker (File > Options > Language). */
@@ -14765,9 +14999,9 @@ interface ExportPdfOptions {
14765
14999
  //#endregion
14766
15000
  //#region src/viewer/export/export-svg.d.ts
14767
15001
  /** Export one parsed slide as resolution-independent SVG markup. */
14768
- declare function exportSlideToSvg(slide: PptxSlide, width: number, height: number, options?: SvgExportOptions): string;
15002
+ export declare function exportSlideToSvg(slide: PptxSlide, width: number, height: number, options?: SvgExportOptions): string;
14769
15003
  /** Export the selected slides in a parsed presentation as SVG markup. */
14770
- declare function exportAllSlidesToSvg(data: PptxData, options?: SvgExportOptions): string[];
15004
+ export declare function exportAllSlidesToSvg(data: PptxData, options?: SvgExportOptions): string[];
14771
15005
  //#endregion
14772
15006
  //#region src/viewer/export/render-to-canvas.d.ts
14773
15007
  /**
@@ -14781,7 +15015,7 @@ declare function exportAllSlidesToSvg(data: PptxData, options?: SvgExportOptions
14781
15015
  * per-binding. `html2canvas-pro` is imported dynamically so it stays out of
14782
15016
  * the main bundle until export is actually used.
14783
15017
  */
14784
- declare function renderToCanvas(element: HTMLElement, options?: Partial<Options>): Promise<HTMLCanvasElement>;
15018
+ export declare function renderToCanvas(element: HTMLElement, options?: Partial<Options>): Promise<HTMLCanvasElement>;
14785
15019
  //#endregion
14786
15020
  //#region src/viewer/load/source.d.ts
14787
15021
  /**
@@ -15384,7 +15618,7 @@ declare abstract class ViewerExportHost implements ViewerExportApi {
15384
15618
  * builds chrome inside `container`, loads `options.source` when given, and
15385
15619
  * re-renders through a tiny reactive store.
15386
15620
  */
15387
- declare class PptxViewer extends ViewerExportHost implements PptxViewerInstance, ChromeHost {
15621
+ export declare class PptxViewer extends ViewerExportHost implements PptxViewerInstance, ChromeHost {
15388
15622
  readonly container: HTMLElement;
15389
15623
  readonly doc: Document;
15390
15624
  readonly options: PptxViewerOptions;
@@ -15780,11 +16014,11 @@ declare class PptxViewer extends ViewerExportHost implements PptxViewerInstance,
15780
16014
  private remountChrome;
15781
16015
  }
15782
16016
  /** Create a PowerPoint viewer inside `container` (see {@link PptxViewerOptions}). */
15783
- declare function createPptxViewer(container: HTMLElement, options?: PptxViewerOptions): PptxViewerInstance;
16017
+ export declare function createPptxViewer(container: HTMLElement, options?: PptxViewerOptions): PptxViewerInstance;
15784
16018
  //#endregion
15785
16019
  //#region src/viewer/styles/inject.d.ts
15786
16020
  /** The complete viewer stylesheet text (for hosts that self-manage CSS). */
15787
- declare function getViewerCss(): string;
16021
+ export declare function getViewerCss(): string;
15788
16022
  //#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 };
16023
+ 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
16024
  //# sourceMappingURL=index.d.ts.map