pptx-svelte-viewer 4.2.0 → 4.4.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.
@@ -364,7 +364,7 @@ var translations4 = {
364
364
  "pptx.animation.catalogPreset.entr27": "\u5B57\u5E55\u5F0F",
365
365
  "pptx.animation.catalogPreset.entr28": "\u6D6E\u8D77",
366
366
  "pptx.animation.catalogPreset.entr29": "\u98CE\u8F66",
367
- "pptx.animation.catalogPreset.entr30": "\u65CB\u8F6C",
367
+ "pptx.animation.catalogPreset.entr30": "\u6D6E\u5165",
368
368
  "pptx.animation.catalogPreset.entr31": "\u6269\u5C55",
369
369
  "pptx.animation.catalogPreset.entr32": "\u97AD\u6253",
370
370
  "pptx.animation.catalogPreset.entr33": "\u5230\u8FBE",
@@ -432,7 +432,7 @@ var translations4 = {
432
432
  "pptx.animation.catalogPreset.exit27": "\u5B57\u5E55\u5F0F",
433
433
  "pptx.animation.catalogPreset.exit28": "\u5411\u4E0B\u6D6E\u52A8",
434
434
  "pptx.animation.catalogPreset.exit29": "\u98CE\u8F66",
435
- "pptx.animation.catalogPreset.exit30": "\u65CB\u8F6C",
435
+ "pptx.animation.catalogPreset.exit30": "\u6D6E\u51FA",
436
436
  "pptx.animation.catalogPreset.exit31": "\u6536\u62E2",
437
437
  "pptx.animation.catalogPreset.exit32": "\u97AD\u6253",
438
438
  "pptx.animation.catalogPreset.exit33": "\u79BB\u53BB",
@@ -1737,6 +1737,11 @@ var translations14 = {
1737
1737
  "pptx.compare.noDifferences": "\u6CA1\u6709\u5DEE\u5F02",
1738
1738
  "pptx.compare.summary": "\u6DFB\u52A0\u4E86 {{added}}\uFF0C\u5220\u9664\u4E86 {{removed}}\uFF0C\u66F4\u6539\u4E86 {{changed}}",
1739
1739
  "pptx.compare.title": "\u6BD4\u8F83",
1740
+ "pptx.canvasContextMenu.formatBackground": "\u8BBE\u7F6E\u80CC\u666F\u683C\u5F0F...",
1741
+ "pptx.canvasContextMenu.gridAndGuides": "\u7F51\u683C\u548C\u53C2\u8003\u7EBF",
1742
+ "pptx.canvasContextMenu.layout": "\u7248\u5F0F",
1743
+ "pptx.canvasContextMenu.resetSlide": "\u91CD\u7F6E\u5E7B\u706F\u7247",
1744
+ "pptx.canvasContextMenu.ruler": "\u6807\u5C3A",
1740
1745
  "pptx.contextMenu.addComment": "\u6DFB\u52A0\u6279\u6CE8",
1741
1746
  "pptx.contextMenu.bringForward": "\u4E0A\u79FB\u4E00\u5C42",
1742
1747
  "pptx.contextMenu.bringToFront": "\u7F6E\u4E8E\u9876\u5C42",
@@ -1746,7 +1751,10 @@ var translations14 = {
1746
1751
  "pptx.contextMenu.deleteColumn": "\u5220\u9664\u5217",
1747
1752
  "pptx.contextMenu.deleteRow": "\u5220\u9664\u884C",
1748
1753
  "pptx.contextMenu.duplicate": "\u590D\u5236",
1754
+ "pptx.contextMenu.editAltText": "\u7F16\u8F91\u66FF\u6362\u6587\u5B57...",
1749
1755
  "pptx.contextMenu.editHyperlink": "\u7F16\u8F91\u8D85\u94FE\u63A5",
1756
+ "pptx.contextMenu.editText": "\u7F16\u8F91\u6587\u5B57",
1757
+ "pptx.contextMenu.formatShape": "\u8BBE\u7F6E\u5F62\u72B6\u683C\u5F0F...",
1750
1758
  "pptx.contextMenu.group": "\u7EC4\u5408",
1751
1759
  "pptx.contextMenu.insertColumnLeft": "\u5411\u5DE6\u63D2\u5165\u5217",
1752
1760
  "pptx.contextMenu.insertColumnRight": "\u5728\u53F3\u4FA7\u63D2\u5165\u5217",
@@ -1755,10 +1763,18 @@ var translations14 = {
1755
1763
  "pptx.contextMenu.mergeCells": "\u5411\u53F3\u5408\u5E76",
1756
1764
  "pptx.contextMenu.mergeSelectedCells": "\u5408\u5E76\u9009\u5B9A\u7684\u5355\u5143\u683C",
1757
1765
  "pptx.contextMenu.paste": "\u7C98\u8D34",
1766
+ "pptx.contextMenu.saveAsPicture": "\u53E6\u5B58\u4E3A\u56FE\u7247...",
1758
1767
  "pptx.contextMenu.sendBackward": "\u4E0B\u79FB\u4E00\u5C42",
1759
1768
  "pptx.contextMenu.sendToBack": "\u7F6E\u4E8E\u5E95\u5C42",
1769
+ "pptx.contextMenu.sizeAndPosition": "\u5927\u5C0F\u548C\u4F4D\u7F6E...",
1760
1770
  "pptx.contextMenu.splitCell": "\u62C6\u5206\u5355\u5143\u683C",
1761
1771
  "pptx.contextMenu.ungroup": "\u53D6\u6D88\u7EC4\u5408",
1772
+ "pptx.pasteSpecial.dialogTitle": "\u9009\u62E9\u6027\u7C98\u8D34",
1773
+ "pptx.pasteSpecial.keepSourceFormatting": "\u4FDD\u7559\u6E90\u683C\u5F0F",
1774
+ "pptx.pasteSpecial.keepTextOnly": "\u53EA\u4FDD\u7559\u6587\u672C",
1775
+ "pptx.pasteSpecial.optionsLabel": "\u7C98\u8D34\u9009\u9879",
1776
+ "pptx.pasteSpecial.picture": "\u56FE\u7247",
1777
+ "pptx.pasteSpecial.useDestinationTheme": "\u4F7F\u7528\u76EE\u6807\u4E3B\u9898",
1762
1778
  "pptx.hyperlink.actionEndShow": "\u7ED3\u675F\u653E\u6620",
1763
1779
  "pptx.hyperlink.actionFirstSlide": "\u7B2C\u4E00\u5F20\u5E7B\u706F\u7247",
1764
1780
  "pptx.hyperlink.actionLabel": "\u64CD\u4F5C",
@@ -2098,6 +2114,7 @@ var translations17 = {
2098
2114
  "pptx.media.startAutomatically": "\u81EA\u52A8",
2099
2115
  "pptx.media.playAcrossSlides": "\u8DE8\u5E7B\u706F\u7247\u64AD\u653E",
2100
2116
  "pptx.media.fullScreen": "\u5168\u5C4F",
2117
+ "pptx.media.onlineVideoTitle": "\u5728\u7EBF\u89C6\u9891",
2101
2118
  "pptx.media.hideWhenNotPlaying": "\u4E0D\u64AD\u653E\u65F6\u9690\u85CF",
2102
2119
  "pptx.media.bookmarks": "\u4E66\u7B7E",
2103
2120
  "pptx.media.bookmark": "\u4E66\u7B7E",
@@ -2740,6 +2757,12 @@ var translations21 = {
2740
2757
  "pptx.transition.morphOption.byObject": "\u6309\u5BF9\u8C61",
2741
2758
  "pptx.transition.morphOption.byWord": "\u6309\u5B57\u8BCD",
2742
2759
  "pptx.transition.morphOption.byChar": "\u6309\u5B57\u7B26",
2760
+ "pptx.transition.pattern": "\u56FE\u6848",
2761
+ "pptx.transition.pattern.diamond": "\u83F1\u5F62",
2762
+ "pptx.transition.pattern.hexagon": "\u516D\u8FB9\u5F62",
2763
+ "pptx.transition.pattern.strip": "\u6761\u5E26",
2764
+ "pptx.transition.pattern.rectangle": "\u77E9\u5F62",
2765
+ "pptx.transition.thruBlk": "\u7ECF\u9ED1\u573A\u8FC7\u6E21",
2743
2766
  "pptx.keepAnnotations.title": "\u4FDD\u7559\u58A8\u8FF9\u6807\u6CE8\uFF1F",
2744
2767
  "pptx.keepAnnotations.description": "\u60A8\u5728 {{slides}} \u5F20\u5E7B\u706F\u7247\u4E0A\u6DFB\u52A0\u4E86 {{count}} \u6761\u58A8\u8FF9\u6807\u6CE8\u3002\u8981\u5C06\u5176\u4FDD\u7559\u5728\u5E7B\u706F\u7247\u4E0A\uFF0C\u8FD8\u662F\u653E\u5F03\uFF1F",
2745
2768
  "pptx.keepAnnotations.discard": "\u653E\u5F03",
package/dist/i18n.js CHANGED
@@ -1,4 +1,4 @@
1
- import { a as s, c as e, i as t, n as r, o, r as n, s as i, t as l } from "./translator-D7duxy6A.js";
1
+ import { a as s, c as e, i as t, n as r, o, r as n, s as i, t as l } from "./translator-Dn-ANCp2.js";
2
2
  export {
3
3
  o as LOCALE_CATALOG,
4
4
  l as createTranslator,
package/dist/index.d.ts CHANGED
@@ -1397,6 +1397,32 @@ interface TextStyle {
1397
1397
  * @see element-paragraph-geometry.ts
1398
1398
  */
1399
1399
  resolvedParagraphGeometry?: TextStyle;
1400
+ /**
1401
+ * Snapshot of the ELEMENT-scope `a:bodyPr` properties (vertical anchor,
1402
+ * text direction, columns, overflow, autofit, body insets, text wrap, and
1403
+ * the boolean/rotation attributes) as the load pipeline resolved them.
1404
+ *
1405
+ * A shape's own `a:bodyPr` is parsed first, then whatever it left
1406
+ * `undefined` is back-filled from the placeholder / layout / master
1407
+ * defaults (`applyPlaceholderBodyDefaults`), and a placeholder shape with
1408
+ * no `a:bodyPr` of its own has the INHERITED one parsed as if it were its
1409
+ * own. None of those three sources is distinguishable at
1410
+ * `element.textStyle` once the cascade finishes, so a writer that
1411
+ * re-emits every defined field turns an inherited anchor, inset, autofit
1412
+ * mode or `rtlCol` into a value pinned on the slide forever (and an
1413
+ * inherited `a:normAutofit` with no scale gets written back as
1414
+ * `a:spAutoFit`, flipping AutoSize from "shrink text" to "resize shape").
1415
+ *
1416
+ * Present only on an `element.textStyle` that came from a parsed deck.
1417
+ * The save path diffs the live style against this snapshot: a field that
1418
+ * still matches is an inheritance artefact and the writer leaves the
1419
+ * underlying `a:bodyPr` attribute untouched (whatever it already is,
1420
+ * present or absent); a field that differs was authored or has since
1421
+ * been edited and is written out.
1422
+ *
1423
+ * @see element-body-properties.ts
1424
+ */
1425
+ resolvedBodyProperties?: TextStyle;
1400
1426
  fontFamily?: string;
1401
1427
  fontSize?: number;
1402
1428
  /** When true, some form of autofit is in effect; see {@link autoFitMode} for which. */
@@ -1579,6 +1605,16 @@ interface TextStyle {
1579
1605
  align: 'l' | 'ctr' | 'r' | 'dec';
1580
1606
  leader?: 'none' | 'dot' | 'hyphen' | 'underscore';
1581
1607
  }>;
1608
+ /**
1609
+ * True when the paragraph's own `a:pPr` authored an EMPTY `<a:tabLst/>`
1610
+ * (explicitly "no tab stops", overriding whatever the cascade would
1611
+ * otherwise supply) rather than omitting the element entirely (inherit).
1612
+ * fast-xml-parser gives a childless element as the empty string, so
1613
+ * `tabLst` and no-`tabLst` are otherwise indistinguishable once `tabStops`
1614
+ * comes back empty either way. Paragraph-scope only; not part of the
1615
+ * element-level geometry cascade.
1616
+ */
1617
+ tabStopsExplicitEmpty?: boolean;
1582
1618
  /** Body text wrapping mode from `a:bodyPr/@wrap`. */
1583
1619
  textWrap?: 'square' | 'none';
1584
1620
  /** Preset text warp type from `a:bodyPr/a:prstTxWarp`. */
@@ -1621,6 +1657,20 @@ interface TextStyle {
1621
1657
  * serialised back on save, so it never disturbs the round-trip typefaces.
1622
1658
  */
1623
1659
  scriptFallbackFont?: string;
1660
+ /**
1661
+ * Set alongside {@link scriptFallbackFont} when the resolved {@link fontFamily}
1662
+ * came only from the paragraph/list-style/theme CASCADE (the run's own
1663
+ * `a:rPr` authored no `a:latin`/`a:ea`/`a:cs` of its own). A run always
1664
+ * inherits SOME font this way (typically the theme's `+mn-lt`), so without
1665
+ * this flag `fontFamily` was indistinguishable from a run that genuinely
1666
+ * chose that font itself, and the renderer never applied the theme's
1667
+ * per-script override (see #83): `+mn-lt` names only the LATIN member of
1668
+ * the font scheme and was never meant to cover text in a different
1669
+ * dominant script. An explicit `a:latin`/`a:ea`/`a:cs` authored on the run
1670
+ * itself still always wins; only the cascade default yields to the
1671
+ * script-specific override.
1672
+ */
1673
+ fontFamilyIsCascadeDefault?: boolean;
1624
1674
  /** Text language from `a:rPr/@lang`. */
1625
1675
  language?: string;
1626
1676
  /** Hyperlink mouse-over target from `a:hlinkMouseOver`. */
@@ -1643,6 +1693,16 @@ interface TextStyle {
1643
1693
  hyperlinkHighlightClick?: boolean;
1644
1694
  /** Whether hyperlink ends a sound (`a:hlinkClick/@endSnd`). */
1645
1695
  hyperlinkEndSound?: boolean;
1696
+ /**
1697
+ * Raw `a:hlinkClick/a:extLst` child, preserved verbatim for round-trip.
1698
+ * Carries vendor extensions this engine does not interpret, most commonly
1699
+ * `ahyp:hlinkClr` (Microsoft's "hyperlink color" extension,
1700
+ * `{A12FA001-AC4F-418D-AE19-62706E023703}`), which records whether a
1701
+ * hyperlink run should paint with the theme's text colour instead of the
1702
+ * hyperlink colour. Dropping the whole `a:extLst` silently reverted such a
1703
+ * run to the default (themed) hyperlink colour on save.
1704
+ */
1705
+ hyperlinkExtensionXml?: XmlObject;
1646
1706
  /** Kumimoji (ideographic text combining) flag for vertical CJK text (`a:rPr/@kumimoji`). */
1647
1707
  kumimoji?: boolean;
1648
1708
  /** Normalize height flag (`a:rPr/@normalizeH`). */
@@ -1796,6 +1856,15 @@ interface TextStyle {
1796
1856
  textGlowRadius?: number;
1797
1857
  /** Text glow opacity (0-1). */
1798
1858
  textGlowOpacity?: number;
1859
+ /**
1860
+ * Original glow colour-choice XML (`a:glow`'s `a:schemeClr`/`a:srgbClr`/…
1861
+ * child), preserved verbatim so a theme colour reference round-trips
1862
+ * instead of always being re-serialized as a resolved `a:srgbClr` (which
1863
+ * cuts the glow off from theme/Recolor changes).
1864
+ */
1865
+ textGlowColorXml?: XmlObject;
1866
+ /** Theme colour slot the glow colour resolved from, when it is `a:schemeClr`. */
1867
+ textGlowColorRef?: PptxThemeColorRef;
1799
1868
  /** Text reflection enabled flag. */
1800
1869
  textReflection?: boolean;
1801
1870
  /** Text reflection blur radius in px. */
@@ -1932,6 +2001,18 @@ interface BulletInfo {
1932
2001
  paragraphIndex?: number;
1933
2002
  /** Bullet font family from `a:buFont`. */
1934
2003
  fontFamily?: string;
2004
+ /**
2005
+ * PANOSE font-matching hint from `a:buFont/@panose`. `a:buFont` is a
2006
+ * CT_TextFont, the same complex type as `a:latin`/`a:ea`/`a:cs`/`a:sym`
2007
+ * (which carry the equivalent `TextStyle.latinFontPanose` etc.), so a
2008
+ * bullet's own PANOSE/pitch-family/charset decide the fallback glyph
2009
+ * PowerPoint substitutes when the named typeface is missing.
2010
+ */
2011
+ fontPanose?: string;
2012
+ /** Font pitch-and-family byte from `a:buFont/@pitchFamily`. */
2013
+ fontPitchFamily?: number;
2014
+ /** Font character-set byte from `a:buFont/@charset`. */
2015
+ fontCharset?: number;
1935
2016
  /** Bullet size as percentage of text font size from `a:buSzPct`. */
1936
2017
  sizePercent?: number;
1937
2018
  /** Bullet size in points from `a:buSzPts`. */
@@ -1973,6 +2054,18 @@ interface BulletInfo {
1973
2054
  /** When true, `<a:buSzTx/>` was specified — inherit the bullet size from
1974
2055
  * the run text font size. */
1975
2056
  sizeInherit?: boolean;
2057
+ /**
2058
+ * True when this bullet resolution came from the paragraph's OWN `a:pPr`
2059
+ * rather than the shape's `a:lstStyle`, an inherited placeholder, or the
2060
+ * master's `a:defPPr` / `p:txStyles`. `resolveParagraphBulletInfo` walks
2061
+ * that cascade and returns the first match, so without this flag a
2062
+ * writer that re-emits every resolved `BulletInfo` in full pins an
2063
+ * inherited bullet (e.g. a master `buFont="Arial"` / `buChar="•"`) onto
2064
+ * every paragraph's own `a:pPr` the moment the slide is rewritten. The
2065
+ * save path only writes the bullet group when this is `true`, mirroring
2066
+ * how `paragraphProperties` gates every other per-paragraph field.
2067
+ */
2068
+ ownedByParagraph?: boolean;
1976
2069
  }
1977
2070
  /**
1978
2071
  * A single text run within a paragraph.
@@ -2015,6 +2108,23 @@ interface TextSegment {
2015
2108
  fieldParagraphPropertiesXml?: XmlObject;
2016
2109
  /** Raw OMML XML node for equation segments (from `a14:m` / `m:oMathPara`). */
2017
2110
  equationXml?: Record<string, unknown>;
2111
+ /**
2112
+ * The ORIGINAL top-level paragraph child that carried this equation,
2113
+ * captured verbatim at parse time and keyed by its own tag: `{ 'a14:m':
2114
+ * ... }`, `{ 'm:oMathPara': ... }`, `{ 'm:oMath': ... }`, or `{
2115
+ * 'mc:AlternateContent': ... }` for an equation authored behind a
2116
+ * Choice/Fallback switch. `equationXml` above is the resolved math content
2117
+ * used for rendering (unwrapped one level for `a14:m`/`mc:AlternateContent`
2118
+ * sources); this field exists solely so the writer can re-emit an UNTOUCHED
2119
+ * equation byte-for-byte, Choice and Fallback both, instead of collapsing
2120
+ * it to a bare math element PowerPoint's own writer never produces.
2121
+ * `undefined` for a freshly inserted or edited equation, which the writer
2122
+ * instead reconstructs from `equationXml` (always `{ 'm:oMathPara': ... }`
2123
+ * or `{ 'm:oMath': ... }` for those cases). Any code that replaces
2124
+ * `equationXml` on an existing segment must drop this field, or the writer
2125
+ * would keep re-emitting the equation's OLD XML instead of the edit.
2126
+ */
2127
+ equationSourceXml?: Record<string, unknown>;
2018
2128
  /**
2019
2129
  * Optional equation number for numbered equations (e.g. "(1)", "(2.3)").
2020
2130
  * When present, the equation is rendered centered with the number right-aligned.
@@ -2299,6 +2409,24 @@ interface PptxShapeProperties {
2299
2409
  */
2300
2410
  interface PlaceholderTextLevelStyle {
2301
2411
  fontFamily?: string;
2412
+ /**
2413
+ * The RAW `a:defRPr/a:latin/@typeface` string (verbatim: a theme alias
2414
+ * such as `+mj-lt`/`+mn-lt`, or a literal face name) {@link fontFamily}
2415
+ * was resolved from. Master/layout text styles are parsed once and
2416
+ * cached, so `fontFamily` is a resolved-for-display snapshot; re-emitting
2417
+ * it as the literal name on every save (the master-level analogue of
2418
+ * `colorChoiceXml` below) flattens the theme alias the moment ANYTHING
2419
+ * about the deck is rewritten, even when this level was never touched.
2420
+ * Absent when the level declares no `a:latin`.
2421
+ */
2422
+ fontTypefaceXml?: string;
2423
+ /**
2424
+ * Snapshot of {@link fontFamily} exactly as parsed, before any edit. The
2425
+ * save path diffs the live value against this: unchanged means re-emit
2426
+ * {@link fontTypefaceXml} verbatim (preserve the alias); different means
2427
+ * a genuine edit, so the new literal name is written instead.
2428
+ */
2429
+ resolvedFontFamily?: string;
2302
2430
  fontSize?: number;
2303
2431
  bold?: boolean;
2304
2432
  italic?: boolean;
@@ -2348,8 +2476,32 @@ interface PlaceholderTextLevelStyle {
2348
2476
  tabStops?: TextStyle['tabStops'];
2349
2477
  lineSpacing?: number;
2350
2478
  lineSpacingExactPt?: number;
2479
+ /**
2480
+ * Space before the paragraph in px, resolved from EITHER `a:spcPts`
2481
+ * (absolute) or `a:spcPct` (a percentage of this level's own `a:defRPr`
2482
+ * font size) - the OOXML source is not distinguishable from this field
2483
+ * alone. See {@link spaceBeforePercent} / {@link resolvedSpaceBefore}.
2484
+ */
2351
2485
  spaceBefore?: number;
2352
2486
  spaceAfter?: number;
2487
+ /**
2488
+ * Snapshot of {@link spaceBefore} / {@link spaceAfter} exactly as parsed.
2489
+ * Diffed the same way as {@link resolvedFontFamily}: unchanged means the
2490
+ * writer re-emits the ORIGINAL form (`a:spcPct` when
2491
+ * {@link spaceBeforePercent} / {@link spaceAfterPercent} is set); a value
2492
+ * that has since moved away from the snapshot is a genuine edit and is
2493
+ * always written as `a:spcPts`, since an editor works in absolute units.
2494
+ */
2495
+ resolvedSpaceBefore?: number;
2496
+ resolvedSpaceAfter?: number;
2497
+ /**
2498
+ * The raw `a:spcPct` fraction (e.g. `0.2` for 20%) {@link spaceBefore} /
2499
+ * {@link spaceAfter} was resolved from, when the source used percentage
2500
+ * spacing rather than `a:spcPts`. Absent when the source used `a:spcPts`
2501
+ * (or authored no spacing at all).
2502
+ */
2503
+ spaceBeforePercent?: number;
2504
+ spaceAfterPercent?: number;
2353
2505
  /** Default tab interval in CSS pixels (`a:lvlXpPr/@defTabSz`). */
2354
2506
  defaultTabSize?: number;
2355
2507
  /** Whether East Asian line-breaking rules are enabled. */
@@ -5082,6 +5234,18 @@ interface PptxSmartArtLayoutDefinition {
5082
5234
  rootNode: PptxSmartArtLayoutNode;
5083
5235
  /** Original definition retained for constraint evaluation and foreign rules. */
5084
5236
  rawXml?: XmlObject;
5237
+ /**
5238
+ * The un-parsed layout-definition part text (starting at `<dgm:layoutDef>`,
5239
+ * XML declaration included). `rawXml` above loses the document order of
5240
+ * differently-named siblings (the package-wide `fast-xml-parser`
5241
+ * configuration groups children into one array per tag), which the
5242
+ * per-point DiagramML engine (`core/utils/smartart-engine/`) needs to
5243
+ * execute a `layoutNode` body's `forEach`/`choose`/`constrLst` statements
5244
+ * in their real declared sequence - see that package's `ordered-xml.ts`.
5245
+ * `undefined` when the part could not be read (matches `rawXml`'s own
5246
+ * optionality); the engine falls back to the legacy interpreter then.
5247
+ */
5248
+ rawXmlText?: string;
5085
5249
  }
5086
5250
  //#endregion
5087
5251
  //#region src/core/types/smart-art-node.d.ts
@@ -6194,6 +6358,20 @@ interface PptxTableData {
6194
6358
  * present when there is at least one effect.
6195
6359
  */
6196
6360
  tableEffects?: ParsedTableStyleEffect[];
6361
+ /**
6362
+ * Table-cell-context default text size in points, resolved from the
6363
+ * slide's master `p:otherStyle` (ECMA-376 §19.3.1.42 CT_TextListStyle,
6364
+ * §19.3.1.52 for `p:txStyles`). PowerPoint sizes a table cell's text off
6365
+ * this master default (commonly 18pt) whenever neither the run nor the
6366
+ * (size-less) table style provides one; without it, cell text without an
6367
+ * explicit `a:rPr@sz` fell back to the browser's own default font size
6368
+ * (16px / 12pt) instead. A render-only hint: it is not part of any
6369
+ * individual cell's parsed style and is never written back on save, so
6370
+ * resaving an unstyled cell does not bake in an explicit size that was
6371
+ * never authored. `undefined` when no master/otherStyle size resolves
6372
+ * (renderers should leave the browser default in place in that case).
6373
+ */
6374
+ defaultCellFontSize?: number;
6197
6375
  }
6198
6376
  /**
6199
6377
  * A single fill reference within a table style section.
@@ -6219,6 +6397,14 @@ interface ParsedTableStyleFill {
6219
6397
  tint?: number;
6220
6398
  /** Shade value (0-100 000). */
6221
6399
  shade?: number;
6400
+ /**
6401
+ * Alpha (opacity) value (0-100 000, where 100 000 is fully opaque) from an
6402
+ * `a:alpha` child of `a:schemeClr`/`a:srgbClr`. Several built-in table
6403
+ * styles (e.g. "Light Style 1/3", "Themed Style 1/2") band their rows with
6404
+ * a partially transparent tint of the theme colour rather than a tint/shade
6405
+ * blend.
6406
+ */
6407
+ alpha?: number;
6222
6408
  /** Explicit sRGB hex colour (e.g. `#FF8800`) from `a:srgbClr`. */
6223
6409
  color?: string;
6224
6410
  /** The fill was `a:noFill`: renders transparent and clears lower layers. */
@@ -7054,6 +7240,20 @@ interface ContentPartInkStroke {
7054
7240
  * NAMES differ.
7055
7241
  */
7056
7242
  tiltEncoding?: 'vector' | 'azimuthAltitude';
7243
+ /**
7244
+ * Per-point timestamps (milliseconds), decoded from the source InkML
7245
+ * trace's `T` channel when it declared one.
7246
+ *
7247
+ * Absent for the overwhelming majority of real decks: PowerPoint's own
7248
+ * SaveAs output declares only `X`/`Y` and has no per-point time channel at
7249
+ * all (see `contentpart-real-ink-roundtrip.test.ts`'s fixture), so this is
7250
+ * populated only for InkML sources that genuinely author one (a captured
7251
+ * digitizer session, OneNote, a Surface Hub export). When present, ink
7252
+ * replay ("watch the ink get drawn") uses each stroke's own first/last
7253
+ * timestamp to time its reveal instead of the fixed per-stroke cascade; see
7254
+ * `pptx-viewer-shared`'s `render/ink-replay-timeline.ts`.
7255
+ */
7256
+ pointTimestamps?: number[];
7057
7257
  }
7058
7258
  /**
7059
7259
  * A content-part element wrapped in `mc:AlternateContent`.
@@ -7098,6 +7298,34 @@ interface ZoomPptxElement extends PptxElementBase, PptxImageProperties {
7098
7298
  summaryTargets?: SummaryZoomTarget[];
7099
7299
  /** Layout mode authored on the Summary Zoom container. */
7100
7300
  summaryLayout?: 'grid' | 'fixed';
7301
+ /**
7302
+ * `zmPr/@returnToParent` (MS-PPTX `CT_ZoomObjectProperties`, shared by all
7303
+ * three Zoom kinds): whether continuing forward from the destination slide
7304
+ * during a live show returns to this Zoom's origin slide instead of
7305
+ * advancing linearly through the deck. The schema declares `<xsd:attribute
7306
+ * name="returnToParent" type="xsd:boolean" use="optional" default="true"/>`,
7307
+ * so an ABSENT attribute means `true`, not `false`. This codebase still
7308
+ * leaves the field `undefined` (rather than fabricating `true`) when the
7309
+ * source XML omits it, so a round-trip never invents an attribute the
7310
+ * source never had; a CONSUMER of this field (playback, e.g.
7311
+ * `pptx-viewer-shared`'s `resolveZoomNavigationTarget`) must read
7312
+ * `returnToParent !== false`, not `Boolean(returnToParent)`, to get the
7313
+ * spec-correct effective value. For `zoomType: 'summary'`, this mirrors the
7314
+ * first tile's own value; see {@link SummaryZoomTarget.returnToParent} for
7315
+ * the per-tile value.
7316
+ */
7317
+ returnToParent?: boolean;
7318
+ /**
7319
+ * `zmPr/@transitionDur` (MS-PPTX `CT_ZoomObjectProperties`): the
7320
+ * zoom-transition length in milliseconds. PowerPoint's own writer emits a
7321
+ * unitless decimal-millisecond value for every OOXML `ST_UniversalTimeOffset`
7322
+ * this codebase has observed (see the media-trim/-fade parsers), so this
7323
+ * follows the same convention rather than the full TIMEOFFSET grammar's
7324
+ * unit suffixes. Undefined uses the destination slide's own transition.
7325
+ * For `zoomType: 'summary'`, this mirrors the first tile's own value; see
7326
+ * {@link SummaryZoomTarget.transitionDurationMs} for the per-tile value.
7327
+ */
7328
+ transitionDurationMs?: number;
7101
7329
  }
7102
7330
  /** A single section tile within a PowerPoint Summary Zoom container. */
7103
7331
  interface SummaryZoomTarget extends PptxImageProperties {
@@ -7113,6 +7341,10 @@ interface SummaryZoomTarget extends PptxImageProperties {
7113
7341
  offsetFactorY?: number;
7114
7342
  scaleFactorX?: number;
7115
7343
  scaleFactorY?: number;
7344
+ /** This tile's own `zmPr/@returnToParent`; see {@link ZoomPptxElement.returnToParent}. */
7345
+ returnToParent?: boolean;
7346
+ /** This tile's own `zmPr/@transitionDur` in milliseconds; see {@link ZoomPptxElement.transitionDurationMs}. */
7347
+ transitionDurationMs?: number;
7116
7348
  rawXml?: XmlObject;
7117
7349
  }
7118
7350
  /**
@@ -8103,6 +8335,17 @@ interface PptxAttributeAnimation {
8103
8335
  * IS consulted regardless of this field's value. Absent means `lin`.
8104
8336
  */
8105
8337
  calcMode?: 'discrete' | 'lin' | 'fmla';
8338
+ /**
8339
+ * `p:anim/@_p14:bounceEnd` (Office 2010 `p14` extension attribute,
8340
+ * MS-OI29500), normalized to a 0-1 fraction of this behaviour's own
8341
+ * duration. PowerPoint's Fly In "Bounce End" effect option writes this on
8342
+ * the position-ramp `p:anim` node(s): the fraction of the duration at
8343
+ * which the primary travel completes, with the remainder spent bouncing
8344
+ * and settling at the final value. Mirrored verbatim by PowerPoint onto
8345
+ * the enclosing `p:cTn/@_p14:presetBounceEnd`. Absent for every animation
8346
+ * that doesn't use this effect option (the overwhelming majority).
8347
+ */
8348
+ bounceEnd?: number;
8106
8349
  }
8107
8350
  /** Signed HSL channel deltas parsed from `p:animClr/p:by/p:hsl`. */
8108
8351
  interface PptxHslColorDelta {
@@ -8184,7 +8427,19 @@ interface PptxTextAnimationTarget {
8184
8427
  * These map directly to OOXML condition event attribute values
8185
8428
  * (ISO/IEC 29500-1 S19.5.28 CT_TLTimeCondition).
8186
8429
  */
8187
- type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick';
8430
+ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick' | 'onMouseOver' | 'onMouseOut' | 'onNext' | 'onPrev' | 'onStopAudio' | 'onDblClick' | 'onMediaBookmark';
8431
+ /**
8432
+ * `p14:bmkTgt` (Office 2010 `p14` extension, MS-OI29500): names the specific
8433
+ * media element and bookmark an `evt="onMediaBookmark"` condition fires for.
8434
+ * `bookmarkName` matches a `p14:bmk/@_name` on that media element's own
8435
+ * `p14:bmkLst` (see `MediaBookmark.label` in `core/types/elements.ts`).
8436
+ */
8437
+ interface PptxMediaBookmarkTarget {
8438
+ /** `p14:bmkTgt/@_spid`: the media element's shape id. */
8439
+ shapeId: string;
8440
+ /** `p14:bmkTgt/@_bmkName`: the bookmark's name. */
8441
+ bookmarkName: string;
8442
+ }
8188
8443
  /**
8189
8444
  * Structured representation of a single OOXML animation condition
8190
8445
  * from `p:cond` elements inside `p:stCondLst` or `p:endCondLst`.
@@ -8204,6 +8459,11 @@ type AnimationConditionEvent = 'onBegin' | 'onEnd' | 'begin' | 'end' | 'onClick'
8204
8459
  interface AnimationCondition {
8205
8460
  /** Event that triggers the condition. */
8206
8461
  event?: AnimationConditionEvent;
8462
+ /**
8463
+ * The media element/bookmark this condition fires for, when
8464
+ * {@link event} is `onMediaBookmark`. See {@link PptxMediaBookmarkTarget}.
8465
+ */
8466
+ bookmarkTarget?: PptxMediaBookmarkTarget;
8207
8467
  /** Delay in milliseconds (from `@_delay`). "indefinite" is represented as -1. */
8208
8468
  delay?: number;
8209
8469
  /** Target time node ID reference (from `@_tn`). */
@@ -9052,7 +9312,12 @@ interface PptxSlideTransition {
9052
9312
  spokes?: number;
9053
9313
  /** Pattern type for shred transition. */
9054
9314
  pattern?: string;
9055
- /** Through-black flag for blinds/checker (OOXML `@_thruBlk`). */
9315
+ /**
9316
+ * Through-black flag (OOXML `@_thruBlk`). COM-verified to actually apply to
9317
+ * `cut` and `fade` (see {@link TRANSITION_THRUBLK_TYPES}); parsed generically
9318
+ * off any standard transition child so an unexpected authored value still
9319
+ * round-trips.
9320
+ */
9056
9321
  thruBlk?: boolean;
9057
9322
  /** Split orientation (horz/vert) parsed from `@_orient`. */
9058
9323
  orient?: PptxSplitOrientation;
@@ -9522,7 +9787,12 @@ interface PptxHeaderFooter {
9522
9787
  hasDateTime?: boolean;
9523
9788
  dateTimeText?: string;
9524
9789
  dateTimeAuto?: boolean;
9525
- /** OOXML date format pattern (e.g. "M/d/yyyy", "dddd, MMMM dd, yyyy"). */
9790
+ /**
9791
+ * The master date placeholder's own `a:fld/@type` (e.g. "datetime2"), NOT a
9792
+ * format pattern. It is one of the predefined OOXML datetime field types
9793
+ * (`datetime1`-`datetime13`); the display pattern for each is resolved by
9794
+ * `resolveFieldDateText` in `packages/shared/src/render/text-field-substitution.ts`.
9795
+ */
9526
9796
  dateFormat?: string;
9527
9797
  hasSlideNumber?: boolean;
9528
9798
  }
package/dist/index.js CHANGED
@@ -1,41 +1,41 @@
1
- import { $o as s, Ks as a, Mu as o, Ol as r, Qo as t, Rd as i, Rm as l, Tc as n, Tl as m, Xo as S, Yo as d, Yu as p, Zt as T, dh as h, fh as v, hh as g, hl as P, ic as u, jo as c, kl as C, lp as f, mh as k, nn as A, np as E, ph as N, rs as D, yl as b } from "./transition-overlay-BcUomRXK.js";
2
- import { i as I } from "./translator-D7duxy6A.js";
3
- import { a as R, c as B, l as F, o as _, s as y, t as L, u as V } from "./export-DoyAdIHl.js";
1
+ import { $t as e, Ah as a, Al as o, Bl as r, Bo as t, El as i, Ic as l, Il as n, Mh as S, Nh as m, Tp as d, Wu as p, Zd as h, _p as T, as as v, cs as c, hc as g, in as P, jh as u, kh as A, ls as C, nh as E, os as N, ps as k, rc as f, sd as D, zl as I } from "./transition-overlay-CfsPqlES.js";
2
+ import { i as x } from "./translator-Dn-ANCp2.js";
3
+ import { M as _, a as F, c as O, l as L, o as R, s as V, t as w } from "./export-BUx-Kmlc.js";
4
4
  import "./i18n.js";
5
5
  export {
6
- T as PPTX_OPEN_ACCEPT,
7
- A as PRESENTATION_OPEN_EXTENSIONS,
8
- L as PowerPointViewer,
9
- c as createImageElementFromFile,
10
- d as defaultCssVars,
11
- S as defaultRadius,
12
- t as defaultThemeColors,
13
- s as deleteAutosaveSnapshot,
14
- D as describeCollaborationShellState,
15
- _ as exportAllSlidesToSvg,
16
- y as exportAllSlidesToSvgBlobs,
17
- B as exportSlideAsSvg,
18
- F as exportSlideToSvg,
19
- V as exportSlideToSvgBlob,
20
- a as forgetSessionDeck,
21
- u as getAutosaveSnapshot,
22
- n as getSessionTabId,
23
- P as isLegacyBinaryPresentation,
24
- b as isSupportedPresentationFile,
25
- m as listAutosaveSnapshots,
26
- r as loadPresentationDeck,
27
- C as loadSessionDeck,
28
- o as parsePresentationSessionId,
29
- p as presentationBaseName,
30
- I as registerTranslations,
31
- i as rememberSessionDeck,
32
- R as renderToCanvas,
33
- E as restoreSessionDeck,
34
- f as savedPresentationFileName,
35
- l as themeToCssVars,
36
- h as vermilionDarkColors,
37
- v as vermilionDarkTheme,
38
- N as vermilionLightColors,
39
- k as vermilionLightTheme,
40
- g as vermilionRadius
6
+ e as PPTX_OPEN_ACCEPT,
7
+ P as PRESENTATION_OPEN_EXTENSIONS,
8
+ w as PowerPointViewer,
9
+ t as createImageElementFromFile,
10
+ v as defaultCssVars,
11
+ N as defaultRadius,
12
+ c as defaultThemeColors,
13
+ C as deleteAutosaveSnapshot,
14
+ k as describeCollaborationShellState,
15
+ F as exportAllSlidesToSvg,
16
+ R as exportAllSlidesToSvgBlobs,
17
+ V as exportSlideAsSvg,
18
+ O as exportSlideToSvg,
19
+ L as exportSlideToSvgBlob,
20
+ f as forgetSessionDeck,
21
+ g as getAutosaveSnapshot,
22
+ l as getSessionTabId,
23
+ i as isLegacyBinaryPresentation,
24
+ o as isSupportedPresentationFile,
25
+ n as listAutosaveSnapshots,
26
+ I as loadPresentationDeck,
27
+ r as loadSessionDeck,
28
+ p as parsePresentationSessionId,
29
+ D as presentationBaseName,
30
+ x as registerTranslations,
31
+ h as rememberSessionDeck,
32
+ _ as renderToCanvas,
33
+ T as restoreSessionDeck,
34
+ d as savedPresentationFileName,
35
+ E as themeToCssVars,
36
+ A as vermilionDarkColors,
37
+ a as vermilionDarkTheme,
38
+ u as vermilionLightColors,
39
+ S as vermilionLightTheme,
40
+ m as vermilionRadius
41
41
  };