pptx-svelte-viewer 4.7.0 → 4.9.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.
@@ -1296,6 +1296,27 @@ interface ShapeStyle {
1296
1296
  * `authored-shape-style.ts`'s `effectIsPurelyStyleMatrix`.
1297
1297
  */
1298
1298
  inheritedEffectStyle?: ShapeStyle;
1299
+ /**
1300
+ * Set by a style-matrix pick (the Shape Styles gallery): the shape's own
1301
+ * `spPr` fill, outline and effects were replaced by `<p:style>`, so the
1302
+ * writer clears whatever the retained `spPr` still authored before it
1303
+ * writes the (now reference-owned) style. Never parsed; editor state only.
1304
+ */
1305
+ styleMatrixReset?: boolean;
1306
+ }
1307
+ /**
1308
+ * The result of resolving a `<p:style>` block against the loaded theme.
1309
+ *
1310
+ * `shapeStyle` is exactly what the load pipeline would have produced for a
1311
+ * shape whose `spPr` authors nothing and whose `<p:style>` is `styleXml`:
1312
+ * the flat fill/outline/effect values a renderer needs, the reference indices
1313
+ * and colours the writer re-emits, and the inheritance baselines that tell the
1314
+ * writer to leave `spPr` empty while the flat values still agree with them.
1315
+ */
1316
+ interface ResolvedStyleMatrix {
1317
+ shapeStyle: ShapeStyle;
1318
+ /** The text colour `<a:fontRef>` names, resolved to hex. */
1319
+ fontColor?: string;
1299
1320
  }
1300
1321
  //#endregion
1301
1322
  //#region src/core/types/text.d.ts
@@ -1930,6 +1951,16 @@ interface TextStyle {
1930
1951
  textReflectionEndOpacity?: number;
1931
1952
  /** Text reflection offset distance in px. */
1932
1953
  textReflectionOffset?: number;
1954
+ /**
1955
+ * Text reflection end position (`@endPos`) as a 0-1 fraction of the text
1956
+ * height the fade reaches. Mirrors `ShapeStyle.reflectionEndPosition`.
1957
+ */
1958
+ textReflectionEndPosition?: number;
1959
+ /**
1960
+ * Text reflection offset direction (`@dir`) in degrees. Mirrors
1961
+ * `ShapeStyle.reflectionDirection`.
1962
+ */
1963
+ textReflectionDirection?: number;
1933
1964
  /**
1934
1965
  * Text reflection fade direction (`a:rPr/a:effectLst/a:reflection/@fadeDir`)
1935
1966
  * in degrees. Mirrors `ShapeStyle.reflectionFadeDirection`.
@@ -2248,6 +2279,21 @@ interface TextSegment {
2248
2279
  * populated; unrelated fields fall back to the shape-level style.
2249
2280
  */
2250
2281
  paragraphProperties?: TextStyle;
2282
+ /**
2283
+ * The paragraph this segment starts authored an EMPTY `<a:pPr/>`. Only
2284
+ * meaningful on the first segment of a paragraph. The writer re-emits the
2285
+ * empty element when it has no paragraph property of its own to write, so
2286
+ * a rewritten slide keeps the markup PowerPoint wrote.
2287
+ */
2288
+ emptyParagraphPropertiesAuthored?: boolean;
2289
+ /**
2290
+ * The paragraph this segment starts has no run content and authored no
2291
+ * `a:endParaRPr` (a bare `<a:p/>`, possibly with an `a:pPr`). Only
2292
+ * meaningful on the first segment of a paragraph. It stops the writer
2293
+ * inventing an empty run or an `<a:endParaRPr lang="en-US"/>` stub for a
2294
+ * paragraph that still has no content when saved.
2295
+ */
2296
+ bareParagraph?: boolean;
2251
2297
  /**
2252
2298
  * Phonetic annotation text from `a:ruby > a:rt` (e.g. furigana, pinyin).
2253
2299
  * When present, the renderer should wrap the base text with an HTML `<ruby>` tag.
@@ -2270,6 +2316,22 @@ interface TextSegment {
2270
2316
  * Used by the renderer to apply font family, colour, etc. to the `<rt>` element.
2271
2317
  */
2272
2318
  rubyStyle?: TextStyle;
2319
+ /**
2320
+ * The parsed `a:rubyPr` node, kept verbatim so its attributes (`hps`,
2321
+ * `hpsRaise`, `hpsBaseText`, `lid`, ...) round-trip exactly; only an
2322
+ * edited {@link rubyAlignment} is written over it on save.
2323
+ */
2324
+ rubyPropertiesXml?: XmlObject;
2325
+ /**
2326
+ * What each of a ruby run's two base-side `a:rPr`s authored on its own:
2327
+ * `outer` is the containing `a:r`'s, `base` the `a:rubyBase` run's. The
2328
+ * flat {@link style} merges both for rendering; these let the writer give
2329
+ * each `a:rPr` back only its own properties (plus any later edit).
2330
+ */
2331
+ rubyRunAuthoredStyles?: {
2332
+ outer?: TextStyle;
2333
+ base?: TextStyle;
2334
+ };
2273
2335
  }
2274
2336
  //#endregion
2275
2337
  //#region src/core/types/element-base.d.ts
