pptx-angular-viewer 1.30.1 → 1.31.1

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.
@@ -1914,10 +1914,16 @@ interface EditorHistoryOptions {
1914
1914
  * already-cloned snapshots.
1915
1915
  */
1916
1916
  declare class EditorHistory<T> {
1917
- private readonly _maxDepth;
1917
+ private _maxDepth;
1918
1918
  private readonly _past;
1919
1919
  private readonly _future;
1920
1920
  constructor(options?: EditorHistoryOptions);
1921
+ /**
1922
+ * Change the maximum undo depth at runtime (File > Options > Advanced >
1923
+ * "Maximum number of undos"). Trims the past stack immediately if the new
1924
+ * limit is smaller.
1925
+ */
1926
+ setMaxDepth(maxDepth: number): void;
1921
1927
  /** True when at least one undo step is available. */
1922
1928
  get canUndo(): boolean;
1923
1929
  /** True when at least one redo step is available. */
@@ -4018,10 +4024,6 @@ interface ShortcutReferenceItem {
4018
4024
  shortcut: string;
4019
4025
  }
4020
4026
  declare const SHORTCUT_REFERENCE_ITEMS: readonly ShortcutReferenceItem[];
4021
- interface ViewerPreferenceToggle {
4022
- key: keyof ViewerPreferences;
4023
- labelKey: string;
4024
- }
4025
4027
 
4026
4028
  interface SpeechAlternative {
4027
4029
  readonly transcript: string;
@@ -4127,95 +4129,140 @@ type ToolbarTabId = 'file' | 'home' | 'insert' | 'draw' | 'design' | 'transition
4127
4129
  type ToolbarActionId = ToolbarButtonId | ToolbarTabId;
4128
4130
 
4129
4131
  /**
4130
- * Minimal GIF89a encoder (pure JS, no external dependency) plus pure
4131
- * frame-planning helpers — shared by the React, Vue, and Angular bindings.
4132
- *
4133
- * The encoder uses median-cut colour quantisation (256 colours per frame) and
4134
- * LZW compression. It carries no DOM/browser dependency — it operates on
4135
- * pre-extracted `ImageData` objects so each binding owns the rasterisation
4136
- * (grabbing a canvas, calling `getImageData`) and the `Blob` wrapping, while
4137
- * the byte encoding lives here once.
4138
- *
4139
- * No npm GIF library is depended on; this self-contained source replaces the
4140
- * three previously-duplicated copies (React `export-gif-encoder.ts`, Vue
4141
- * `gif-encoder.ts`, Angular `gif-export-helpers.ts`).
4142
- */
4143
- /** A single GIF frame descriptor produced by the planning helpers. */
4144
- interface GifFramePlan {
4145
- /** 0-based slide index this frame corresponds to. */
4146
- slideIndex: number;
4147
- /** Frame delay in **centiseconds** (1 cs = 10 ms), as required by GIF89a. */
4148
- delayCs: number;
4149
- }
4150
- /** Options controlling GIF frame planning. */
4151
- interface GifPlanOptions {
4152
- /** Total number of slides in the presentation. */
4153
- totalSlides: number;
4154
- /**
4155
- * Duration each slide is shown, in **milliseconds** (default: 2000).
4156
- * Per-slide overrides can be supplied via {@link slideTimingsMs}.
4157
- */
4158
- slideDurationMs?: number;
4159
- /**
4160
- * Per-slide duration overrides in milliseconds (index maps to slide index).
4161
- * When a slide's index is present here its value takes precedence over
4162
- * {@link slideDurationMs}.
4163
- */
4164
- slideTimingsMs?: number[];
4132
+ * Full PowerPoint "File > Options" parity model.
4133
+ *
4134
+ * Groups mirror the ten categories of PowerPoint's Options dialog. Values are
4135
+ * flat primitives per group so the dialog panes can be rendered generically
4136
+ * from `VIEWER_OPTIONS_SCHEMA` in every binding. The legacy six-toggle
4137
+ * `ViewerPreferences` surface stays supported via the mapping helpers below.
4138
+ */
4139
+ type ScreenTipStyle = 'descriptions' | 'plain' | 'off';
4140
+ type DisplayOptimization = 'appearance' | 'compatibility';
4141
+ type ImageResolutionPreset = 'highFidelity' | 'ppi330' | 'ppi220' | 'ppi150' | 'ppi96';
4142
+ type OpenDocumentsView = 'savedView' | 'normal' | 'outline' | 'slideSorter' | 'notes';
4143
+ type DefaultExportFormat = 'pptx' | 'pdf' | 'png';
4144
+ type QuickAccessPosition = 'above' | 'below';
4145
+ type FeedbackSoundScheme = 'modern' | 'classic';
4146
+ type OptionsPrintWhat = 'slides' | 'handouts' | 'notes' | 'outline';
4147
+ type OptionsPrintColorMode = 'color' | 'grayscale' | 'blackAndWhite';
4148
+ interface ViewerGeneralOptions {
4149
+ displayOptimization: DisplayOptimization;
4150
+ showMiniToolbar: boolean;
4151
+ enableLivePreview: boolean;
4152
+ collapseRibbonAutomatically: boolean;
4153
+ collapseSearchByDefault: boolean;
4154
+ screenTipStyle: ScreenTipStyle;
4155
+ userName: string;
4156
+ userInitials: string;
4157
+ showStartScreen: boolean;
4158
+ }
4159
+ interface ViewerProofingOptions {
4160
+ autoCorrectTwoInitialCapitals: boolean;
4161
+ autoCorrectCapitalizeFirstLetter: boolean;
4162
+ autoCorrectCapitalizeDayNames: boolean;
4163
+ autoCorrectSmartQuotes: boolean;
4164
+ autoCorrectHyphensToDash: boolean;
4165
+ autoCorrectFractions: boolean;
4166
+ autoCorrectOrdinals: boolean;
4167
+ ignoreUppercase: boolean;
4168
+ ignoreWordsWithNumbers: boolean;
4169
+ ignoreInternetAddresses: boolean;
4170
+ flagRepeatedWords: boolean;
4171
+ checkSpellingAsYouType: boolean;
4172
+ hideSpellingErrors: boolean;
4173
+ }
4174
+ interface ViewerSaveOptions {
4175
+ autoSave: boolean;
4176
+ autoRecoverIntervalMinutes: number;
4177
+ keepLastAutoRecoveredVersion: boolean;
4178
+ defaultExportFormat: DefaultExportFormat;
4179
+ embedFonts: boolean;
4180
+ embedAllFontCharacters: boolean;
4181
+ cacheRetentionDays: number;
4182
+ clearCacheOnClose: boolean;
4183
+ }
4184
+ interface ViewerAccessibilityOptions {
4185
+ showAccessibilityStatus: boolean;
4186
+ feedbackWithSound: boolean;
4187
+ soundScheme: FeedbackSoundScheme;
4188
+ showShortcutKeysInScreenTips: boolean;
4189
+ reducedMotion: boolean;
4165
4190
  }
4166
- /**
4167
- * Compute the ordered list of {@link GifFramePlan} objects for a presentation.
4168
- * All timing is derived here; nothing browser-specific is touched.
4169
- */
4170
- declare function planGifFrames(opts: GifPlanOptions): GifFramePlan[];
4171
- /**
4172
- * Convert a slide duration in milliseconds to a GIF89a frame delay in
4173
- * centiseconds (1 cs = 10 ms), clamped to a minimum of 1 cs.
4174
- */
4175
- declare function msToFrameDelayCs(ms: number): number;
4176
- /**
4177
- * Clamp canvas/image dimensions so neither side exceeds `maxSide` pixels while
4178
- * preserving the aspect ratio. When both dimensions are already within the
4179
- * limit the original values are returned unchanged.
4180
- */
4181
- declare function clampGifDimensions(width: number, height: number, maxSide?: number): {
4182
- width: number;
4183
- height: number;
4184
- };
4185
- /** A single animated-GIF frame: raw RGBA pixels plus its dimensions. */
4186
- interface GifFrame {
4187
- imageData: ImageData;
4188
- width: number;
4189
- height: number;
4190
- /**
4191
- * Optional per-frame delay in **centiseconds** (1 cs = 10 ms). When set it
4192
- * overrides the encoder-level delay for this frame only, which is how
4193
- * per-slide durations from {@link planGifFrames} flow into the encoder.
4194
- */
4195
- delayCs?: number;
4191
+ interface ViewerAdvancedOptions {
4192
+ autoSelectEntireWord: boolean;
4193
+ allowTextDragAndDrop: boolean;
4194
+ maximumUndoSteps: number;
4195
+ useSmartCutAndPaste: boolean;
4196
+ showPasteOptionsButton: boolean;
4197
+ imageDefaultResolution: ImageResolutionPreset;
4198
+ doNotCompressImages: boolean;
4199
+ chartPropertiesFollowDataPoint: boolean;
4200
+ recentPresentationsCount: number;
4201
+ showVerticalRuler: boolean;
4202
+ showGrid: boolean;
4203
+ snapToGrid: boolean;
4204
+ disableHardwareAcceleration: boolean;
4205
+ openDocumentsView: OpenDocumentsView;
4206
+ slideShowShowMenuOnRightClick: boolean;
4207
+ slideShowShowPopupToolbar: boolean;
4208
+ slideShowPromptKeepInkAnnotations: boolean;
4209
+ slideShowEndWithBlackSlide: boolean;
4210
+ printInBackground: boolean;
4211
+ printHighQuality: boolean;
4212
+ printUseMostRecentSettings: boolean;
4213
+ printWhat: OptionsPrintWhat;
4214
+ printColorMode: OptionsPrintColorMode;
4215
+ printHiddenSlides: boolean;
4216
+ printScaleToFit: boolean;
4217
+ printFrameSlides: boolean;
4218
+ }
4219
+ interface ViewerRibbonOptions {
4220
+ /** Ribbon tabs unticked in Customize Ribbon. The File tab can never be hidden. */
4221
+ hiddenTabIds: ToolbarTabId[];
4222
+ }
4223
+ interface ViewerQuickAccessOptions {
4224
+ visible: boolean;
4225
+ position: QuickAccessPosition;
4226
+ showCommandLabels: boolean;
4227
+ /** Ordered ids from `QUICK_ACCESS_COMMAND_CATALOG`. */
4228
+ commandIds: string[];
4229
+ }
4230
+ interface ViewerTrustOptions {
4231
+ openInProtectedView: boolean;
4232
+ allowExternalContent: boolean;
4233
+ confirmExternalHyperlinks: boolean;
4234
+ }
4235
+ interface ViewerOptions {
4236
+ general: ViewerGeneralOptions;
4237
+ proofing: ViewerProofingOptions;
4238
+ save: ViewerSaveOptions;
4239
+ accessibility: ViewerAccessibilityOptions;
4240
+ advanced: ViewerAdvancedOptions;
4241
+ ribbon: ViewerRibbonOptions;
4242
+ quickAccess: ViewerQuickAccessOptions;
4243
+ trust: ViewerTrustOptions;
4244
+ }
4245
+ type ViewerOptionsGroupId = keyof ViewerOptions;
4246
+ type ViewerOptionPrimitive = boolean | number | string;
4247
+
4248
+ /**
4249
+ * Quick Access Toolbar command catalog and list-editing helpers, backing the
4250
+ * Options > Quick Access Toolbar pane and the title-bar QAT strip.
4251
+ *
4252
+ * Ids map onto actions every binding already exposes; each binding resolves
4253
+ * an id to its own icon + handler when rendering the strip.
4254
+ */
4255
+ interface QuickAccessCommandDefinition {
4256
+ id: string;
4257
+ labelKey: string;
4258
+ /** Logical icon name bindings map to their icon set. */
4259
+ icon: string;
4196
4260
  }
4197
- /** Options for {@link encodeGif}. */
4198
- interface EncodeGifOptions {
4199
- /**
4200
- * Frame delay in **centiseconds** (1 cs = 10 ms). Applies to every frame
4201
- * that does not carry its own {@link GifFrame.delayCs} override.
4202
- * Default: 200 cs (2 s).
4203
- */
4204
- delayCs?: number;
4205
- /** Number of times the animation loops (0 = loop forever, default). */
4206
- loopCount?: number;
4261
+
4262
+ interface ViewerAddinStatus {
4263
+ /** Addin id -> whether the capability is active in this host. */
4264
+ [addinId: string]: boolean | undefined;
4207
4265
  }
4208
- /**
4209
- * Encode an ordered list of RGBA frames into an animated GIF89a byte sequence.
4210
- *
4211
- * Accepts either a bare `delayCs` number (React/Vue call style) or an
4212
- * {@link EncodeGifOptions} object (Angular call style) as the second argument.
4213
- *
4214
- * @param frames Ordered frame descriptors (all must share identical dimensions).
4215
- * @param delay Per-frame delay in centiseconds, or an options object.
4216
- * @returns Raw GIF89a bytes.
4217
- */
4218
- declare function encodeGif(frames: GifFrame[], delay?: number | EncodeGifOptions): Uint8Array;
4219
4266
 
4220
4267
  /**
4221
4268
  * Pure handout layout calculations, shared by every binding's print path.
@@ -4339,6 +4386,176 @@ interface PrintHtmlDocumentOptions {
4339
4386
  */
4340
4387
  declare function buildPrintHtmlDocument(options: PrintHtmlDocumentOptions): string;
4341
4388
 
4389
+ /**
4390
+ * Control/section/tab descriptor types for the File > Options schema, plus
4391
+ * the terse constructors the tab-definition modules build panes with.
4392
+ */
4393
+ type ViewerOptionsTabId = 'general' | 'proofing' | 'save' | 'language' | 'accessibility' | 'advanced' | 'ribbon' | 'quickAccess' | 'addIns' | 'trust';
4394
+ interface ViewerOptionsSelectChoice {
4395
+ value: string;
4396
+ labelKey: string;
4397
+ }
4398
+ interface ControlBase {
4399
+ group: ViewerOptionsGroupId;
4400
+ key: string;
4401
+ labelKey: string;
4402
+ /** Optional "(i)" tooltip body, mirroring PowerPoint's info bubbles. */
4403
+ infoKey?: string;
4404
+ /** Renders indented under the preceding control, PowerPoint-style. */
4405
+ indent?: boolean;
4406
+ }
4407
+ interface ViewerOptionsToggleControl extends ControlBase {
4408
+ kind: 'toggle';
4409
+ }
4410
+ interface ViewerOptionsSelectControl extends ControlBase {
4411
+ kind: 'select';
4412
+ choices: readonly ViewerOptionsSelectChoice[];
4413
+ }
4414
+ interface ViewerOptionsNumberControl extends ControlBase {
4415
+ kind: 'number';
4416
+ min: number;
4417
+ max: number;
4418
+ step?: number;
4419
+ unitKey?: string;
4420
+ }
4421
+ interface ViewerOptionsTextControl extends ControlBase {
4422
+ kind: 'text';
4423
+ maxLength?: number;
4424
+ }
4425
+ type ViewerOptionsControl = ViewerOptionsToggleControl | ViewerOptionsSelectControl | ViewerOptionsNumberControl | ViewerOptionsTextControl;
4426
+ interface ViewerOptionsSection {
4427
+ id: string;
4428
+ titleKey: string;
4429
+ /** Optional explanatory paragraph under the section title. */
4430
+ descriptionKey?: string;
4431
+ /** Marks a bespoke block a binding renders itself (e.g. the theme picker). */
4432
+ special?: 'themePicker' | 'clearCache' | 'shortcutReference';
4433
+ controls: readonly ViewerOptionsControl[];
4434
+ }
4435
+ interface ViewerOptionsTabDefinition {
4436
+ id: ViewerOptionsTabId;
4437
+ labelKey: string;
4438
+ /** Headline shown at the top of the pane. */
4439
+ descriptionKey: string;
4440
+ /** Pane needing a bespoke view instead of (or on top of) `sections`. */
4441
+ custom?: 'language' | 'ribbon' | 'quickAccess' | 'addIns';
4442
+ sections: readonly ViewerOptionsSection[];
4443
+ }
4444
+
4445
+ /**
4446
+ * Framework-neutral store behind the File > Options dialog.
4447
+ *
4448
+ * Holds a `ViewerOptions` snapshot, notifies subscribers on change, and
4449
+ * persists a sparse diff into the shared `pptx-viewer-prefs` localStorage
4450
+ * entry so choices survive reloads in every binding.
4451
+ */
4452
+ type ViewerOptionsListener = (options: ViewerOptions) => void;
4453
+ interface ViewerOptionsStore {
4454
+ getOptions(): ViewerOptions;
4455
+ /** Replace the whole snapshot (e.g. hydrating from a host prop). */
4456
+ setOptions(next: ViewerOptions): void;
4457
+ /** Set one primitive value; ignores unknown keys and mismatched types. */
4458
+ setValue(group: ViewerOptionsGroupId, key: string, value: ViewerOptionPrimitive): void;
4459
+ getValue(group: ViewerOptionsGroupId, key: string): ViewerOptionPrimitive | undefined;
4460
+ /** Toggle a ribbon tab's visibility. The File tab is always kept visible. */
4461
+ setRibbonTabHidden(tabId: ToolbarTabId, hidden: boolean): void;
4462
+ setQuickAccessCommands(commandIds: readonly string[]): void;
4463
+ /** Reset every option (or one tab-group) back to defaults. */
4464
+ reset(group?: ViewerOptionsGroupId): void;
4465
+ subscribe(listener: ViewerOptionsListener): () => void;
4466
+ }
4467
+
4468
+ /**
4469
+ * Minimal GIF89a encoder (pure JS, no external dependency) plus pure
4470
+ * frame-planning helpers — shared by the React, Vue, and Angular bindings.
4471
+ *
4472
+ * The encoder uses median-cut colour quantisation (256 colours per frame) and
4473
+ * LZW compression. It carries no DOM/browser dependency — it operates on
4474
+ * pre-extracted `ImageData` objects — so each binding owns the rasterisation
4475
+ * (grabbing a canvas, calling `getImageData`) and the `Blob` wrapping, while
4476
+ * the byte encoding lives here once.
4477
+ *
4478
+ * No npm GIF library is depended on; this self-contained source replaces the
4479
+ * three previously-duplicated copies (React `export-gif-encoder.ts`, Vue
4480
+ * `gif-encoder.ts`, Angular `gif-export-helpers.ts`).
4481
+ */
4482
+ /** A single GIF frame descriptor produced by the planning helpers. */
4483
+ interface GifFramePlan {
4484
+ /** 0-based slide index this frame corresponds to. */
4485
+ slideIndex: number;
4486
+ /** Frame delay in **centiseconds** (1 cs = 10 ms), as required by GIF89a. */
4487
+ delayCs: number;
4488
+ }
4489
+ /** Options controlling GIF frame planning. */
4490
+ interface GifPlanOptions {
4491
+ /** Total number of slides in the presentation. */
4492
+ totalSlides: number;
4493
+ /**
4494
+ * Duration each slide is shown, in **milliseconds** (default: 2000).
4495
+ * Per-slide overrides can be supplied via {@link slideTimingsMs}.
4496
+ */
4497
+ slideDurationMs?: number;
4498
+ /**
4499
+ * Per-slide duration overrides in milliseconds (index maps to slide index).
4500
+ * When a slide's index is present here its value takes precedence over
4501
+ * {@link slideDurationMs}.
4502
+ */
4503
+ slideTimingsMs?: number[];
4504
+ }
4505
+ /**
4506
+ * Compute the ordered list of {@link GifFramePlan} objects for a presentation.
4507
+ * All timing is derived here; nothing browser-specific is touched.
4508
+ */
4509
+ declare function planGifFrames(opts: GifPlanOptions): GifFramePlan[];
4510
+ /**
4511
+ * Convert a slide duration in milliseconds to a GIF89a frame delay in
4512
+ * centiseconds (1 cs = 10 ms), clamped to a minimum of 1 cs.
4513
+ */
4514
+ declare function msToFrameDelayCs(ms: number): number;
4515
+ /**
4516
+ * Clamp canvas/image dimensions so neither side exceeds `maxSide` pixels while
4517
+ * preserving the aspect ratio. When both dimensions are already within the
4518
+ * limit the original values are returned unchanged.
4519
+ */
4520
+ declare function clampGifDimensions(width: number, height: number, maxSide?: number): {
4521
+ width: number;
4522
+ height: number;
4523
+ };
4524
+ /** A single animated-GIF frame: raw RGBA pixels plus its dimensions. */
4525
+ interface GifFrame {
4526
+ imageData: ImageData;
4527
+ width: number;
4528
+ height: number;
4529
+ /**
4530
+ * Optional per-frame delay in **centiseconds** (1 cs = 10 ms). When set it
4531
+ * overrides the encoder-level delay for this frame only, which is how
4532
+ * per-slide durations from {@link planGifFrames} flow into the encoder.
4533
+ */
4534
+ delayCs?: number;
4535
+ }
4536
+ /** Options for {@link encodeGif}. */
4537
+ interface EncodeGifOptions {
4538
+ /**
4539
+ * Frame delay in **centiseconds** (1 cs = 10 ms). Applies to every frame
4540
+ * that does not carry its own {@link GifFrame.delayCs} override.
4541
+ * Default: 200 cs (2 s).
4542
+ */
4543
+ delayCs?: number;
4544
+ /** Number of times the animation loops (0 = loop forever, default). */
4545
+ loopCount?: number;
4546
+ }
4547
+ /**
4548
+ * Encode an ordered list of RGBA frames into an animated GIF89a byte sequence.
4549
+ *
4550
+ * Accepts either a bare `delayCs` number (React/Vue call style) or an
4551
+ * {@link EncodeGifOptions} object (Angular call style) as the second argument.
4552
+ *
4553
+ * @param frames Ordered frame descriptors (all must share identical dimensions).
4554
+ * @param delay Per-frame delay in centiseconds, or an options object.
4555
+ * @returns Raw GIF89a bytes.
4556
+ */
4557
+ declare function encodeGif(frames: GifFrame[], delay?: number | EncodeGifOptions): Uint8Array;
4558
+
4342
4559
  /**
4343
4560
  * Pure video (WebM) export planning helpers shared by every binding's video
4344
4561
  * export. Frame-segment timing, fps -> frame-interval maths, and MediaRecorder
@@ -6334,6 +6551,56 @@ declare class ViewerMobileSheetService {
6334
6551
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerMobileSheetService>;
6335
6552
  }
6336
6553
 
6554
+ declare class ViewerOptionsService {
6555
+ /**
6556
+ * Optional: `inject()` needs an active injection context, which plain
6557
+ * `new ViewerOptionsService()` (used by the colocated unit tests) does not
6558
+ * provide. Outside DI the subscription simply lives as long as the instance.
6559
+ */
6560
+ private readonly destroyRef;
6561
+ private readonly translate;
6562
+ /** Imperative store: hydrates from and persists to `pptx-viewer-prefs`. */
6563
+ readonly store: ViewerOptionsStore;
6564
+ private readonly _options;
6565
+ /** Reactive File > Options snapshot; a new object per change. */
6566
+ readonly options: _angular_core.Signal<ViewerOptions>;
6567
+ constructor();
6568
+ setValue(group: ViewerOptionsGroupId, key: string, value: ViewerOptionPrimitive): void;
6569
+ setRibbonTabHidden(tabId: ToolbarTabId, hidden: boolean): void;
6570
+ setQuickAccessCommands(commandIds: readonly string[]): void;
6571
+ reset(group?: ViewerOptionsGroupId): void;
6572
+ /** Restore a snapshot wholesale (the dialog's Cancel semantics). */
6573
+ restore(snapshot: ViewerOptions): void;
6574
+ /** Undo-stack depth for `new EditorHistory({ maxDepth })`. */
6575
+ historyDepth(): number;
6576
+ /** AutoRecover cadence in seconds for the autosave engine. */
6577
+ autosaveIntervalSeconds(): number;
6578
+ /** Print-dialog seed; `undefined` keeps the dialog's own recents. */
6579
+ printDefaults(): Partial<PrintSettings> | undefined;
6580
+ /** Option-driven CSS classes for the viewer root (`pptx-ng-*` prefixed). */
6581
+ rootClasses(): string[];
6582
+ /** Tooltip text under the current ScreenTip style (undefined = suppress). */
6583
+ screenTip(label: string, description?: string, shortcut?: string): string | undefined;
6584
+ /** Run the enabled AutoCorrect rules over a committed run of text. */
6585
+ autoCorrect(text: string): string;
6586
+ /** Play the Accessibility "feedback with sound" cue for a completed action. */
6587
+ playFeedback(): void;
6588
+ /** Whether Trust Center forces the deck to open read-only. */
6589
+ protectedView(): boolean;
6590
+ /**
6591
+ * Gate an external hyperlink activation. Returns `true` when navigation may
6592
+ * proceed (no confirmation required, or the user confirmed the prompt).
6593
+ */
6594
+ confirmExternalHyperlink(href: string): boolean;
6595
+ /**
6596
+ * Options > Save > "Delete cached files": purge every autosave recovery
6597
+ * snapshot from the shared IndexedDB store. Resolves with the purge count.
6598
+ */
6599
+ clearCache(): Promise<number>;
6600
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerOptionsService, never>;
6601
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerOptionsService>;
6602
+ }
6603
+
6337
6604
  /**
6338
6605
  * presentation-annotations-helpers.ts: Pure geometry helpers for presentation
6339
6606
  * ink annotations (pen, highlighter, eraser, laser).
@@ -6500,8 +6767,8 @@ declare class PowerPointViewerComponent {
6500
6767
  readonly content: _angular_core.InputSignal<ArrayBuffer | Uint8Array<ArrayBufferLike> | null>;
6501
6768
  /** Licensed fonts supplied by the host application. No fonts are bundled. */
6502
6769
  readonly fontsInput: _angular_core.InputSignal<ViewerFontSource[]>;
6503
- /** Whether editing actions are enabled. (Editor chrome not yet ported.) */
6504
- readonly canEdit: _angular_core.InputSignal<boolean>;
6770
+ /** Whether editing actions are enabled (host input; see {@link canEdit}). */
6771
+ readonly canEditInput: _angular_core.InputSignal<boolean>;
6505
6772
  /** Optional class applied to the root element. */
6506
6773
  readonly class: _angular_core.InputSignal<string>;
6507
6774
  /** Theme configuration for customising the viewer's appearance. Always wins over a File > Options > Appearance selection; see {@link defaultThemeKey}. */
@@ -6626,6 +6893,7 @@ declare class PowerPointViewerComponent {
6626
6893
  protected readonly presenterWindow: PresenterWindowService;
6627
6894
  private readonly destroyRef;
6628
6895
  protected readonly dialogs: ViewerDialogsService;
6896
+ protected readonly viewerOpts: ViewerOptionsService;
6629
6897
  private readonly compareSvc;
6630
6898
  protected readonly xport: ViewerExportService;
6631
6899
  protected readonly findReplace: ViewerFindReplaceService;
@@ -6650,6 +6918,12 @@ declare class PowerPointViewerComponent {
6650
6918
  private readonly encryptedNotice;
6651
6919
  /** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
6652
6920
  private readonly mainEl;
6921
+ /**
6922
+ * Effective edit permission: the host's `canEdit` input gated by Trust
6923
+ * Center > "Open presentations in Protected View", which forces the deck
6924
+ * read-only while enabled (File > Options wiring, mirrors PowerPoint).
6925
+ */
6926
+ protected readonly canEdit: _angular_core.Signal<boolean>;
6653
6927
  protected readonly activeSlideIndex: _angular_core.WritableSignal<number>;
6654
6928
  /** Slides to display: the editable deck when `canEdit`, else the loaded deck. */
6655
6929
  protected readonly displaySlides: _angular_core.Signal<readonly PptxSlide[]>;
@@ -6735,8 +7009,17 @@ declare class PowerPointViewerComponent {
6735
7009
  protected readonly spellCheck: _angular_core.WritableSignal<boolean>;
6736
7010
  /** User override that suppresses viewer animations and transitions. */
6737
7011
  protected readonly reducedMotion: _angular_core.WritableSignal<boolean>;
6738
- /** Snapshot consumed by the settings dialog. */
7012
+ /**
7013
+ * The six legacy preference toggles as a snapshot, kept in a guarded
7014
+ * two-way sync with the File > Options store (see the constructor).
7015
+ */
6739
7016
  protected readonly viewerSettings: _angular_core.Signal<ViewerPreferences>;
7017
+ /**
7018
+ * Root class list: the host `class` input, the reduced-motion override, and
7019
+ * the option-driven display classes (`resolveOptionRootClasses`, so e.g.
7020
+ * hardware-acceleration and compatibility-display choices are styleable).
7021
+ */
7022
+ protected readonly rootClasses: _angular_core.Signal<string[]>;
6740
7023
  /** Whether the Insert SmartArt gallery dialog is open. */
6741
7024
  protected readonly showSmartArtInsert: _angular_core.WritableSignal<boolean>;
6742
7025
  /** The single selected element on the active slide (for the inspector). */
@@ -6855,8 +7138,10 @@ declare class PowerPointViewerComponent {
6855
7138
  protected addGuide(axis: 'x' | 'y'): void;
6856
7139
  /** Swap the deck for a restored version-history snapshot. */
6857
7140
  protected onRestoreVersion(bytes: Uint8Array): void;
6858
- /** Apply Settings dialog changes to the live editor state. */
6859
- protected onSettingsChange(settings: ViewerSettings): void;
7141
+ /** Apply one legacy preference snapshot onto the scattered live signals. */
7142
+ private applyPreferenceSnapshot;
7143
+ /** Dispatch a Quick Access Toolbar command id to its existing handler. */
7144
+ protected onQuickAccessCommand(id: string): void;
6860
7145
  /**
6861
7146
  * Mobile "Format" slot: surface the inspector for the current selection.
6862
7147
  * On mobile the format pane starts closed (React parity: the canvas owns
@@ -6891,7 +7176,7 @@ declare class PowerPointViewerComponent {
6891
7176
  /** Resolve the live slide-stage element within `<main>`. */
6892
7177
  private stageElement;
6893
7178
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
6894
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "fontsInput": { "alias": "fonts"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultThemeKey": { "alias": "defaultThemeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "onThemeChange": { "alias": "onThemeChange"; "required": false; "isSignal": true; }; "defaultLocale": { "alias": "defaultLocale"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "onLocaleChange": { "alias": "onLocaleChange"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "collaboration": { "alias": "collaboration"; "required": false; "isSignal": true; }; "authorName": { "alias": "authorName"; "required": false; "isSignal": true; }; "shareDefaults": { "alias": "shareDefaults"; "required": false; "isSignal": true; }; "onOpenFile": { "alias": "onOpenFile"; "required": false; "isSignal": true; }; "smartArt3D": { "alias": "smartArt3D"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "modeChange": "modeChange"; "zoomChange": "zoomChange"; "selectionChange": "selectionChange"; "slideCountChange": "slideCountChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
7179
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "required": false; "isSignal": true; }; "fontsInput": { "alias": "fonts"; "required": false; "isSignal": true; }; "canEditInput": { "alias": "canEdit"; "required": false; "isSignal": true; }; "class": { "alias": "class"; "required": false; "isSignal": true; }; "theme": { "alias": "theme"; "required": false; "isSignal": true; }; "defaultThemeKey": { "alias": "defaultThemeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "onThemeChange": { "alias": "onThemeChange"; "required": false; "isSignal": true; }; "defaultLocale": { "alias": "defaultLocale"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "onLocaleChange": { "alias": "onLocaleChange"; "required": false; "isSignal": true; }; "accountAuth": { "alias": "accountAuth"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "collaboration": { "alias": "collaboration"; "required": false; "isSignal": true; }; "authorName": { "alias": "authorName"; "required": false; "isSignal": true; }; "shareDefaults": { "alias": "shareDefaults"; "required": false; "isSignal": true; }; "onOpenFile": { "alias": "onOpenFile"; "required": false; "isSignal": true; }; "smartArt3D": { "alias": "smartArt3D"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "modeChange": "modeChange"; "zoomChange": "zoomChange"; "selectionChange": "selectionChange"; "slideCountChange": "slideCountChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
6895
7180
  }
6896
7181
 
6897
7182
  /** A selected chart sub-part, scoped to the chart element that owns it. */
@@ -7246,7 +7531,7 @@ declare class ZoomTargetService {
7246
7531
  * `PowerPointViewerComponent`'s children (ribbon, slide canvas, inspector,
7247
7532
  * dialogs, ...) rely on via `inject()`.
7248
7533
  */
7249
- declare const POWER_POINT_VIEWER_PROVIDERS: readonly [typeof LoadContentService, typeof ExportService, typeof EditorStateService, typeof ChartPartSelectionService, typeof TableSelectionService, typeof EmbeddedFontsService, typeof CollaborationService, typeof AccessibilityService, typeof AutosaveService, typeof PrintService, typeof IsMobileService, typeof SmartArt3DService, typeof FieldContextService, typeof ZoomTargetService, typeof ViewerDialogsService, typeof ViewerCompareService, typeof ViewerExportService, typeof ViewerFindReplaceService, typeof ViewerCustomShowsService, typeof ViewerCollaborationSessionService, typeof ViewerCanvasEditingService, typeof ViewerCollabCursorService, typeof ViewerDocumentPropertiesService, typeof ViewerFileIOService, typeof ViewerFormatPainterService, typeof ViewerInspectorPanelService, typeof ViewerKeyboardService, typeof ViewerMobileSheetService, typeof ViewerPresentationModeService, typeof ViewerThemeGalleryService, typeof ViewerTouchGesturesService, typeof ViewerZoomService];
7534
+ declare const POWER_POINT_VIEWER_PROVIDERS: readonly [typeof LoadContentService, typeof ExportService, typeof EditorStateService, typeof ChartPartSelectionService, typeof TableSelectionService, typeof EmbeddedFontsService, typeof CollaborationService, typeof AccessibilityService, typeof AutosaveService, typeof PrintService, typeof IsMobileService, typeof SmartArt3DService, typeof FieldContextService, typeof ZoomTargetService, typeof ViewerDialogsService, typeof ViewerCompareService, typeof ViewerExportService, typeof ViewerFindReplaceService, typeof ViewerCustomShowsService, typeof ViewerCollaborationSessionService, typeof ViewerCanvasEditingService, typeof ViewerCollabCursorService, typeof ViewerDocumentPropertiesService, typeof ViewerFileIOService, typeof ViewerFormatPainterService, typeof ViewerInspectorPanelService, typeof ViewerKeyboardService, typeof ViewerMobileSheetService, typeof ViewerOptionsService, typeof ViewerPresentationModeService, typeof ViewerThemeGalleryService, typeof ViewerTouchGesturesService, typeof ViewerZoomService];
7250
7535
 
7251
7536
  /** Drawing tool IDs (mirrors React DRAW_TOOLS). */
7252
7537
  type DrawTool$1 = 'select' | 'pen' | 'highlighter' | 'eraser' | 'freeform';
@@ -11646,19 +11931,16 @@ declare class ViewerExtraDialogsComponent {
11646
11931
  readonly filePath: _angular_core.InputSignal<string | undefined>;
11647
11932
  /** Custom shows offered in the set-up-slide-show "show slides" fieldset. */
11648
11933
  readonly customShows: _angular_core.InputSignal<PptxCustomShow[]>;
11649
- /** Live viewer preferences surfaced by the settings dialog. */
11650
- readonly settings: _angular_core.InputSignal<ViewerPreferences>;
11651
11934
  readonly themeKey: _angular_core.InputSignal<string>;
11652
11935
  readonly availableThemes: _angular_core.InputSignal<readonly ThemeCatalogEntry[]>;
11653
11936
  readonly localeCode: _angular_core.InputSignal<string>;
11654
11937
  readonly availableLocales: _angular_core.InputSignal<readonly LocaleCatalogEntry[]>;
11655
11938
  /** Fired with a restored `.pptx` version's bytes; the host swaps the deck. */
11656
11939
  readonly restoreContent: _angular_core.OutputEmitterRef<Uint8Array<ArrayBufferLike>>;
11657
- /** Fired whenever a settings toggle changes. */
11658
- readonly settingsChange: _angular_core.OutputEmitterRef<ViewerPreferences>;
11659
11940
  readonly themeKeySelect: _angular_core.OutputEmitterRef<string>;
11660
11941
  readonly localeSelect: _angular_core.OutputEmitterRef<string>;
11661
11942
  protected readonly svc: ViewerDialogsService;
11943
+ protected readonly viewerOpts: ViewerOptionsService;
11662
11944
  protected readonly compare: ViewerCompareService;
11663
11945
  protected readonly editor: EditorStateService;
11664
11946
  protected readonly loader: LoadContentService;
@@ -11681,6 +11963,8 @@ declare class ViewerExtraDialogsComponent {
11681
11963
  promptKeepAnnotations(map: SlideAnnotationMap): void;
11682
11964
  /** Persist the pending presentation ink as `ink` elements on their slides. */
11683
11965
  onKeepAnnotations(): void;
11966
+ /** Options > Save > "Delete cached files": purge autosave recovery snapshots. */
11967
+ protected onClearOptionsCache(): void;
11684
11968
  /** Drop the pending presentation ink. */
11685
11969
  onDiscardAnnotations(): void;
11686
11970
  /** Insert a new equation element, or update the one currently being edited. */
@@ -11692,7 +11976,7 @@ declare class ViewerExtraDialogsComponent {
11692
11976
  /** Clear any save password. */
11693
11977
  onRemovePassword(): void;
11694
11978
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerExtraDialogsComponent, never>;
11695
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewerExtraDialogsComponent, "pptx-viewer-extra-dialogs", never, { "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; "selectedElementId": { "alias": "selectedElementId"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": true; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; }, { "restoreContent": "restoreContent"; "settingsChange": "settingsChange"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; }, never, never, true, never>;
11979
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<ViewerExtraDialogsComponent, "pptx-viewer-extra-dialogs", never, { "activeSlideIndex": { "alias": "activeSlideIndex"; "required": false; "isSignal": true; }; "selectedElementId": { "alias": "selectedElementId"; "required": false; "isSignal": true; }; "filePath": { "alias": "filePath"; "required": false; "isSignal": true; }; "customShows": { "alias": "customShows"; "required": false; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; }, { "restoreContent": "restoreContent"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; }, never, never, true, never>;
11696
11980
  }
11697
11981
 
11698
11982
  declare class EquationEditorDialogComponent {
@@ -12072,29 +12356,55 @@ declare class ShortcutPanelComponent {
12072
12356
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ShortcutPanelComponent, "pptx-shortcut-panel", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; }, { "close": "close"; }, never, never, true, never>;
12073
12357
  }
12074
12358
 
12359
+ /** One dialog-level option edit (group + key + new primitive value). */
12360
+ interface OptionValueChange {
12361
+ group: ViewerOptionsGroupId;
12362
+ key: string;
12363
+ value: ViewerOptionPrimitive;
12364
+ }
12365
+
12366
+ /** One Customize Ribbon checkbox edit. */
12367
+ interface RibbonTabHiddenChange {
12368
+ tabId: ToolbarTabId;
12369
+ hidden: boolean;
12370
+ }
12371
+
12075
12372
  declare class SettingsDialogComponent {
12076
12373
  readonly open: _angular_core.InputSignal<boolean>;
12077
- readonly settings: _angular_core.InputSignal<ViewerPreferences>;
12078
- /** Selected `THEME_CATALOG` (or `availableThemes`) key, for the Appearance tab. */
12374
+ /** Full File > Options snapshot rendered by every pane. */
12375
+ readonly options: _angular_core.InputSignal<ViewerOptions>;
12376
+ /** Selected theme catalog key, for General > Appearance. */
12079
12377
  readonly themeKey: _angular_core.InputSignal<string>;
12080
- /** Theme choices offered by the Appearance tab. Defaults to the built-in `THEME_CATALOG`. */
12081
12378
  readonly availableThemes: _angular_core.InputSignal<readonly ThemeCatalogEntry[]>;
12082
- /** Active locale code, for the Language tab. */
12379
+ /** Active locale code, for the Language category. */
12083
12380
  readonly localeCode: _angular_core.InputSignal<string>;
12084
- /** Locale choices offered by the Language tab. Defaults to the built-in `LOCALE_CATALOG`. */
12085
12381
  readonly availableLocales: _angular_core.InputSignal<readonly LocaleCatalogEntry[]>;
12086
- readonly settingsChange: _angular_core.OutputEmitterRef<ViewerPreferences>;
12087
- /** Fired when the user picks an Appearance tab swatch. */
12382
+ /** Availability flags for the Add-ins pane (unset ids default to active). */
12383
+ readonly addinStatus: _angular_core.InputSignal<ViewerAddinStatus | undefined>;
12384
+ readonly optionChange: _angular_core.OutputEmitterRef<OptionValueChange>;
12385
+ /** Restore a snapshot wholesale (Cancel semantics). */
12386
+ readonly restoreOptions: _angular_core.OutputEmitterRef<ViewerOptions>;
12387
+ readonly ribbonTabHiddenChange: _angular_core.OutputEmitterRef<RibbonTabHiddenChange>;
12388
+ readonly quickAccessCommandsChange: _angular_core.OutputEmitterRef<string[]>;
12389
+ /** Reset one tab-group (or everything when `undefined`). */
12390
+ readonly resetOptions: _angular_core.OutputEmitterRef<keyof ViewerOptions | undefined>;
12391
+ readonly clearCache: _angular_core.OutputEmitterRef<void>;
12088
12392
  readonly themeKeySelect: _angular_core.OutputEmitterRef<string>;
12089
- /** Fired when the user picks a Language tab entry. */
12090
12393
  readonly localeSelect: _angular_core.OutputEmitterRef<string>;
12091
12394
  readonly close: _angular_core.OutputEmitterRef<void>;
12092
- protected readonly activeTab: _angular_core.WritableSignal<"language" | "general" | "appearance" | "shortcuts">;
12093
- protected readonly specs: readonly ViewerPreferenceToggle[];
12094
- protected readonly shortcuts: readonly pptx_angular_viewer.ShortcutReferenceItem[];
12095
- protected toggle(key: keyof ViewerSettings): void;
12395
+ protected readonly tabs: readonly ViewerOptionsTabDefinition[];
12396
+ protected readonly activeTabId: _angular_core.WritableSignal<ViewerOptionsTabId>;
12397
+ protected readonly activeTab: _angular_core.Signal<ViewerOptionsTabDefinition>;
12398
+ /** Snapshot taken when the dialog opens, restored by Cancel. */
12399
+ private snapshot;
12400
+ private wasOpen;
12401
+ constructor();
12402
+ /** Cancel: restore the on-open snapshot, then close. */
12403
+ protected cancel(): void;
12404
+ /** Escape confirms (keeps edits), mirroring React's dialog. */
12405
+ protected onEscape(): void;
12096
12406
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SettingsDialogComponent, never>;
12097
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<SettingsDialogComponent, "pptx-settings-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "settings": { "alias": "settings"; "required": true; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; }, { "settingsChange": "settingsChange"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; "close": "close"; }, never, never, true, never>;
12407
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<SettingsDialogComponent, "pptx-settings-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "options": { "alias": "options"; "required": true; "isSignal": true; }; "themeKey": { "alias": "themeKey"; "required": false; "isSignal": true; }; "availableThemes": { "alias": "availableThemes"; "required": false; "isSignal": true; }; "localeCode": { "alias": "localeCode"; "required": false; "isSignal": true; }; "availableLocales": { "alias": "availableLocales"; "required": false; "isSignal": true; }; "addinStatus": { "alias": "addinStatus"; "required": false; "isSignal": true; }; }, { "optionChange": "optionChange"; "restoreOptions": "restoreOptions"; "ribbonTabHiddenChange": "ribbonTabHiddenChange"; "quickAccessCommandsChange": "quickAccessCommandsChange"; "resetOptions": "resetOptions"; "clearCache": "clearCache"; "themeKeySelect": "themeKeySelect"; "localeSelect": "localeSelect"; "close": "close"; }, never, never, true, never>;
12098
12408
  }
12099
12409
 
12100
12410
  declare class SettingsAppearanceTabComponent {
@@ -12119,7 +12429,7 @@ declare class AccountPageComponent {
12119
12429
  readonly accountAuth: _angular_core.InputSignal<AccountAuthConfig | undefined>;
12120
12430
  private readonly translate;
12121
12431
  protected readonly swatches: readonly string[];
12122
- protected readonly version = "1.30.0";
12432
+ protected readonly version = "1.31.0";
12123
12433
  protected readonly profile: _angular_core.WritableSignal<ViewerProfile>;
12124
12434
  protected readonly initial: _angular_core.Signal<string>;
12125
12435
  protected readonly usage: _angular_core.WritableSignal<LocalStorageUsageSummary | null>;
@@ -14682,10 +14992,14 @@ declare class TitleBarComponent {
14682
14992
  readonly findReplaceOpen: _angular_core.InputSignal<boolean>;
14683
14993
  /** Toolbar buttons the host wants hidden (gates Undo/Redo independently). */
14684
14994
  readonly hiddenActions: _angular_core.InputSignal<ToolbarActionId[]>;
14995
+ /** Live Quick Access Toolbar options (File > Options > Quick Access). */
14996
+ readonly quickAccess: _angular_core.InputSignal<ViewerQuickAccessOptions | null>;
14685
14997
  readonly toggleAutosave: _angular_core.OutputEmitterRef<void>;
14686
14998
  readonly save: _angular_core.OutputEmitterRef<void>;
14687
14999
  readonly undo: _angular_core.OutputEmitterRef<void>;
14688
15000
  readonly redo: _angular_core.OutputEmitterRef<void>;
15001
+ /** A configured Quick Access command was pressed (catalog id). */
15002
+ readonly quickCommand: _angular_core.OutputEmitterRef<string>;
14689
15003
  readonly toggleFindReplace: _angular_core.OutputEmitterRef<void>;
14690
15004
  readonly commandSearch: _angular_core.OutputEmitterRef<string>;
14691
15005
  private readonly translate;
@@ -14718,6 +15032,20 @@ declare class TitleBarComponent {
14718
15032
  protected readonly toolbar: ToolbarVisibility;
14719
15033
  protected readonly searchQuery: _angular_core.WritableSignal<string>;
14720
15034
  protected readonly searchFocused: _angular_core.WritableSignal<boolean>;
15035
+ /** Resolved Quick Access options (host-supplied, or the default trio+). */
15036
+ protected readonly qat: _angular_core.Signal<ViewerQuickAccessOptions>;
15037
+ /**
15038
+ * Configured Quick Access commands beyond the dedicated save/undo/redo
15039
+ * buttons (which keep their own gating + labels). Rendered as text-label
15040
+ * buttons routed through {@link onQuickCommand}.
15041
+ */
15042
+ protected readonly extraQuickCommands: _angular_core.Signal<QuickAccessCommandDefinition[]>;
15043
+ /**
15044
+ * Route a Quick Access press: keep the dedicated save/undo/redo outputs
15045
+ * (existing host wiring, `hiddenActions` gating) and forward everything
15046
+ * else through the generic {@link quickCommand} output.
15047
+ */
15048
+ protected onQuickCommand(id: string): void;
14721
15049
  protected readonly commandResults: _angular_core.Signal<CommandSearchEntry[]>;
14722
15050
  /** The i18n key for the save-location status text (next to the file name). */
14723
15051
  protected readonly statusKey: _angular_core.Signal<string>;
@@ -14728,7 +15056,7 @@ declare class TitleBarComponent {
14728
15056
  protected onSearchBlur(): void;
14729
15057
  protected onSearchKeyDown(event: KeyboardEvent): void;
14730
15058
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<TitleBarComponent, never>;
14731
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<TitleBarComponent, "pptx-title-bar", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "isDirty": { "alias": "isDirty"; "required": false; "isSignal": true; }; "autosaveStatus": { "alias": "autosaveStatus"; "required": false; "isSignal": true; }; "autosaveEnabled": { "alias": "autosaveEnabled"; "required": false; "isSignal": true; }; "canUndo": { "alias": "canUndo"; "required": false; "isSignal": true; }; "canRedo": { "alias": "canRedo"; "required": false; "isSignal": true; }; "undoLabel": { "alias": "undoLabel"; "required": false; "isSignal": true; }; "redoLabel": { "alias": "redoLabel"; "required": false; "isSignal": true; }; "findReplaceOpen": { "alias": "findReplaceOpen"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; }, { "toggleAutosave": "toggleAutosave"; "save": "save"; "undo": "undo"; "redo": "redo"; "toggleFindReplace": "toggleFindReplace"; "commandSearch": "commandSearch"; }, never, never, true, never>;
15059
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<TitleBarComponent, "pptx-title-bar", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "fileName": { "alias": "fileName"; "required": false; "isSignal": true; }; "isDirty": { "alias": "isDirty"; "required": false; "isSignal": true; }; "autosaveStatus": { "alias": "autosaveStatus"; "required": false; "isSignal": true; }; "autosaveEnabled": { "alias": "autosaveEnabled"; "required": false; "isSignal": true; }; "canUndo": { "alias": "canUndo"; "required": false; "isSignal": true; }; "canRedo": { "alias": "canRedo"; "required": false; "isSignal": true; }; "undoLabel": { "alias": "undoLabel"; "required": false; "isSignal": true; }; "redoLabel": { "alias": "redoLabel"; "required": false; "isSignal": true; }; "findReplaceOpen": { "alias": "findReplaceOpen"; "required": false; "isSignal": true; }; "hiddenActions": { "alias": "hiddenActions"; "required": false; "isSignal": true; }; "quickAccess": { "alias": "quickAccess"; "required": false; "isSignal": true; }; }, { "toggleAutosave": "toggleAutosave"; "save": "save"; "undo": "undo"; "redo": "redo"; "quickCommand": "quickCommand"; "toggleFindReplace": "toggleFindReplace"; "commandSearch": "commandSearch"; }, never, never, true, never>;
14732
15060
  }
14733
15061
 
14734
15062
  /**