pptx-angular-viewer 1.17.1 → 1.18.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.
@@ -1,8 +1,8 @@
1
- import * as _angular_core from '@angular/core';
2
- import { Signal, WritableSignal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
3
1
  import * as pptx_viewer_core from 'pptx-viewer-core';
4
- import { PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationDirection, PptxAnimationRepeatMode, PptxAnimationSequence, PptxAnimationTimingCurve, PptxAnimationTrigger, TablePptxElement, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, InkPptxElement, PptxComment, PptxChartType, PptxTheme, PptxSlideMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, PptxCustomShow, PptxPresentationProperties, PptxThemePreset, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, ChartPptxElement, SmartArtPptxElement, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, SignatureStatus, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, ChartGridlineStyleEdit, PptxChartMarkerSymbol, PptxSmartArtNode, SmartArtLayoutType, PptxSmartArtNodeStyle, MediaCaptionTrack, MediaPptxElement, PptxMediaType } from 'pptx-viewer-core';
2
+ import { PptxSlide, PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxChartSeries, PptxChartData, PptxElementAnimation, PptxAnimationPreset, PptxAnimationDirection, PptxAnimationRepeatMode, PptxAnimationSequence, PptxAnimationTimingCurve, PptxAnimationTrigger, TablePptxElement, OlePptxElement, TextSegment, TextStyle, PptxTransitionType, SmartArtColorScheme, PptxSmartArtChrome, PptxSmartArtDrawingShape, SmartArtStyle, PptxSmartArtData, PptxEmbeddedFont, SmartArtLayout, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, InkPptxElement, PptxComment, PptxChartType, PptxTheme, PptxSlideMaster, PptxNotesMaster, PptxHandoutMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxTableCellStyle, PptxTableRow, PptxTableData, PptxCustomShow, PptxPresentationProperties, PptxThemePreset, MasterViewTab, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, ChartPptxElement, SmartArtPptxElement, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, SignatureStatus, ChartAxisEdit, ChartDataPointLabelEdit, PptxChartLegendPosition, PptxChartStyle, ChartAxisTitleStyleEdit, ChartGridlineStyleEdit, PptxChartMarkerSymbol, PptxSmartArtNode, SmartArtLayoutType, PptxSmartArtNodeStyle, MediaCaptionTrack, MediaPptxElement, PptxMediaType } from 'pptx-viewer-core';
5
3
  export { SWITCHABLE_LAYOUT_TYPES, addSmartArtNode, addSmartArtNodeAsChild, chartDataAddCategory, chartDataAddSeries, chartDataChangeType, chartDataRemoveCategory, chartDataRemoveSeries, chartDataUpdatePoint, demoteSmartArtNode, promoteSmartArtNode, removeSmartArtNode, reorderSmartArtNode, switchSmartArtLayout, updateSmartArtNodeText } from 'pptx-viewer-core';
4
+ import * as _angular_core from '@angular/core';
5
+ import { Signal, WritableSignal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
6
6
  import * as pptx_angular_viewer from 'pptx-angular-viewer';
7
7
  import { TranslateService } from '@ngx-translate/core';
8
8
  import { Options } from 'html2canvas-pro';
@@ -254,10 +254,12 @@ type CollaborationRole = 'owner' | 'collaborator' | 'viewer';
254
254
  * any signaling server, which makes this mode usable from static hosting.
255
255
  */
256
256
  type CollaborationTransport = 'websocket' | 'webrtc';
257
+ /** How the local user entered a collaboration session. */
258
+ type CollaborationSessionIntent = 'create' | 'join';
257
259
  /**
258
260
  * Real-time collaboration configuration.
259
261
  *
260
- * The same shape is accepted by the React, Vue, and Angular bindings.
262
+ * The same shape is accepted by every framework binding.
261
263
  */
262
264
  interface CollaborationConfig {
263
265
  /** Unique identifier for the collaboration room (alphanumeric, hyphens, underscores). */
@@ -285,6 +287,13 @@ interface CollaborationConfig {
285
287
  authToken?: string;
286
288
  /** Role in the session; defaults to `'collaborator'`. */
287
289
  role?: CollaborationRole;
290
+ /**
291
+ * Whether this client created the room or joined an existing room. Providers
292
+ * do not use this value, but hosts can use it to avoid publishing local file
293
+ * bytes when handling a join request. Omitted values retain the legacy
294
+ * create-session behaviour.
295
+ */
296
+ sessionIntent?: CollaborationSessionIntent;
288
297
  /**
289
298
  * Elected-writer write-back callback (Area 3 of the C3 hardening plan).
290
299
  *
@@ -442,6 +451,44 @@ declare function buildPatternFillCss(style: ShapeStyle | undefined): {
442
451
  /** A neutral CSS map (framework `CSSProperties` are structurally compatible). */
443
452
  type CssStyleMap = Record<string, string | number>;
444
453
 
454
+ /**
455
+ * Visual effects composable — pure CSS computation for OOXML shape/image effects.
456
+ *
457
+ * Mirrors the React `pptx-viewer` effect layer (shape-visual-style.ts +
458
+ * color-core.ts + effect-dag-filters.ts) without any React/Vue runtime
459
+ * dependency. Everything here is a pure function so it can be unit-tested
460
+ * without mounting a component, then wired into `element-style.ts` /
461
+ * `ElementRenderer.vue` by the integrator.
462
+ *
463
+ * It covers, for shapes/connectors/images:
464
+ * - **Outer shadow** → CSS `box-shadow`
465
+ * - **Inner shadow** → CSS `inset` `box-shadow`
466
+ * - **Multi-layer shadow** → comma-joined `box-shadow` (from `shadows[]`)
467
+ * - **Outer glow** → CSS `filter: drop-shadow(...)` (simple path) and
468
+ * optional layered `box-shadow` (high-fidelity path)
469
+ * - **Soft edges / blur** → CSS `filter: blur(...)`
470
+ * - **Reflection** → Chromium `-webkit-box-reflect`
471
+ * - **Effect DAG** → CSS `filter` (grayscale/biLevel/lum/hsl/tint…),
472
+ * `opacity`, `mix-blend-mode`, + optional duotone
473
+ * `<filter>` SVG markup (high-fidelity path)
474
+ *
475
+ * Units/precedence match the React implementation: spatial values are already
476
+ * in px on `ShapeStyle` (pre-converted from EMU by core), angles are degrees,
477
+ * alpha is 0–1. The EMU constants are re-exported from core for callers that
478
+ * need to convert raw values themselves.
479
+ *
480
+ * @module viewer/composables/visual-effects
481
+ */
482
+
483
+ /** Resolved parameters for a line-level (`a:ln`) outer shadow. */
484
+ interface LineShadowParams {
485
+ offsetX: number;
486
+ offsetY: number;
487
+ blur: number;
488
+ color: string;
489
+ opacity: number;
490
+ }
491
+
445
492
  /**
446
493
  * Text warp / WordArt logic — Vue port of the React
447
494
  * `viewer/utils/warp-path-generators.ts` + `text-warp-classifier.ts`.
@@ -3126,6 +3173,17 @@ interface ResolvedFontVariant {
3126
3173
  /** Object URL minted for this variant (must be revoked on cleanup). */
3127
3174
  objectUrl?: string;
3128
3175
  }
3176
+ /**
3177
+ * A font supplied by the host application. The package never ships fonts:
3178
+ * applications provide a licensed URL, data URL, or blob URL for their users.
3179
+ */
3180
+ interface ViewerFontSource {
3181
+ family: string;
3182
+ src: string;
3183
+ format?: 'truetype' | 'opentype' | 'woff' | 'woff2';
3184
+ weight?: string | number;
3185
+ style?: 'normal' | 'italic';
3186
+ }
3129
3187
  /**
3130
3188
  * Factory the (impure) object-URL minting is delegated to, so the resolution
3131
3189
  * logic stays pure and testable. The binding supplies a real implementation
@@ -3308,6 +3366,44 @@ declare function clampNotesFontSize(size: number): number;
3308
3366
  /** Format a Date as a locale time string (HH:MM:SS). */
3309
3367
  declare function formatTime(date: Date): string;
3310
3368
 
3369
+ interface PresentationSnapshot {
3370
+ slideIndex: number;
3371
+ buildStep: number;
3372
+ sequence: number;
3373
+ blackout: 'none' | 'black' | 'white';
3374
+ paused: boolean;
3375
+ elapsedMs: number;
3376
+ zoom?: PresentationZoomState;
3377
+ pointer?: PresentationPointerState;
3378
+ inkStrokes?: PresentationInkStroke[];
3379
+ caption?: string;
3380
+ subtitlesVisible?: boolean;
3381
+ }
3382
+ interface PresentationZoomState {
3383
+ scale: number;
3384
+ originX: number;
3385
+ originY: number;
3386
+ }
3387
+ type PresentationPointerTool = 'none' | 'laser' | 'pen' | 'highlighter' | 'eraser';
3388
+ interface PresentationPointerState {
3389
+ tool: PresentationPointerTool;
3390
+ x: number;
3391
+ y: number;
3392
+ color: string;
3393
+ }
3394
+ interface PresentationInkPoint {
3395
+ x: number;
3396
+ y: number;
3397
+ }
3398
+ interface PresentationInkStroke {
3399
+ id: string;
3400
+ slideIndex: number;
3401
+ tool: 'pen' | 'highlighter';
3402
+ color: string;
3403
+ width: number;
3404
+ points: PresentationInkPoint[];
3405
+ }
3406
+
3311
3407
  /**
3312
3408
  * smart-art-presets.ts: the SmartArt insert-gallery catalogue, shared across
3313
3409
  * bindings. Pure data + types; consumed by each binding's insert dialog and
@@ -3528,6 +3624,41 @@ interface StrokeToInkElementOpts {
3528
3624
  */
3529
3625
  declare function strokeToInkElement(opts: StrokeToInkElementOpts): InkPptxElement | null;
3530
3626
 
3627
+ /**
3628
+ * Ink rendering utilities for pressure-sensitive strokes and replay animation.
3629
+ *
3630
+ * Pressure sensitivity is approximated by splitting an SVG path into short
3631
+ * sub-segments, each rendered as a filled circle at that point's coordinates.
3632
+ * The radius of each circle varies according to the corresponding entry in the
3633
+ * `inkWidths` array.
3634
+ *
3635
+ * Replay animation uses SVG `stroke-dasharray` / `stroke-dashoffset` to
3636
+ * progressively reveal each stroke with a sequential delay.
3637
+ *
3638
+ * Framework-agnostic: only imports core types, so every binding (React, Vue,
3639
+ * Angular) consumes one copy instead of duplicating the maths.
3640
+ *
3641
+ * @module ink-rendering
3642
+ */
3643
+
3644
+ /**
3645
+ * CSS properties for a single ink stroke's replay animation.
3646
+ */
3647
+ interface InkStrokeAnimationStyle {
3648
+ /** Estimated path length for stroke-dasharray. */
3649
+ pathLength: number;
3650
+ /** Animation delay for this stroke. */
3651
+ animationDelay: string;
3652
+ /** Animation duration for this stroke. */
3653
+ animationDuration: string;
3654
+ /** The CSS animation shorthand value. */
3655
+ animation: string;
3656
+ /** Initial stroke-dasharray value. */
3657
+ strokeDasharray: string;
3658
+ /** Initial stroke-dashoffset value. */
3659
+ strokeDashoffset: string;
3660
+ }
3661
+
3531
3662
  /**
3532
3663
  * Pure helper logic for mobile chrome state, shared by every binding.
3533
3664
  *
@@ -4012,6 +4143,22 @@ declare function fpsToFrameIntervalMs(fps: number): number;
4012
4143
  */
4013
4144
  declare function segmentFrameCount(durationMs: number, fps: number): number;
4014
4145
 
4146
+ /**
4147
+ * Thin re-export shim → vendored `pptx-viewer-shared` (`render/embedded-fonts`).
4148
+ *
4149
+ * The pure embedded-font `@font-face` assembly (URL/format validation, XOR
4150
+ * de-obfuscation fallback, resolved-variant -> stylesheet/family-list build)
4151
+ * was extracted to shared and is consumed by every binding. This shim preserves
4152
+ * the historical Angular import surface.
4153
+ *
4154
+ * `EMBEDDED_FONTS_STYLE_ID` stays Angular-local: it is the DOM id of the managed
4155
+ * `<style>` element this binding injects, and is intentionally distinct from the
4156
+ * React binding's id.
4157
+ */
4158
+
4159
+ /** DOM id of the managed `<style>` element the service injects into `<head>`. */
4160
+ declare const EMBEDDED_FONTS_STYLE_ID = "pptx-angular-embedded-fonts";
4161
+
4015
4162
  declare class AccessibilityService {
4016
4163
  /** Parsed slides of the current presentation. */
4017
4164
  readonly slides: _angular_core.WritableSignal<PptxSlide[]>;
@@ -4545,6 +4692,10 @@ declare class LoadContentService {
4545
4692
  readonly themeColorMap: _angular_core.WritableSignal<Record<string, string> | undefined>;
4546
4693
  /** Slide masters (for placeholder/background resolution). */
4547
4694
  readonly slideMasters: _angular_core.WritableSignal<PptxSlideMaster[]>;
4695
+ /** Notes master, including its editable element tree. */
4696
+ readonly notesMaster: _angular_core.WritableSignal<PptxNotesMaster | undefined>;
4697
+ /** Handout master, including its editable element tree. */
4698
+ readonly handoutMaster: _angular_core.WritableSignal<PptxHandoutMaster | undefined>;
4548
4699
  /** Archive-path → displayable URL map for media + poster frames. */
4549
4700
  readonly mediaDataUrls: _angular_core.WritableSignal<Map<string, string>>;
4550
4701
  /** Embedded font data (name + binary) extracted from the presentation. */
@@ -4650,14 +4801,17 @@ declare function isPresenterMessage(data: unknown): data is PresenterMessage;
4650
4801
  */
4651
4802
  declare function parseAudienceNonce(): string | null;
4652
4803
  declare class PresenterWindowService {
4804
+ readonly snapshot: _angular_core.WritableSignal<PresentationSnapshot>;
4653
4805
  private audienceWindow;
4654
4806
  private channel;
4655
4807
  private pollTimer;
4808
+ private readyListener;
4656
4809
  /** Per-session UUID. Regenerated each time openAudienceWindow is invoked. */
4657
4810
  private sessionId;
4658
4811
  private getChannel;
4659
4812
  isAudienceWindowOpen(): boolean;
4660
4813
  syncSlideToAudience(slideIndex: number): void;
4814
+ updateSnapshot(patch: Partial<PresentationSnapshot>): void;
4661
4815
  closeAudienceWindow(): void;
4662
4816
  /**
4663
4817
  * Open the audience tab. Persists the PPTX bytes (if any) to IndexedDB, then
@@ -4665,6 +4819,8 @@ declare class PresenterWindowService {
4665
4819
  * popup is blocked.
4666
4820
  */
4667
4821
  openAudienceWindow(content: ArrayBuffer | Uint8Array | null, currentSlideIndex: number): boolean;
4822
+ /** Connect an audience tab to the presenter channel and announce readiness. */
4823
+ connectAudience(onSlide: (index: number) => void, onExit: () => void): () => void;
4668
4824
  private disposeWindow;
4669
4825
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresenterWindowService, never>;
4670
4826
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<PresenterWindowService>;
@@ -5830,6 +5986,7 @@ interface PresentationModeHost {
5830
5986
  readonly sourceContent: () => Uint8Array | ArrayBuffer | null;
5831
5987
  readonly canEdit: () => boolean;
5832
5988
  readonly promptKeepAnnotations: (map: SlideAnnotationMap) => void;
5989
+ readonly applyRehearsalTimings: (timings: Record<number, number>) => void;
5833
5990
  }
5834
5991
  declare class ViewerPresentationModeService {
5835
5992
  private readonly loader;
@@ -5841,6 +5998,14 @@ declare class ViewerPresentationModeService {
5841
5998
  readonly presentingPresenter: _angular_core.WritableSignal<boolean>;
5842
5999
  /** Epoch ms when presenter view started (drives the elapsed timer). */
5843
6000
  readonly presenterStartTime: _angular_core.WritableSignal<number | null>;
6001
+ readonly rehearsing: _angular_core.WritableSignal<boolean>;
6002
+ readonly rehearsalPaused: _angular_core.WritableSignal<boolean>;
6003
+ readonly showRehearsalSummary: _angular_core.WritableSignal<boolean>;
6004
+ readonly rehearsalStartedAt: _angular_core.WritableSignal<number | null>;
6005
+ readonly slideStartedAt: _angular_core.WritableSignal<number | null>;
6006
+ readonly recordedTimings: _angular_core.WritableSignal<Record<number, number>>;
6007
+ private pauseStartedAt;
6008
+ private pausedOnSlideMs;
5844
6009
  private host;
5845
6010
  /** Wire the host accessors (called once from the component constructor). */
5846
6011
  bind(host: PresentationModeHost): void;
@@ -5851,6 +6016,7 @@ declare class ViewerPresentationModeService {
5851
6016
  * mounts as a result of `presenting` flipping true.
5852
6017
  */
5853
6018
  present(): void;
6019
+ startRehearsal(): void;
5854
6020
  /**
5855
6021
  * Map a presentation-overlay index back to the full-deck `activeSlideIndex`.
5856
6022
  * The overlay's index is relative to the (possibly custom-show-filtered)
@@ -5858,6 +6024,11 @@ declare class ViewerPresentationModeService {
5858
6024
  * correct when the show closes.
5859
6025
  */
5860
6026
  onPresentationIndexChange(index: number): void;
6027
+ toggleRehearsalPause(): void;
6028
+ closePresentation(): void;
6029
+ saveRehearsalTimings(): void;
6030
+ dismissRehearsalSummary(): void;
6031
+ private recordCurrentSlide;
5861
6032
  /**
5862
6033
  * Open a separate audience tab and hand off the deck via the shared
5863
6034
  * IndexedDB store. Mirrors React's presenter "open audience window".
@@ -5926,6 +6097,8 @@ declare class ViewerZoomService {
5926
6097
  declare class PowerPointViewerComponent {
5927
6098
  /** PowerPoint content as Uint8Array (or ArrayBuffer). */
5928
6099
  readonly content: _angular_core.InputSignal<ArrayBuffer | Uint8Array<ArrayBufferLike> | null>;
6100
+ /** Licensed fonts supplied by the host application. No fonts are bundled. */
6101
+ readonly fontsInput: _angular_core.InputSignal<ViewerFontSource[]>;
5929
6102
  /** Whether editing actions are enabled. (Editor chrome not yet ported.) */
5930
6103
  readonly canEdit: _angular_core.InputSignal<boolean>;
5931
6104
  /** Optional class applied to the root element. */
@@ -6012,6 +6185,7 @@ declare class PowerPointViewerComponent {
6012
6185
  private readonly smartArt3DSvc;
6013
6186
  private readonly zoomTarget;
6014
6187
  protected readonly presenterWindow: PresenterWindowService;
6188
+ private readonly destroyRef;
6015
6189
  protected readonly dialogs: ViewerDialogsService;
6016
6190
  private readonly compareSvc;
6017
6191
  protected readonly xport: ViewerExportService;
@@ -6055,6 +6229,11 @@ declare class PowerPointViewerComponent {
6055
6229
  protected readonly rootStyle: _angular_core.Signal<Record<string, string>>;
6056
6230
  /** Slide-sorter grid overlay visibility. */
6057
6231
  protected readonly showSorter: _angular_core.WritableSignal<boolean>;
6232
+ /** Full-canvas master editor visibility and active target. */
6233
+ protected readonly showMasterView: _angular_core.WritableSignal<boolean>;
6234
+ protected readonly masterViewTab: _angular_core.WritableSignal<MasterViewTab>;
6235
+ protected readonly activeMasterIndex: _angular_core.WritableSignal<number>;
6236
+ protected readonly activeLayoutIndex: _angular_core.WritableSignal<number | null>;
6058
6237
  /** Whether the left slides panel is collapsed (top-bar sidebar toggle). */
6059
6238
  protected readonly slidesPanelCollapsed: _angular_core.WritableSignal<boolean>;
6060
6239
  /** Whether periodic autosave is enabled (title-bar AutoSave toggle; default on). */
@@ -6099,6 +6278,13 @@ declare class PowerPointViewerComponent {
6099
6278
  * When editing, this serialises the editor's edited deck so changes persist.
6100
6279
  */
6101
6280
  getContent(): Promise<Uint8Array>;
6281
+ protected openMasterView(): void;
6282
+ protected closeMasterView(): void;
6283
+ protected selectMasterTab(tab: MasterViewTab): void;
6284
+ protected setMasterBackground(backgroundColor: string): void;
6285
+ protected setHandoutSlidesPerPage(slidesPerPage: number): void;
6286
+ protected updateNotesMaster(master: PptxNotesMaster): void;
6287
+ protected updateHandoutMaster(master: PptxHandoutMaster): void;
6102
6288
  goTo(index: number): void;
6103
6289
  goPrev(): void;
6104
6290
  goNext(): void;
@@ -6219,7 +6405,7 @@ declare class PowerPointViewerComponent {
6219
6405
  /** Resolve the live slide-stage element within `<main>`. */
6220
6406
  private stageElement;
6221
6407
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
6222
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PowerPointViewerComponent, "pptx-viewer", never, { "content": { "alias": "content"; "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; }; "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; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "modeChange": "modeChange"; "zoomChange": "zoomChange"; "selectionChange": "selectionChange"; "slideCountChange": "slideCountChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
6408
+ 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; }; "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; }; }, { "activeSlideChange": "activeSlideChange"; "dirtyChange": "dirtyChange"; "contentChange": "contentChange"; "propertiesChange": "propertiesChange"; "modeChange": "modeChange"; "zoomChange": "zoomChange"; "selectionChange": "selectionChange"; "slideCountChange": "slideCountChange"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
6223
6409
  }
6224
6410
 
6225
6411
  /** The eight resize-handle positions around a selection box. */
@@ -6635,6 +6821,8 @@ declare class SlideCanvasComponent implements SlideContext {
6635
6821
  onContextMenu(event: MouseEvent): void;
6636
6822
  onHandlePointerDown(event: PointerEvent, handle: ResizeHandle): void;
6637
6823
  onRotatePointerDown(event: PointerEvent): void;
6824
+ onResizeHandleKeydown(event: KeyboardEvent, handle: ResizeHandle): void;
6825
+ onRotateHandleKeydown(event: KeyboardEvent): void;
6638
6826
  onPointerMove(event: PointerEvent): void;
6639
6827
  onPointerUp(): void;
6640
6828
  readonly wrapperStyle: _angular_core.Signal<StyleMap>;
@@ -6957,7 +7145,8 @@ declare class ElementRendererComponent {
6957
7145
  * Compound (double/triple) lines render as parallel strands and line caps map
6958
7146
  * from `a:ln/@cap`; both derive from the shared connector geometry.
6959
7147
  *
6960
- * Not yet ported (TODO): line shadows/glow.
7148
+ * Line shadows use an SVG drop-shadow filter and line glow uses the shared
7149
+ * CSS filter builder, matching the other framework bindings.
6961
7150
  */
6962
7151
  declare class ConnectorRendererComponent {
6963
7152
  readonly element: _angular_core.InputSignal<PptxElement>;
@@ -6971,6 +7160,11 @@ declare class ConnectorRendererComponent {
6971
7160
  /** All derived geometry, recomputed on every input change. */
6972
7161
  readonly geo: _angular_core.Signal<ConnectorGeometry>;
6973
7162
  readonly viewBox: _angular_core.Signal<string>;
7163
+ private readonly shapeStyle;
7164
+ readonly lineShadow: _angular_core.Signal<LineShadowParams | undefined>;
7165
+ readonly lineGlow: _angular_core.Signal<string | undefined>;
7166
+ readonly shadowFilterId: _angular_core.Signal<string>;
7167
+ readonly wrapperStyle: _angular_core.Signal<string>;
6974
7168
  /**
6975
7169
  * Parallel strokes for compound (double/triple) line styles. A single line
6976
7170
  * yields one strand at offset 0. Each strand carries its own width and is
@@ -6990,6 +7184,7 @@ interface ConnectorStrand {
6990
7184
  key: number;
6991
7185
  width: number;
6992
7186
  transform: string | null;
7187
+ shadowFilter: string | null;
6993
7188
  markerStart: string | null;
6994
7189
  markerEnd: string | null;
6995
7190
  }
@@ -7514,8 +7709,9 @@ declare function buildInkContainerStyle(element: PptxElement, zIndex: number): S
7514
7709
  * radii follow the per-point pressure, matching React's `renderInk`. Strokes
7515
7710
  * without pressure variation degrade to a plain constant-width `<path>`.
7516
7711
  *
7517
- * Not ported (TODO): ink replay animation and the
7518
- * highlighter/eraser tool blend modes.
7712
+ * Presentation mode progressively replays constant-width paths using the
7713
+ * shared dash-offset timing model. Pressure circles remain static because SVG
7714
+ * dash replay only applies to paths.
7519
7715
  *
7520
7716
  * All non-trivial pure computation lives in `ink-renderer-helpers.ts` (no
7521
7717
  * Angular dependency) so it can be unit-tested without TestBed.
@@ -7524,11 +7720,14 @@ declare class InkRendererComponent {
7524
7720
  readonly element: _angular_core.InputSignal<PptxElement>;
7525
7721
  readonly zIndex: _angular_core.InputSignal<number>;
7526
7722
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
7723
+ readonly replay: _angular_core.InputSignal<boolean>;
7724
+ readonly replayKeyframes = "@keyframes pptx-ink-replay {\n from { stroke-dashoffset: var(--ink-path-length); }\n to { stroke-dashoffset: 0; }\n}";
7527
7725
  readonly containerStyle: _angular_core.Signal<StyleMap>;
7528
7726
  readonly strokes: _angular_core.Signal<InkStroke[]>;
7727
+ readonly replayStyles: _angular_core.Signal<InkStrokeAnimationStyle[]>;
7529
7728
  readonly viewBox: _angular_core.Signal<string>;
7530
7729
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InkRendererComponent, never>;
7531
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<InkRendererComponent, "pptx-ink-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7730
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<InkRendererComponent, "pptx-ink-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "replay": { "alias": "replay"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
7532
7731
  }
7533
7732
 
7534
7733
  /**
@@ -8154,6 +8353,7 @@ declare class PresentationAnnotationsService {
8154
8353
  * plain CSS overlay.
8155
8354
  */
8156
8355
  declare class PresentationOverlayComponent implements OnInit {
8356
+ protected readonly presenterWindow: PresenterWindowService;
8157
8357
  readonly slides: _angular_core.InputSignal<PptxSlide[]>;
8158
8358
  readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
8159
8359
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
@@ -8167,6 +8367,7 @@ declare class PresentationOverlayComponent implements OnInit {
8167
8367
  readonly annotationsExit: _angular_core.OutputEmitterRef<SlideAnnotationMap>;
8168
8368
  /** Zero-based index into `slides()`. */
8169
8369
  protected readonly currentIndex: _angular_core.WritableSignal<number>;
8370
+ private readonly syncExternalIndex;
8170
8371
  /**
8171
8372
  * Active slide-transition animation: the outgoing slide + the incoming
8172
8373
  * slide's transition, played over the new slide. Cleared on completion.
@@ -9278,6 +9479,8 @@ declare class MobileSlidesSheetComponent {
9278
9479
  }
9279
9480
 
9280
9481
  declare class MobileSheetComponent {
9482
+ private readonly panel;
9483
+ private releaseFocus;
9281
9484
  /** Controls whether the sheet is visible. */
9282
9485
  readonly open: _angular_core.InputSignal<boolean>;
9283
9486
  /** Optional header text displayed above the body. */
@@ -9298,7 +9501,7 @@ declare class MobileSheetComponent {
9298
9501
  /** Whether a drag is in progress (suppresses CSS transition during drag). */
9299
9502
  readonly isDragging: _angular_core.WritableSignal<boolean>;
9300
9503
  readonly panelStyle: _angular_core.Signal<Record<string, string>>;
9301
- onDocumentKeydown(event: KeyboardEvent): void;
9504
+ constructor();
9302
9505
  onPointerDown(event: PointerEvent): void;
9303
9506
  onPointerMove(event: PointerEvent): void;
9304
9507
  onPointerUp(event: PointerEvent): void;
@@ -9590,6 +9793,21 @@ declare class ExportService {
9590
9793
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ExportService>;
9591
9794
  }
9592
9795
 
9796
+ /**
9797
+ * Canvas Export Utilities for the Angular viewer.
9798
+ *
9799
+ * Provides a safe wrapper around html2canvas that resolves modern CSS colour
9800
+ * functions (oklch, oklab, lch, lab, color()) into rgb()/hex before rendering,
9801
+ * then applies the full CSS preprocessing pipeline (backdrop-filter,
9802
+ * mix-blend-mode, 3D transforms, unsupported features).
9803
+ *
9804
+ * The pure colour-normalisation passes and the CSS preprocessing now live once
9805
+ * in `pptx-viewer-shared` (`export/canvas-color-fix`, `export/css-preprocessing`),
9806
+ * inlined here at build time via `../internal/shared-src`. Only the thin
9807
+ * `renderToCanvas` wrapper that imports `html2canvas-pro` stays local; `_testing`
9808
+ * is re-exported so the colocated unit tests keep their historical import path.
9809
+ */
9810
+
9593
9811
  /**
9594
9812
  * A drop-in replacement for `html2canvas(element, options)` that first
9595
9813
  * resolves any oklch / oklab / lch / lab / color() values in the cloned
@@ -9881,6 +10099,8 @@ declare class EmbeddedFontsService {
9881
10099
  */
9882
10100
  readonly fontFamilies: _angular_core.WritableSignal<string[]>;
9883
10101
  private styleEl;
10102
+ private embeddedCss;
10103
+ private userCss;
9884
10104
  /** Object URLs minted on the most recent `setFonts`; revoked when superseded. */
9885
10105
  private liveObjectUrls;
9886
10106
  /** Mints a Blob object URL for de-obfuscated font bytes (impure side effect). */
@@ -9894,6 +10114,8 @@ declare class EmbeddedFontsService {
9894
10114
  * leak across re-parses. Pass an empty list (or `null`) to clear everything.
9895
10115
  */
9896
10116
  setFonts(fonts: readonly PptxEmbeddedFont[] | null | undefined): void;
10117
+ /** Replace the licensed font sources supplied by the host application. */
10118
+ setHostFonts(fonts: readonly ViewerFontSource[] | null | undefined): void;
9897
10119
  /**
9898
10120
  * Remove the injected `<style>` element, revoke all live object URLs, and
9899
10121
  * reset the signals. Called automatically on destroy; safe to call manually.
@@ -9907,22 +10129,6 @@ declare class EmbeddedFontsService {
9907
10129
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<EmbeddedFontsService>;
9908
10130
  }
9909
10131
 
9910
- /**
9911
- * Thin re-export shim → vendored `pptx-viewer-shared` (`render/embedded-fonts`).
9912
- *
9913
- * The pure embedded-font `@font-face` assembly (URL/format validation, XOR
9914
- * de-obfuscation fallback, resolved-variant -> stylesheet/family-list build)
9915
- * was extracted to shared and is consumed by every binding. This shim preserves
9916
- * the historical Angular import surface.
9917
- *
9918
- * `EMBEDDED_FONTS_STYLE_ID` stays Angular-local: it is the DOM id of the managed
9919
- * `<style>` element this binding injects, and is intentionally distinct from the
9920
- * React binding's id.
9921
- */
9922
-
9923
- /** DOM id of the managed `<style>` element the service injects into `<head>`. */
9924
- declare const EMBEDDED_FONTS_STYLE_ID = "pptx-angular-embedded-fonts";
9925
-
9926
10132
  /** A single rendered playback step (one click group). */
9927
10133
  interface AnimationStepView {
9928
10134
  /** 1-based step number for display. */
@@ -9971,6 +10177,8 @@ declare class CollaborationCursorsComponent {
9971
10177
  }
9972
10178
 
9973
10179
  declare class ModalDialogComponent {
10180
+ private readonly panel;
10181
+ private releaseFocus;
9974
10182
  /** Whether the dialog is visible. */
9975
10183
  readonly open: _angular_core.InputSignal<boolean>;
9976
10184
  /** Optional heading shown in the header bar. */
@@ -9984,8 +10192,7 @@ declare class ModalDialogComponent {
9984
10192
  * mobile breakpoint. See {@link modalPanelClass}.
9985
10193
  */
9986
10194
  protected readonly panelClass: _angular_core.Signal<string>;
9987
- /** Close on `Escape`, regardless of where focus currently sits. */
9988
- onDocumentKeydown(event: KeyboardEvent): void;
10195
+ constructor();
9989
10196
  requestClose(): void;
9990
10197
  /**
9991
10198
  * Backdrop clicks close the dialog; clicks bubbling up from the panel are
@@ -10139,7 +10346,10 @@ declare class ShareDialogComponent {
10139
10346
  readonly roomId: _angular_core.WritableSignal<string>;
10140
10347
  readonly userName: _angular_core.WritableSignal<string>;
10141
10348
  readonly serverUrl: _angular_core.WritableSignal<string>;
10349
+ readonly invitation: _angular_core.WritableSignal<string>;
10350
+ readonly mode: _angular_core.WritableSignal<"create" | "join">;
10142
10351
  readonly copied: _angular_core.WritableSignal<boolean>;
10352
+ readonly pendingConfig: _angular_core.Signal<CollaborationConfig | null>;
10143
10353
  readonly canStart: _angular_core.Signal<boolean>;
10144
10354
  /** Blank server URL selects the serverless peer-to-peer (webrtc) transport. */
10145
10355
  readonly isP2p: _angular_core.Signal<boolean>;
@@ -11016,6 +11226,7 @@ declare class PresentationTransitionOverlayComponent {
11016
11226
  * - `closeAudienceWindow` : request closing the audience display window
11017
11227
  */
11018
11228
  declare class PresenterViewComponent {
11229
+ protected readonly presenterWindow: PresenterWindowService;
11019
11230
  protected readonly NOTES_FONT_SIZE_MIN = 10;
11020
11231
  protected readonly NOTES_FONT_SIZE_MAX = 32;
11021
11232
  readonly slides: _angular_core.InputSignal<PptxSlide[]>;
@@ -11029,6 +11240,7 @@ declare class PresenterViewComponent {
11029
11240
  readonly exit: _angular_core.OutputEmitterRef<void>;
11030
11241
  readonly openAudienceWindow: _angular_core.OutputEmitterRef<void>;
11031
11242
  readonly closeAudienceWindow: _angular_core.OutputEmitterRef<void>;
11243
+ readonly navigateToSlide: _angular_core.OutputEmitterRef<number>;
11032
11244
  /** Live wall-clock (epoch ms), advanced once per second. */
11033
11245
  private readonly now;
11034
11246
  /** Speaker-notes font size (px), clamped to the allowed range. */
@@ -11055,7 +11267,7 @@ declare class PresenterViewComponent {
11055
11267
  protected onToggleAudienceWindow(): void;
11056
11268
  private withTemplate;
11057
11269
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresenterViewComponent, never>;
11058
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresenterViewComponent, "pptx-presenter-view", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "currentSlideIndex": { "alias": "currentSlideIndex"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "presentationStartTime": { "alias": "presentationStartTime"; "required": false; "isSignal": true; }; "isAudienceWindowOpen": { "alias": "isAudienceWindowOpen"; "required": false; "isSignal": true; }; }, { "movePresentationSlide": "movePresentationSlide"; "exit": "exit"; "openAudienceWindow": "openAudienceWindow"; "closeAudienceWindow": "closeAudienceWindow"; }, never, never, true, never>;
11270
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<PresenterViewComponent, "pptx-presenter-view", never, { "slides": { "alias": "slides"; "required": true; "isSignal": true; }; "currentSlideIndex": { "alias": "currentSlideIndex"; "required": true; "isSignal": true; }; "canvasSize": { "alias": "canvasSize"; "required": true; "isSignal": true; }; "templateElements": { "alias": "templateElements"; "required": false; "isSignal": true; }; "mediaDataUrls": { "alias": "mediaDataUrls"; "required": false; "isSignal": true; }; "presentationStartTime": { "alias": "presentationStartTime"; "required": false; "isSignal": true; }; "isAudienceWindowOpen": { "alias": "isAudienceWindowOpen"; "required": false; "isSignal": true; }; }, { "movePresentationSlide": "movePresentationSlide"; "exit": "exit"; "openAudienceWindow": "openAudienceWindow"; "closeAudienceWindow": "closeAudienceWindow"; "navigateToSlide": "navigateToSlide"; }, never, never, true, never>;
11059
11271
  }
11060
11272
 
11061
11273
  /**
@@ -11199,16 +11411,16 @@ declare function isAudienceTab(): boolean;
11199
11411
  * Store PPTX content bytes so the audience tab can retrieve them.
11200
11412
  * Called by the presenter before opening the audience window.
11201
11413
  */
11202
- declare function storeAudienceContent(content: ArrayBuffer | Uint8Array): Promise<void>;
11414
+ declare function storeAudienceContent(content: ArrayBuffer | Uint8Array, sessionId?: string): Promise<void>;
11203
11415
  /**
11204
11416
  * Load PPTX content bytes stored by the presenter tab.
11205
11417
  * Returns `null` if nothing is stored.
11206
11418
  */
11207
- declare function loadAudienceContent(): Promise<Uint8Array | null>;
11419
+ declare function loadAudienceContent(sessionId?: string): Promise<Uint8Array | null>;
11208
11420
  /**
11209
11421
  * Remove stored audience content (cleanup).
11210
11422
  */
11211
- declare function clearAudienceContent(): Promise<void>;
11423
+ declare function clearAudienceContent(sessionId?: string): Promise<void>;
11212
11424
 
11213
11425
  /**
11214
11426
  * SVG path generators for WordArt text warp presets.
@@ -12252,6 +12464,7 @@ declare class RibbonComponent {
12252
12464
  readonly a11y: _angular_core.OutputEmitterRef<void>;
12253
12465
  readonly link: _angular_core.OutputEmitterRef<void>;
12254
12466
  readonly openSorter: _angular_core.OutputEmitterRef<void>;
12467
+ readonly openMasterView: _angular_core.OutputEmitterRef<void>;
12255
12468
  readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
12256
12469
  readonly toggleFormatPainter: _angular_core.OutputEmitterRef<void>;
12257
12470
  readonly exportPng: _angular_core.OutputEmitterRef<void>;
@@ -12340,7 +12553,7 @@ declare class RibbonComponent {
12340
12553
  /** Sync the draw-tool signals with a Draw-tab change and re-broadcast it. */
12341
12554
  protected onDrawChange(state: DrawToolState): void;
12342
12555
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonComponent, never>;
12343
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonComponent, "pptx-ribbon", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "findOpen": { "alias": "findOpen"; "required": false; "isSignal": true; }; "collabConnected": { "alias": "collabConnected"; "required": false; "isSignal": true; }; "connectedCount": { "alias": "connectedCount"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "save": "save"; "toggleSidebar": "toggleSidebar"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "shapeInsert": "shapeInsert"; "moveLayer": "moveLayer"; "moveLayerToEdge": "moveLayerToEdge"; }, never, never, true, never>;
12556
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonComponent, "pptx-ribbon", never, { "slideIndex": { "alias": "slideIndex"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "selectedElement": { "alias": "selectedElement"; "required": false; "isSignal": true; }; "zoomPercent": { "alias": "zoomPercent"; "required": false; "isSignal": true; }; "formatPainterActive": { "alias": "formatPainterActive"; "required": false; "isSignal": true; }; "canActivateFormatPainter": { "alias": "canActivateFormatPainter"; "required": false; "isSignal": true; }; "exporting": { "alias": "exporting"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; "themeGalleryOpen": { "alias": "themeGalleryOpen"; "required": false; "isSignal": true; }; "sidebarCollapsed": { "alias": "sidebarCollapsed"; "required": false; "isSignal": true; }; "inspectorOpen": { "alias": "inspectorOpen"; "required": false; "isSignal": true; }; "commentsOpen": { "alias": "commentsOpen"; "required": false; "isSignal": true; }; "commentCount": { "alias": "commentCount"; "required": false; "isSignal": true; }; "findOpen": { "alias": "findOpen"; "required": false; "isSignal": true; }; "collabConnected": { "alias": "collabConnected"; "required": false; "isSignal": true; }; "connectedCount": { "alias": "connectedCount"; "required": false; "isSignal": true; }; }, { "prev": "prev"; "next": "next"; "zoomIn": "zoomIn"; "zoomOut": "zoomOut"; "zoomReset": "zoomReset"; "find": "find"; "present": "present"; "presenter": "presenter"; "record": "record"; "share": "share"; "broadcast": "broadcast"; "openFile": "openFile"; "save": "save"; "toggleSidebar": "toggleSidebar"; "signatures": "signatures"; "info": "info"; "print": "print"; "comments": "comments"; "a11y": "a11y"; "link": "link"; "openSorter": "openSorter"; "openMasterView": "openMasterView"; "toggleNotes": "toggleNotes"; "toggleFormatPainter": "toggleFormatPainter"; "exportPng": "exportPng"; "exportPdf": "exportPdf"; "exportGif": "exportGif"; "exportVideo": "exportVideo"; "replace": "replace"; "toggleInspector": "toggleInspector"; "drawToolChange": "drawToolChange"; "toggleThemeGallery": "toggleThemeGallery"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "openCustomShows": "openCustomShows"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleEyedropper": "toggleEyedropper"; "openSmartArtDialog": "openSmartArtDialog"; "openEquationDialog": "openEquationDialog"; "openSetUpSlideShow": "openSetUpSlideShow"; "openCompare": "openCompare"; "openPassword": "openPassword"; "openFontEmbedding": "openFontEmbedding"; "openVersionHistory": "openVersionHistory"; "openShortcuts": "openShortcuts"; "shapeInsert": "shapeInsert"; "moveLayer": "moveLayer"; "moveLayerToEdge": "moveLayerToEdge"; }, never, never, true, never>;
12344
12557
  }
12345
12558
 
12346
12559
  declare class RibbonAnimationsSectionComponent {
@@ -12722,6 +12935,7 @@ declare class RibbonViewSectionComponent {
12722
12935
  readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
12723
12936
  readonly print: _angular_core.OutputEmitterRef<void>;
12724
12937
  readonly openShortcuts: _angular_core.OutputEmitterRef<void>;
12938
+ readonly openMasterView: _angular_core.OutputEmitterRef<void>;
12725
12939
  readonly toggleGrid: _angular_core.OutputEmitterRef<void>;
12726
12940
  readonly toggleRulers: _angular_core.OutputEmitterRef<void>;
12727
12941
  readonly toggleGuides: _angular_core.OutputEmitterRef<void>;
@@ -12729,7 +12943,7 @@ declare class RibbonViewSectionComponent {
12729
12943
  readonly toggleSnapToGrid: _angular_core.OutputEmitterRef<void>;
12730
12944
  readonly toggleEyedropper: _angular_core.OutputEmitterRef<void>;
12731
12945
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonViewSectionComponent, never>;
12732
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonViewSectionComponent, "pptx-ribbon-view-section", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; }, { "openSorter": "openSorter"; "toggleNotes": "toggleNotes"; "print": "print"; "openShortcuts": "openShortcuts"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleEyedropper": "toggleEyedropper"; }, never, never, true, never>;
12946
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<RibbonViewSectionComponent, "pptx-ribbon-view-section", never, { "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; "showGrid": { "alias": "showGrid"; "required": false; "isSignal": true; }; "showRulers": { "alias": "showRulers"; "required": false; "isSignal": true; }; "showGuides": { "alias": "showGuides"; "required": false; "isSignal": true; }; "snapToGrid": { "alias": "snapToGrid"; "required": false; "isSignal": true; }; "eyedropperActive": { "alias": "eyedropperActive"; "required": false; "isSignal": true; }; }, { "openSorter": "openSorter"; "toggleNotes": "toggleNotes"; "print": "print"; "openShortcuts": "openShortcuts"; "openMasterView": "openMasterView"; "toggleGrid": "toggleGrid"; "toggleRulers": "toggleRulers"; "toggleGuides": "toggleGuides"; "toggleSelectionPane": "toggleSelectionPane"; "toggleSnapToGrid": "toggleSnapToGrid"; "toggleEyedropper": "toggleEyedropper"; }, never, never, true, never>;
12733
12947
  }
12734
12948
 
12735
12949
  /**