@@ -4181,6 +4243,14 @@ interface PptxChartData {
4181
4243
  style?: PptxChartStyle;
4182
4244
  /** Grouping mode for bar/area/line charts: 'clustered' | 'stacked' | 'percentStacked' */
4183
4245
  grouping?: 'clustered' | 'stacked' | 'percentStacked';
4246
+ /**
4247
+ * The source `c:grouping` was `standard`, which {@link grouping} folds into
4248
+ * `'clustered'` (a 2D bar chart draws the two the same). A 3D chart draws
4249
+ * `standard` differently: each series on its own depth row. The writer
4250
+ * emits `standard` again while `grouping` is still `'clustered'`, so the
4251
+ * chart round-trips unchanged.
4252
+ */
4253
+ groupingStandard?: boolean;
4184
4254
  /**
4185
4255
  * Whether the first (or only) series varies its point colours
4186
4256
  * (`c:varyColors/@val`). Pie/doughnut default this on; single-series
@@ -5578,6 +5648,14 @@ interface PptxSmartArtNode {
5578
5648
  * quick-style variation) applied to every other node.
5579
5649
  */
5580
5650
  coherent3DOff?: boolean;
5651
+ /**
5652
+ * The layout variables PowerPoint recorded for each presentation node
5653
+ * this point drives (`dgm:prSet/@presName` -> `dgm:presLayoutVars`
5654
+ * variable -> `@val`), e.g. `{ hierRoot1: { hierBranch: 'l' } }` for an
5655
+ * org-chart manager set to "Left Hanging". Read-only: the presentation
5656
+ * points themselves round-trip verbatim.
5657
+ */
5658
+ presLayoutVarsByName?: Record<string, Record<string, string>>;
5581
5659
  /**
5582
5660
  * Per-run text + run-properties for the node's first paragraph, captured at
5583
5661
  * parse time. When the joined run text still equals {@link text} (the node
@@ -5647,6 +5725,16 @@ interface PptxSmartArtQuickStyleLabel {
5647
5725
  name: string;
5648
5726
  /** Theme-resolved `dgm:style` refs for this label's role, when available. */
5649
5727
  resolvedStyle?: PptxSmartArtResolvedStyleRef;
5728
+ /**
5729
+ * The label's own `dgm:scene3d` (per-shape camera + light rig). PowerPoint
5730
+ * copies it onto a shape's cached `a:scene3d` unless it is the default
5731
+ * front camera with a `threePt` light (see `applySmartArtQuickStyle3d`).
5732
+ */
5733
+ scene3d?: Pptx3DScene;
5734
+ /** The label's own `dgm:sp3d` (bevel / extrusion / contour / material); absent when empty. */
5735
+ shape3d?: Pptx3DShape;
5736
+ /** The label's `dgm:txPr/a:sp3d` label-text extrusion (Bird's Eye Scene). */
5737
+ text3d?: Text3DStyle;
5650
5738
  }
5651
5739
  /** CT_CTStyleLabel metadata from a color-transform definition. */
5652
5740
  interface PptxSmartArtColorStyleLabel {
@@ -5714,9 +5802,10 @@ interface PptxSmartArtQuickStyle extends PptxSmartArtDefinitionMetadata {
5714
5802
  * for the "Scene" quick styles (Brick, Flat, Metallic, Sunset, Bird's Eye
5715
5803
  * Scene). One camera renders the whole diagram; per-shape `a:scene3d` is
5716
5804
  * absent for those styles (see `PptxSmartArtDrawingShape.scene3d`). Each
5717
- * `dgm:styleLbl` also carries its own per-label `dgm:scene3d`/`dgm:sp3d`,
5718
- * but PowerPoint bakes those fully resolved onto each cached shape's own
5719
- * `dsp:spPr/a:sp3d`, so only the diagram-level scene is exposed here.
5805
+ * `dgm:styleLbl` also carries its own per-label `dgm:scene3d`/`dgm:sp3d`
5806
+ * ({@link PptxSmartArtQuickStyleLabel.scene3d} / `shape3d` / `text3d`),
5807
+ * which PowerPoint bakes onto each cached shape; they are re-applied when a
5808
+ * structural edit regenerates the shapes.
5720
5809
  */
5721
5810
  scene3d?: Pptx3DScene;
5722
5811
  }
@@ -5847,6 +5936,11 @@ interface PptxSmartArtDrawingShape extends PptxCustomPathProperties {
5847
5936
  fillNone?: boolean;
5848
5937
  /** Solid fill colour (hex). */
5849
5938
  fillColor?: string;
5939
+ /**
5940
+ * Opacity (0..1) of the solid fill, from the colour's `a:alpha` (Basic Venn
5941
+ * paints its circles at 50% so overlaps blend). Absent when opaque.
5942
+ */
5943
+ fillOpacity?: number;
5850
5944
  /**
5851
5945
  * Gradient fill stops when the cached shape uses `a:gradFill`. Positions are
5852
5946
  * 0..100 (percent). Renderers emit an SVG/CSS gradient instead of a flat box.
@@ -7804,6 +7898,84 @@ interface PptxThemeOption {
7804
7898
  name?: string;
7805
7899
  }
7806
7900
  //#endregion
7901
+ //#region src/core/types/animation-behavior.d.ts
7902
+ /** Timing of one behaviour, from its own `p:cBhvr/p:cTn`. */
7903
+ interface PptxAnimationBehaviorTiming {
7904
+ /** `p:cTn/@dur` in ms; absent when `indefinite` or unset. */
7905
+ durationMs?: number;
7906
+ /** Start offset in ms from `p:stCondLst/p:cond/@delay`, relative to the effect start. */
7907
+ delayMs?: number;
7908
+ /** `p:cTn/@accel` as a 0..1 fraction of the behaviour's duration. */
7909
+ accel?: number;
7910
+ /** `p:cTn/@decel` as a 0..1 fraction of the behaviour's duration. */
7911
+ decel?: number;
7912
+ /** `p:cTn/@autoRev`: play forward, then backward, doubling the active time. */
7913
+ autoReverse?: boolean;
7914
+ /** `p:cTn/@repeatCount` in plain iterations (OOXML stores thousandths). */
7915
+ repeatCount?: number;
7916
+ /** `p:cTn/@tmFilter`: the raw `"t,v; t,v; ..."` time remapping list. */
7917
+ tmFilter?: string;
7918
+ }
7919
+ interface BehaviorBase {
7920
+ /** Lower-cased `p:attrNameLst` entries, in document order. */
7921
+ attrNames: string[];
7922
+ /** `p:cBhvr/@additive` (`base`, `sum`, `repl`, `mult`, `none`). */
7923
+ additive?: string;
7924
+ timing: PptxAnimationBehaviorTiming;
7925
+ }
7926
+ /** `p:set`: a discrete value held from the behaviour's start. */
7927
+ interface PptxSetBehavior extends BehaviorBase {
7928
+ kind: 'set';
7929
+ value: string | number | boolean;
7930
+ }
7931
+ /** `p:anim`: a `p:tavLst` ramp or a `from`/`to`/`by` formula ramp. */
7932
+ interface PptxAnimBehavior extends BehaviorBase {
7933
+ kind: 'anim';
7934
+ calcMode?: 'discrete' | 'lin' | 'fmla';
7935
+ valueType?: string;
7936
+ from?: string;
7937
+ to?: string;
7938
+ by?: string;
7939
+ keyframes: PptxAnimationKeyframe[];
7940
+ }
7941
+ /** `p:animEffect`: a filter transition (`fade`, `wipe(down)`...). */
7942
+ interface PptxAnimEffectBehavior extends BehaviorBase {
7943
+ kind: 'animEffect';
7944
+ filter?: string;
7945
+ transition?: 'in' | 'out' | 'none';
7946
+ }
7947
+ /** A `p:animScale` factor pair (1 = unscaled) or a `p:animMotion` offset (slide fractions). */
7948
+ interface PptxBehaviorPoint {
7949
+ x: number;
7950
+ y: number;
7951
+ }
7952
+ /** `p:animScale`: scale factors as fractions (OOXML stores percent*1000, so `100000` = 1). */
7953
+ interface PptxAnimScaleBehavior extends BehaviorBase {
7954
+ kind: 'animScale';
7955
+ from?: PptxBehaviorPoint;
7956
+ to?: PptxBehaviorPoint;
7957
+ by?: PptxBehaviorPoint;
7958
+ zoomContents?: boolean;
7959
+ }
7960
+ /** `p:animRot`: rotation in degrees (OOXML stores 60000ths). */
7961
+ interface PptxAnimRotBehavior extends BehaviorBase {
7962
+ kind: 'animRot';
7963
+ from?: number;
7964
+ to?: number;
7965
+ by?: number;
7966
+ }
7967
+ /** `p:animMotion`: a path (slide fractions) or a `from`/`to`/`by` offset. */
7968
+ interface PptxAnimMotionBehavior extends BehaviorBase {
7969
+ kind: 'animMotion';
7970
+ path?: string;
7971
+ origin?: string;
7972
+ from?: PptxBehaviorPoint;
7973
+ to?: PptxBehaviorPoint;
7974
+ by?: PptxBehaviorPoint;
7975
+ }
7976
+ /** One behaviour child of an effect, tagged by its OOXML element. */
7977
+ type PptxAnimationBehavior = PptxSetBehavior | PptxAnimBehavior | PptxAnimEffectBehavior | PptxAnimScaleBehavior | PptxAnimRotBehavior | PptxAnimMotionBehavior;
7978
+ //#endregion
7807
7979
  //#region src/core/types/animation.d.ts
7808
7980
  /**
7809
7981
  * Built-in animation preset names used for entrance, exit, and emphasis effects.
@@ -8355,6 +8527,14 @@ interface PptxNativeAnimation {
8355
8527
  * shared playback (round-trip/typed-model only so far).
8356
8528
  */
8357
8529
  setAnimations?: PptxSetAnimation[];
8530
+ /**
8531
+ * Every behaviour child of this effect (`p:set`, `p:anim`, `p:animEffect`,
8532
+ * `p:animScale`, `p:animRot`, `p:animMotion`) with its own timing, as
8533
+ * authored. The single-valued fields above flatten a composed preset;
8534
+ * this keeps the whole tree so playback can follow what PowerPoint wrote
8535
+ * (see `animation-behavior-player` in `pptx-viewer-shared`).
8536
+ */
8537
+ behaviors?: PptxAnimationBehavior[];
8358
8538
  }
8359
8539
  /**
8360
8540
  * One `p:set` discrete (non-interpolated) attribute assignment composed
@@ -11265,6 +11445,8 @@ interface IPptxHandlerRuntime {
11265
11445
  updateThemeColorScheme(colorScheme: PptxThemeColorScheme): Promise<void>;
11266
11446
  updateThemeFontScheme(fontScheme: PptxThemeFontScheme): Promise<void>;
11267
11447
  updateThemeName(name: string): Promise<void>;
11448
+ /** Resolve a `<p:style>` node against the loaded theme (see PptxHandlerRuntimeStyleMatrixResolve). */
11449
+ resolveStyleMatrixReferences(styleXml: XmlObject): ResolvedStyleMatrix;
11268
11450
  applyTheme(colorScheme: PptxThemeColorScheme, fontScheme: PptxThemeFontScheme, themeName?: string): Promise<void>;
11269
11451
  load(data: ArrayBuffer, options?: PptxHandlerLoadOptions): Promise<PptxData>;
11270
11452
  getChartDataForGraphicFrame(slidePath: string, graphicFrame: XmlObject | undefined): Promise<PptxChartData | undefined>;
@@ -11560,6 +11742,14 @@ declare class PptxHandlerCore {
11560
11742
  * @param name - New display name for the theme.
11561
11743
  */
11562
11744
  updateThemeName(name: string): Promise<void>;
11745
+ /**
11746
+ * Resolve a `<p:style>` block (`a:lnRef` / `a:fillRef` / `a:effectRef` /
11747
+ * `a:fontRef`) against the loaded theme, exactly as the load path would for
11748
+ * a shape whose `spPr` authors nothing. Apply the returned `shapeStyle` to a
11749
+ * shape and it renders like PowerPoint's Shape Styles entry and saves as a
11750
+ * bare `<p:style>` with an empty `spPr`, which is what PowerPoint writes.
11751
+ */
11752
+ resolveStyleMatrixReferences(styleXml: XmlObject): ResolvedStyleMatrix;
11563
11753
  /**
11564
11754
  * Apply a complete theme in one call (colour scheme + font scheme + optional name).
11565
11755
  *
@@ -12659,6 +12849,15 @@ interface PictureBulletMarker {
12659
12849
  imageRelId?: string;
12660
12850
  }
12661
12851
  //#endregion
12852
+ //#region src/render/text-east-asian-breaks.d.ts
12853
+ /** Which of the two behaviours a paragraph asks for. */
12854
+ interface EastAsianBreakOptions {
12855
+ /** `a:pPr/@hangingPunct="1"`. */
12856
+ hangingPunctuation: boolean;
12857
+ /** `a:pPr/@eaLnBrk="0"`: break between any two East Asian characters. */
12858
+ breakAnywhere: boolean;
12859
+ }
12860
+ //#endregion
12662
12861
  //#region src/render/text-run-meta.d.ts
12663
12862
  /** A run's resolved hyperlink target. */
12664
12863
  interface RunHyperlink {
@@ -12832,6 +13031,8 @@ interface ParagraphRun {
12832
13031
  * `paragraph-run-build.ts`).
12833
13032
  */
12834
13033
  underlineWordPieces?: ScriptFontPiece[];
13034
+ /** The advance-carrying space after a hanging `、`/`。` (`text-east-asian-breaks`). */
13035
+ hangingSpace?: true;
12835
13036
  /**
12836
13037
  * `a:reflection` mirrored-sibling wrapper style for this run (the text-run
12837
13038
  * counterpart of a shape/picture's `ComputedEffectStyle.reflection`), or
@@ -12915,6 +13116,12 @@ interface RenderParagraph {
12915
13116
  * break rules, rendered differently in the other four bindings.
12916
13117
  */
12917
13118
  paragraphStyle?: RunStyle;
13119
+ /**
13120
+ * `@hangingPunct` / `@eaLnBrk="0"` as resolved for this paragraph. The runs
13121
+ * above already carry their pieces; React, which rebuilds each segment's
13122
+ * pieces inside one span, re-applies `splitEastAsianBreaks` from this.
13123
+ */
13124
+ eastAsianBreaks?: EastAsianBreakOptions;
12918
13125
  }
12919
13126
  //#endregion
12920
13127
  //#region src/render/inline-list-types.d.ts
@@ -13860,6 +14067,13 @@ type ToolbarButtonId = 'share' | 'broadcast' | 'export' | 'undo' | 'redo' | 'rec
13860
14067
  /** A top-level ribbon tab. `record` intentionally shares its id with the quick-access Record button above: both surface the same recording feature, so hiding one hides the other. */
13861
14068
  type ToolbarTabId = 'file' | 'home' | 'insert' | 'draw' | 'design' | 'transitions' | 'animations' | 'slideShow' | 'record' | 'review' | 'view' | 'help';
13862
14069
  type ToolbarActionId = ToolbarButtonId | ToolbarTabId;
14070
+ /**
14071
+ * PowerPoint's contextual tabs: they join the tab row only while the
14072
+ * selection is of their kind (see `contextualTabsForElement` in
14073
+ * `ribbon-galleries/`). Kept apart from `ToolbarTabId` because they are not
14074
+ * part of the fixed tab order every binding renders.
14075
+ */
14076
+ type RibbonContextualTabId = 'shapeFormat' | 'pictureFormat' | 'tableDesign' | 'chartDesign' | 'smartArtDesign';
13863
14077
  //#endregion
13864
14078
  //#region src/render/options/viewer-options.d.ts
13865
14079
  /**
@@ -14077,6 +14291,511 @@ type FreeformToolKind = 'freeformShape' | 'curve';
14077
14291
  */
14078
14292
  type ViewerOptionsTabId = 'general' | 'proofing' | 'save' | 'language' | 'accessibility' | 'advanced' | 'ribbon' | 'quickAccess' | 'addIns' | 'trust';
14079
14293
  //#endregion
14294
+ //#region src/render/customization/ribbon-control-catalog.d.ts
14295
+ declare const RIBBON_CONTROL_CATALOG: {
14296
+ readonly home: {
14297
+ readonly clipboard: {
14298
+ readonly label: 'Clipboard';
14299
+ readonly controls: {
14300
+ readonly paste: 'Paste';
14301
+ readonly cut: 'Cut';
14302
+ readonly copy: 'Copy';
14303
+ readonly formatPainter: 'Format Painter';
14304
+ };
14305
+ };
14306
+ readonly slides: {
14307
+ readonly label: 'Slides';
14308
+ readonly controls: {
14309
+ readonly newSlide: 'New Slide';
14310
+ readonly layout: 'Layout';
14311
+ readonly reset: 'Reset';
14312
+ readonly section: 'Section';
14313
+ readonly slideTemplates: 'Slide templates';
14314
+ };
14315
+ };
14316
+ readonly font: {
14317
+ readonly label: 'Font';
14318
+ readonly controls: {
14319
+ readonly fontFamily: 'Font';
14320
+ readonly fontSize: 'Font Size';
14321
+ readonly increaseFontSize: 'Increase Font Size';
14322
+ readonly decreaseFontSize: 'Decrease Font Size';
14323
+ readonly clearFormatting: 'Clear All Formatting';
14324
+ readonly bold: 'Bold';
14325
+ readonly italic: 'Italic';
14326
+ readonly underline: 'Underline';
14327
+ readonly strikethrough: 'Strikethrough';
14328
+ readonly shadow: 'Text Shadow';
14329
+ readonly characterSpacing: 'Character Spacing';
14330
+ readonly changeCase: 'Change Case';
14331
+ readonly fontColor: 'Font Color';
14332
+ readonly highlightColor: 'Text Highlight Color';
14333
+ readonly superscript: 'Superscript';
14334
+ readonly subscript: 'Subscript';
14335
+ };
14336
+ };
14337
+ readonly paragraph: {
14338
+ readonly label: 'Paragraph';
14339
+ readonly controls: {
14340
+ readonly bullets: 'Bullets (toggle and gallery)';
14341
+ readonly numbering: 'Numbering (toggle and gallery)';
14342
+ readonly decreaseIndent: 'Decrease List Level';
14343
+ readonly increaseIndent: 'Increase List Level';
14344
+ readonly lineSpacing: 'Line Spacing';
14345
+ readonly alignLeft: 'Align Left';
14346
+ readonly alignCenter: 'Center';
14347
+ readonly alignRight: 'Align Right';
14348
+ readonly justify: 'Justify';
14349
+ readonly columns: 'Columns';
14350
+ readonly textDirection: 'Text Direction';
14351
+ readonly alignText: 'Align Text';
14352
+ };
14353
+ };
14354
+ readonly drawing: {
14355
+ readonly label: 'Drawing';
14356
+ readonly controls: {
14357
+ readonly shapes: 'Shapes';
14358
+ readonly arrange: 'Arrange';
14359
+ readonly quickStyles: 'Quick Styles (Shape Styles gallery)';
14360
+ readonly shapeFill: 'Shape Fill';
14361
+ readonly shapeOutline: 'Shape Outline';
14362
+ readonly shapeEffects: 'Shape Effects gallery';
14363
+ };
14364
+ };
14365
+ readonly arrange: {
14366
+ readonly label: 'Arrange';
14367
+ readonly controls: {
14368
+ readonly bringForward: 'Bring Forward';
14369
+ readonly sendBackward: 'Send Backward';
14370
+ readonly bringToFront: 'Bring to Front';
14371
+ readonly sendToBack: 'Send to Back';
14372
+ readonly flipHorizontal: 'Flip Horizontal';
14373
+ readonly flipVertical: 'Flip Vertical';
14374
+ readonly duplicate: 'Duplicate';
14375
+ readonly delete: 'Delete';
14376
+ readonly group: 'Group';
14377
+ readonly ungroup: 'Ungroup';
14378
+ readonly align: 'Align';
14379
+ readonly mergeShapes: 'Merge Shapes';
14380
+ readonly crop: 'Crop';
14381
+ readonly outlineWidth: 'Outline width';
14382
+ };
14383
+ };
14384
+ readonly editing: {
14385
+ readonly label: 'Editing';
14386
+ readonly controls: {
14387
+ readonly find: 'Find';
14388
+ readonly replace: 'Replace';
14389
+ readonly select: 'Select';
14390
+ };
14391
+ };
14392
+ };
14393
+ readonly insert: {
14394
+ readonly slides: {
14395
+ readonly label: 'Slides';
14396
+ readonly controls: {
14397
+ readonly newSlide: 'New Slide';
14398
+ };
14399
+ };
14400
+ readonly tables: {
14401
+ readonly label: 'Tables';
14402
+ readonly controls: {
14403
+ readonly table: 'Table';
14404
+ };
14405
+ };
14406
+ readonly images: {
14407
+ readonly label: 'Images';
14408
+ readonly controls: {
14409
+ readonly pictures: 'Pictures';
14410
+ };
14411
+ };
14412
+ readonly illustrations: {
14413
+ readonly label: 'Illustrations';
14414
+ readonly controls: {
14415
+ readonly shapes: 'Shapes';
14416
+ readonly smartArt: 'SmartArt';
14417
+ readonly chart: 'Chart';
14418
+ };
14419
+ };
14420
+ readonly links: {
14421
+ readonly label: 'Links';
14422
+ readonly controls: {
14423
+ readonly link: 'Link';
14424
+ readonly action: 'Action button';
14425
+ };
14426
+ };
14427
+ readonly comments: {
14428
+ readonly label: 'Comments';
14429
+ readonly controls: {
14430
+ readonly comment: 'Comment';
14431
+ };
14432
+ };
14433
+ readonly text: {
14434
+ readonly label: 'Text';
14435
+ readonly controls: {
14436
+ readonly textBox: 'Text Box';
14437
+ readonly field: 'Header, date, slide number field';
14438
+ };
14439
+ };
14440
+ readonly symbols: {
14441
+ readonly label: 'Symbols';
14442
+ readonly controls: {
14443
+ readonly equation: 'Equation';
14444
+ readonly symbol: 'Symbol';
14445
+ };
14446
+ };
14447
+ readonly media: {
14448
+ readonly label: 'Media';
14449
+ readonly controls: {
14450
+ readonly media: 'Video / Audio';
14451
+ };
14452
+ };
14453
+ };
14454
+ readonly draw: {
14455
+ readonly tools: {
14456
+ readonly label: 'Drawing Tools';
14457
+ readonly controls: {
14458
+ readonly select: 'Select';
14459
+ readonly pen: 'Pen';
14460
+ readonly highlighter: 'Highlighter';
14461
+ readonly eraser: 'Eraser';
14462
+ readonly penColor: 'Pen colour';
14463
+ readonly penWidth: 'Pen width';
14464
+ };
14465
+ };
14466
+ readonly convert: {
14467
+ readonly label: 'Convert';
14468
+ readonly controls: {
14469
+ readonly inkToShape: 'Ink to Shape';
14470
+ };
14471
+ };
14472
+ };
14473
+ readonly design: {
14474
+ readonly themes: {
14475
+ readonly label: 'Themes';
14476
+ readonly controls: {
14477
+ readonly browseThemes: 'Themes gallery';
14478
+ readonly editTheme: 'Edit theme';
14479
+ };
14480
+ };
14481
+ readonly variants: {
14482
+ readonly label: 'Variants';
14483
+ readonly controls: {
14484
+ readonly colors: 'Variants: Colors gallery';
14485
+ readonly fonts: 'Variants: Fonts gallery';
14486
+ };
14487
+ };
14488
+ readonly customize: {
14489
+ readonly label: 'Customize';
14490
+ readonly controls: {
14491
+ readonly slideSize: 'Slide Size';
14492
+ readonly formatBackground: 'Format Background';
14493
+ };
14494
+ };
14495
+ };
14496
+ readonly transitions: {
14497
+ readonly preview: {
14498
+ readonly label: 'Preview';
14499
+ readonly controls: {
14500
+ readonly preview: 'Preview';
14501
+ };
14502
+ };
14503
+ readonly transitionToThisSlide: {
14504
+ readonly label: 'Transition to This Slide';
14505
+ readonly controls: {
14506
+ readonly gallery: 'Transition gallery';
14507
+ readonly effectOptions: 'Effect Options';
14508
+ };
14509
+ };
14510
+ readonly timing: {
14511
+ readonly label: 'Timing';
14512
+ readonly controls: {
14513
+ readonly sound: 'Sound';
14514
+ readonly duration: 'Duration';
14515
+ readonly applyToAll: 'Apply To All';
14516
+ readonly advanceOnClick: 'On Mouse Click';
14517
+ readonly advanceAfter: 'After';
14518
+ };
14519
+ };
14520
+ };
14521
+ readonly animations: {
14522
+ readonly preview: {
14523
+ readonly label: 'Preview';
14524
+ readonly controls: {
14525
+ readonly preview: 'Preview';
14526
+ };
14527
+ };
14528
+ readonly animation: {
14529
+ readonly label: 'Animation';
14530
+ readonly controls: {
14531
+ readonly gallery: 'Animation gallery';
14532
+ readonly effectOptions: 'Effect Options';
14533
+ };
14534
+ };
14535
+ readonly motionPath: {
14536
+ readonly label: 'Motion Paths';
14537
+ readonly controls: {
14538
+ readonly gallery: 'Motion path gallery';
14539
+ };
14540
+ };
14541
+ readonly advancedAnimation: {
14542
+ readonly label: 'Advanced Animation';
14543
+ readonly controls: {
14544
+ readonly addAnimation: 'Add Animation';
14545
+ readonly animationPane: 'Animation Pane';
14546
+ readonly trigger: 'Trigger';
14547
+ readonly animationPainter: 'Animation Painter';
14548
+ readonly remove: 'Remove animation';
14549
+ };
14550
+ };
14551
+ readonly timing: {
14552
+ readonly label: 'Timing';
14553
+ readonly controls: {
14554
+ readonly start: 'Start';
14555
+ readonly duration: 'Duration';
14556
+ readonly delay: 'Delay';
14557
+ readonly reorder: 'Reorder';
14558
+ };
14559
+ };
14560
+ };
14561
+ readonly slideShow: {
14562
+ readonly startSlideShow: {
14563
+ readonly label: 'Start Slide Show';
14564
+ readonly controls: {
14565
+ readonly fromBeginning: 'From Beginning';
14566
+ readonly fromCurrent: 'From Current Slide';
14567
+ readonly customShow: 'Custom Slide Show';
14568
+ };
14569
+ };
14570
+ readonly present: {
14571
+ readonly label: 'Present';
14572
+ readonly controls: {
14573
+ readonly presenterView: 'Presenter View';
14574
+ readonly broadcast: 'Present Online';
14575
+ };
14576
+ };
14577
+ readonly setUp: {
14578
+ readonly label: 'Set Up';
14579
+ readonly controls: {
14580
+ readonly setUpSlideShow: 'Set Up Slide Show';
14581
+ readonly hideSlide: 'Hide Slide';
14582
+ readonly rehearseTimings: 'Rehearse Timings';
14583
+ readonly record: 'Record';
14584
+ readonly rehearseWithCoach: 'Rehearse with Coach';
14585
+ };
14586
+ };
14587
+ readonly captions: {
14588
+ readonly label: 'Captions & Subtitles';
14589
+ readonly controls: {
14590
+ readonly subtitles: 'Always Use Subtitles';
14591
+ readonly subtitleSettings: 'Subtitle Settings';
14592
+ };
14593
+ };
14594
+ };
14595
+ readonly record: {
14596
+ readonly camera: {
14597
+ readonly label: 'Camera';
14598
+ readonly controls: {
14599
+ readonly cameo: 'Cameo';
14600
+ };
14601
+ };
14602
+ readonly record: {
14603
+ readonly label: 'Record';
14604
+ readonly controls: {
14605
+ readonly fromBeginning: 'From Beginning';
14606
+ readonly fromCurrent: 'From Current Slide';
14607
+ };
14608
+ };
14609
+ readonly manage: {
14610
+ readonly label: 'Manage';
14611
+ readonly controls: {
14612
+ readonly clear: 'Clear';
14613
+ readonly reset: 'Reset to Cameo';
14614
+ };
14615
+ };
14616
+ readonly help: {
14617
+ readonly label: 'Help';
14618
+ readonly controls: {
14619
+ readonly learnMore: 'Learn more';
14620
+ };
14621
+ };
14622
+ };
14623
+ readonly review: {
14624
+ readonly proofing: {
14625
+ readonly label: 'Proofing';
14626
+ readonly controls: {
14627
+ readonly spelling: 'Spelling';
14628
+ readonly thesaurus: 'Thesaurus';
14629
+ };
14630
+ };
14631
+ readonly accessibility: {
14632
+ readonly label: 'Accessibility';
14633
+ readonly controls: {
14634
+ readonly check: 'Check Accessibility';
14635
+ };
14636
+ };
14637
+ readonly language: {
14638
+ readonly label: 'Language';
14639
+ readonly controls: {
14640
+ readonly translate: 'Translate';
14641
+ };
14642
+ };
14643
+ readonly comments: {
14644
+ readonly label: 'Comments';
14645
+ readonly controls: {
14646
+ readonly newComment: 'New Comment';
14647
+ readonly delete: 'Delete';
14648
+ readonly previous: 'Previous';
14649
+ readonly next: 'Next';
14650
+ readonly showComments: 'Show Comments';
14651
+ };
14652
+ };
14653
+ readonly compare: {
14654
+ readonly label: 'Compare';
14655
+ readonly controls: {
14656
+ readonly compare: 'Compare';
14657
+ readonly markAllRead: 'Mark all read';
14658
+ };
14659
+ };
14660
+ readonly protect: {
14661
+ readonly label: 'Protect';
14662
+ readonly controls: {
14663
+ readonly readOnly: 'Read-only';
14664
+ readonly restrictPermission: 'Restrict Permission';
14665
+ };
14666
+ };
14667
+ readonly ink: {
14668
+ readonly label: 'Ink';
14669
+ readonly controls: {
14670
+ readonly hideInk: 'Hide Ink';
14671
+ };
14672
+ };
14673
+ };
14674
+ readonly view: {
14675
+ readonly presentationViews: {
14676
+ readonly label: 'Presentation Views';
14677
+ readonly controls: {
14678
+ readonly normal: 'Normal';
14679
+ readonly outline: 'Outline View';
14680
+ readonly slideSorter: 'Slide Sorter';
14681
+ readonly notesPage: 'Notes Page';
14682
+ readonly readingView: 'Reading View';
14683
+ };
14684
+ };
14685
+ readonly masterViews: {
14686
+ readonly label: 'Master Views';
14687
+ readonly controls: {
14688
+ readonly slideMaster: 'Slide Master';
14689
+ readonly handoutMaster: 'Handout Master';
14690
+ readonly notesMaster: 'Notes Master';
14691
+ };
14692
+ };
14693
+ readonly show: {
14694
+ readonly label: 'Show';
14695
+ readonly controls: {
14696
+ readonly ruler: 'Ruler';
14697
+ readonly gridlines: 'Gridlines';
14698
+ readonly guides: 'Guides';
14699
+ readonly snapToGrid: 'Snap to Grid';
14700
+ readonly snapToShape: 'Snap to Shape';
14701
+ readonly addGuide: 'Add horizontal / vertical guide';
14702
+ readonly selectionPane: 'Selection Pane';
14703
+ readonly eyedropper: 'Eyedropper';
14704
+ readonly notes: 'Notes';
14705
+ };
14706
+ };
14707
+ readonly zoom: {
14708
+ readonly label: 'Zoom';
14709
+ readonly controls: {
14710
+ readonly zoom: 'Zoom';
14711
+ readonly fitToWindow: 'Fit to Window';
14712
+ };
14713
+ };
14714
+ readonly window: {
14715
+ readonly label: 'Window';
14716
+ readonly controls: {
14717
+ readonly templateEditing: 'Edit template elements';
14718
+ readonly macros: 'Macros';
14719
+ };
14720
+ };
14721
+ };
14722
+ readonly help: {
14723
+ readonly help: {
14724
+ readonly label: 'Help';
14725
+ readonly controls: {
14726
+ readonly options: 'Options';
14727
+ readonly keyboardShortcuts: 'Keyboard shortcuts';
14728
+ readonly accessibility: 'Accessibility checker';
14729
+ };
14730
+ };
14731
+ };
14732
+ readonly shapeFormat: {
14733
+ readonly shapeStyles: {
14734
+ readonly label: 'Shape Styles';
14735
+ readonly controls: {
14736
+ readonly gallery: 'Shape Styles gallery';
14737
+ readonly shapeEffects: 'Shape Effects gallery';
14738
+ };
14739
+ };
14740
+ readonly wordArtStyles: {
14741
+ readonly label: 'WordArt Styles';
14742
+ readonly controls: {
14743
+ readonly gallery: 'WordArt Styles gallery';
14744
+ };
14745
+ };
14746
+ };
14747
+ readonly pictureFormat: {
14748
+ readonly pictureStyles: {
14749
+ readonly label: 'Picture Styles';
14750
+ readonly controls: {
14751
+ readonly gallery: 'Picture Styles gallery';
14752
+ readonly pictureEffects: 'Picture Effects gallery';
14753
+ };
14754
+ };
14755
+ };
14756
+ readonly tableDesign: {
14757
+ readonly tableStyles: {
14758
+ readonly label: 'Table Styles';
14759
+ readonly controls: {
14760
+ readonly gallery: 'Table Styles gallery';
14761
+ };
14762
+ };
14763
+ };
14764
+ readonly chartDesign: {
14765
+ readonly chartLayouts: {
14766
+ readonly label: 'Chart Layouts';
14767
+ readonly controls: {
14768
+ readonly quickLayout: 'Quick Layout gallery';
14769
+ };
14770
+ };
14771
+ readonly chartStyles: {
14772
+ readonly label: 'Chart Styles';
14773
+ readonly controls: {
14774
+ readonly changeColors: 'Change Colors gallery';
14775
+ readonly gallery: 'Chart Styles gallery';
14776
+ };
14777
+ };
14778
+ };
14779
+ readonly smartArtDesign: {
14780
+ readonly smartArtStyles: {
14781
+ readonly label: 'SmartArt Styles';
14782
+ readonly controls: {
14783
+ readonly changeColors: 'Change Colors gallery';
14784
+ readonly gallery: 'SmartArt Styles gallery';
14785
+ };
14786
+ };
14787
+ };
14788
+ };
14789
+ //#endregion
14790
+ //#region src/render/customization/ribbon-control-ids.d.ts
14791
+ type Catalog = typeof RIBBON_CONTROL_CATALOG;
14792
+ /** `<tab>.<group>`, for example `home.font`. */
14793
+ type RibbonGroupId = { [T in keyof Catalog]: { [G in keyof Catalog[T]]: `${T & string}.${G & string}`; }[keyof Catalog[T]]; }[keyof Catalog];
14794
+ /** `<tab>.<group>.<control>`, for example `home.font.bold`. */
14795
+ type RibbonControlId = { [T in keyof Catalog]: { [G in keyof Catalog[T]]: Catalog[T][G] extends {
14796
+ controls: infer C;
14797
+ } ? `${T & string}.${G & string}.${keyof C & string}` : never; }[keyof Catalog[T]]; }[keyof Catalog];
14798
+ //#endregion
14080
14799
  //#region src/render/customization/customization-types.d.ts
14081
14800
  /** Keys of an options group whose value is a primitive (not an array). */
14082
14801
  type PrimitiveKeys<T> = { [K in keyof T]: T[K] extends ViewerOptionPrimitive ? K : never; }[keyof T] & string;
@@ -14101,10 +14820,20 @@ type OptionsSectionId = `${ViewerOptionsTabId}.${string}`;
14101
14820
  type OptionsSettingValues = Partial<Record<OptionsSettingId, ViewerOptionPrimitive>>;
14102
14821
  /** Ribbon and toolbar customisation. */
14103
14822
  interface RibbonCustomization {
14104
- /** Ribbon tabs to remove (the File tab included, unlike Customize Ribbon). */
14105
- hiddenTabs?: readonly ToolbarTabId[];
14106
- /** Top-level toolbar buttons / control clusters to remove. */
14107
- hiddenButtons?: readonly ToolbarButtonId[];
14823
+ /**
14824
+ * Ribbon tabs to remove (the File tab included, unlike Customize Ribbon),
14825
+ * and contextual tabs (`shapeFormat`, `pictureFormat`, ...) that should
14826
+ * never appear.
14827
+ */
14828
+ hiddenTabs?: readonly (ToolbarTabId | RibbonContextualTabId)[];
14829
+ /** Groups inside a tab to remove, as `<tab>.<group>` (`home.font`). */
14830
+ hiddenGroups?: readonly RibbonGroupId[];
14831
+ /**
14832
+ * Controls to remove: a top-level toolbar button / control cluster
14833
+ * (`share`, `zoom`, ...) or any ribbon control as
14834
+ * `<tab>.<group>.<control>` (`home.font.bold`).
14835
+ */
14836
+ hiddenButtons?: readonly (ToolbarButtonId | RibbonControlId)[];
14108
14837
  }
14109
14838
  /** File > Options (the Settings dialog) customisation. */
14110
14839
  interface OptionsCustomization {
@@ -14239,6 +14968,12 @@ interface ResolvedKeyboardCustomization {
14239
14968
  /** The normalised, set-based view of a customisation. Treat as immutable. */
14240
14969
  interface ResolvedCustomization {
14241
14970
  hiddenActions: ReadonlySet<ToolbarActionId>;
14971
+ /** Contextual tabs (`shapeFormat`, ...) the host never wants shown. */
14972
+ hiddenContextualTabs: ReadonlySet<RibbonContextualTabId>;
14973
+ /** Catalogued ribbon groups to hide (`ribbon.hiddenGroups`). */
14974
+ hiddenRibbonGroups: ReadonlySet<RibbonGroupId>;
14975
+ /** Catalogued ribbon controls to hide (the `<tab>.<group>.<control>` part of `ribbon.hiddenButtons`). */
14976
+ hiddenRibbonControls: ReadonlySet<RibbonControlId>;
14242
14977
  hiddenOptionsPages: ReadonlySet<OptionsPageId>;
14243
14978
  hiddenOptionsSections: ReadonlySet<OptionsSectionId>;
14244
14979
  hiddenSettings: ReadonlySet<OptionsSettingId>;
@@ -14269,10 +15004,18 @@ interface ViewerCustomizationApi {
14269
15004
  updateCustomization(patch: ViewerCustomization): void;
14270
15005
  /** Drop every customisation, back to the stock UI. */
14271
15006
  resetCustomization(): void;
14272
- hideRibbonTab(tab: ToolbarTabId): void;
14273
- showRibbonTab(tab: ToolbarTabId): void;
14274
- hideToolbarButton(button: ToolbarButtonId): void;
14275
- showToolbarButton(button: ToolbarButtonId): void;
15007
+ /** Hide a fixed tab, or stop a contextual tab (`shapeFormat`, ...) from appearing. */
15008
+ hideRibbonTab(tab: ToolbarTabId | RibbonContextualTabId): void;
15009
+ showRibbonTab(tab: ToolbarTabId | RibbonContextualTabId): void;
15010
+ /** Hide a group inside a tab (`home.font`). */
15011
+ hideRibbonGroup(group: RibbonGroupId): void;
15012
+ showRibbonGroup(group: RibbonGroupId): void;
15013
+ /** Hide a top-level toolbar button or any ribbon control (`home.font.bold`). */
15014
+ hideToolbarButton(button: ToolbarButtonId | RibbonControlId): void;
15015
+ showToolbarButton(button: ToolbarButtonId | RibbonControlId): void;
15016
+ /** Alias of `hideToolbarButton` for a ribbon control id. */
15017
+ hideRibbonControl(control: RibbonControlId): void;
15018
+ showRibbonControl(control: RibbonControlId): void;
14276
15019
  hideOptionsPage(page: OptionsPageId): void;
14277
15020
  showOptionsPage(page: OptionsPageId): void;
14278
15021
  hideOptionsSection(section: OptionsSectionId): void;
@@ -15138,8 +15881,8 @@ interface PowerPointViewerProps extends ViewportFitOptions {
15138
15881
  smartArt3D?: boolean;
15139
15882
  /**
15140
15883
  * Opt in to the interactive Three.js surface-chart renderer. When `true`,
15141
- * `surface`/`surface3D` charts render as a camera-orbitable WebGL mesh
15142
- * (drag to rotate, scroll to zoom) instead of the static SVG isometric
15884
+ * `surface`/`surface3D` charts render as a WebGL mesh
15885
+ * instead of the static SVG isometric
15143
15886
  * projection. Chart marks are not selectable/draggable in this mode.
15144
15887
  * Requires the optional `three` peer dependency; when it is not installed
15145
15888
  * (or the chart has no plottable grid), the viewer transparently falls back
@@ -15148,8 +15891,7 @@ interface PowerPointViewerProps extends ViewportFitOptions {
15148
15891
  surfaceChart3D?: boolean;
15149
15892
  /**
15150
15893
  * Opt in to the interactive Three.js bar3D-chart renderer. When `true`,
15151
- * `bar3D` charts render as camera-orbitable real box meshes (drag to
15152
- * rotate, scroll to zoom) instead of the flat SVG oblique-projection
15894
+ * `bar3D` charts render as real box meshes instead of the flat SVG oblique-projection
15153
15895
  * illusion. Chart marks are not selectable/draggable in this mode.
15154
15896
  * Requires the optional `three` peer dependency; when it is not installed
15155
15897
  * (or the chart has no plottable grid, or it is a horizontal 3-D Bar), the
@@ -15159,8 +15901,8 @@ interface PowerPointViewerProps extends ViewportFitOptions {
15159
15901
  barChart3D?: boolean;
15160
15902
  /**
15161
15903
  * Opt in to the interactive Three.js line3D-chart renderer. When `true`,
15162
- * `line3D` charts render as a camera-orbitable real tube-path mesh per
15163
- * series, one per depth ("series") plane (drag to rotate, scroll to zoom),
15904
+ * `line3D` charts render as a real tube-path mesh per
15905
+ * series, one per depth ("series") plane,
15164
15906
  * instead of the flat SVG oblique-projection illusion. Chart marks are not
15165
15907
  * selectable/draggable in this mode. Requires the optional `three` peer
15166
15908
  * dependency; when it is not installed (or the chart has no plottable
@@ -15170,9 +15912,8 @@ interface PowerPointViewerProps extends ViewportFitOptions {
15170
15912
  lineChart3D?: boolean;
15171
15913
  /**
15172
15914
  * Opt in to the interactive Three.js area3D-chart renderer. When `true`,
15173
- * `area3D` charts render as a camera-orbitable real tube path + filled
15174
- * ribbon mesh per series, one per depth ("series") plane (drag to rotate,
15175
- * scroll to zoom), instead of the flat SVG oblique-projection illusion.
15915
+ * `area3D` charts render as a real tube path + filled
15916
+ * ribbon mesh per series, one per depth ("series") plane, instead of the flat SVG oblique-projection illusion.
15176
15917
  * Chart marks are not selectable/draggable in this mode. Requires the
15177
15918
  * optional `three` peer dependency; when it is not installed (or the chart
15178
15919
  * has no plottable grid), the viewer transparently falls back to the flat
@@ -15181,8 +15922,7 @@ interface PowerPointViewerProps extends ViewportFitOptions {
15181
15922
  areaChart3D?: boolean;
15182
15923
  /**
15183
15924
  * Opt in to the interactive Three.js pie3D-chart renderer. When `true`,
15184
- * `pie3D` charts render as camera-orbitable real wedge meshes (drag to
15185
- * rotate, scroll to zoom) instead of the flat SVG oblique-projection
15925
+ * `pie3D` charts render as real wedge meshes instead of the flat SVG oblique-projection
15186
15926
  * illusion. Chart marks are not selectable/draggable in this mode.
15187
15927
  * Requires the optional `three` peer dependency; when it is not installed
15188
15928
  * (or the chart has no plottable series), the viewer transparently falls
@@ -17117,11 +17857,11 @@ interface RibbonProps {
17117
17857
  onopenfile?: () => void;
17118
17858
  onopenrecent?: (key: string) => void;
17119
17859
  /**
17120
- * Design tab: the current effective viewer-chrome theme (for highlighting
17121
- * the active swatch) and the setter its gallery calls to switch presets.
17860
+ * Publish a new PRESENTATION theme (Design > Browse Themes / Edit Theme and
17861
+ * the Variants Colors / Fonts galleries), the same callback the
17862
+ * inspector's theme editor uses.
17122
17863
  */
17123
- theme: ViewerTheme | undefined;
17124
- onsettheme: (theme: ViewerTheme | undefined) => void;
17864
+ onthemechange?: (theme: PptxTheme) => void;
17125
17865
  /** File tab > Account: disabled-by-default sign-in hook point. */
17126
17866
  accountAuth?: AccountAuthConfig;
17127
17867
  }