pptx-angular-viewer 1.17.0 → 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. */
@@ -4594,6 +4745,7 @@ type MobileBarSheet = 'slides' | 'inspector' | 'comments' | 'notes' | null;
4594
4745
  interface BarAction {
4595
4746
  key: NonNullable<MobileBarSheet> | 'insert';
4596
4747
  labelKey: string;
4748
+ ariaLabelKey?: string;
4597
4749
  /** SVG path data for the icon (24 × 24 view-box). */
4598
4750
  svgPath: string;
4599
4751
  disabled: boolean;
@@ -4649,14 +4801,17 @@ declare function isPresenterMessage(data: unknown): data is PresenterMessage;
4649
4801
  */
4650
4802
  declare function parseAudienceNonce(): string | null;
4651
4803
  declare class PresenterWindowService {
4804
+ readonly snapshot: _angular_core.WritableSignal<PresentationSnapshot>;
4652
4805
  private audienceWindow;
4653
4806
  private channel;
4654
4807
  private pollTimer;
4808
+ private readyListener;
4655
4809
  /** Per-session UUID. Regenerated each time openAudienceWindow is invoked. */
4656
4810
  private sessionId;
4657
4811
  private getChannel;
4658
4812
  isAudienceWindowOpen(): boolean;
4659
4813
  syncSlideToAudience(slideIndex: number): void;
4814
+ updateSnapshot(patch: Partial<PresentationSnapshot>): void;
4660
4815
  closeAudienceWindow(): void;
4661
4816
  /**
4662
4817
  * Open the audience tab. Persists the PPTX bytes (if any) to IndexedDB, then
@@ -4664,6 +4819,8 @@ declare class PresenterWindowService {
4664
4819
  * popup is blocked.
4665
4820
  */
4666
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;
4667
4824
  private disposeWindow;
4668
4825
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresenterWindowService, never>;
4669
4826
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<PresenterWindowService>;
@@ -5736,7 +5893,7 @@ declare class ViewerInspectorPanelService {
5736
5893
  /** Inspector content, but null on mobile once the user has swiped it away. */
5737
5894
  readonly visibleInspectorKind: _angular_core.Signal<InspectorContent>;
5738
5895
  /** Accessible-label translation key for the inspector host, by active content. */
5739
- readonly inspectorLabel: _angular_core.Signal<"" | "pptx.toolbar.comments" | "pptx.accessibility.title" | "pptx.viewer.digitalSignatures" | "pptx.selectionPane.title" | "pptx.viewer.elementProperties" | "pptx.viewer.slideProperties">;
5896
+ readonly inspectorLabel: _angular_core.Signal<"" | "pptx.toolbar.comments" | "pptx.accessibility.title" | "pptx.viewer.digitalSignatures" | "pptx.selectionPane.title" | "pptx.inspector.properties">;
5740
5897
  /** Toggle a right-docked tool panel (clicking the active one closes it). */
5741
5898
  togglePanel(panel: InspectorToolPanel): void;
5742
5899
  /**
@@ -5829,6 +5986,7 @@ interface PresentationModeHost {
5829
5986
  readonly sourceContent: () => Uint8Array | ArrayBuffer | null;
5830
5987
  readonly canEdit: () => boolean;
5831
5988
  readonly promptKeepAnnotations: (map: SlideAnnotationMap) => void;
5989
+ readonly applyRehearsalTimings: (timings: Record<number, number>) => void;
5832
5990
  }
5833
5991
  declare class ViewerPresentationModeService {
5834
5992
  private readonly loader;
@@ -5840,6 +5998,14 @@ declare class ViewerPresentationModeService {
5840
5998
  readonly presentingPresenter: _angular_core.WritableSignal<boolean>;
5841
5999
  /** Epoch ms when presenter view started (drives the elapsed timer). */
5842
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;
5843
6009
  private host;
5844
6010
  /** Wire the host accessors (called once from the component constructor). */
5845
6011
  bind(host: PresentationModeHost): void;
@@ -5850,6 +6016,7 @@ declare class ViewerPresentationModeService {
5850
6016
  * mounts as a result of `presenting` flipping true.
5851
6017
  */
5852
6018
  present(): void;
6019
+ startRehearsal(): void;
5853
6020
  /**
5854
6021
  * Map a presentation-overlay index back to the full-deck `activeSlideIndex`.
5855
6022
  * The overlay's index is relative to the (possibly custom-show-filtered)
@@ -5857,6 +6024,11 @@ declare class ViewerPresentationModeService {
5857
6024
  * correct when the show closes.
5858
6025
  */
5859
6026
  onPresentationIndexChange(index: number): void;
6027
+ toggleRehearsalPause(): void;
6028
+ closePresentation(): void;
6029
+ saveRehearsalTimings(): void;
6030
+ dismissRehearsalSummary(): void;
6031
+ private recordCurrentSlide;
5860
6032
  /**
5861
6033
  * Open a separate audience tab and hand off the deck via the shared
5862
6034
  * IndexedDB store. Mirrors React's presenter "open audience window".
@@ -5925,6 +6097,8 @@ declare class ViewerZoomService {
5925
6097
  declare class PowerPointViewerComponent {
5926
6098
  /** PowerPoint content as Uint8Array (or ArrayBuffer). */
5927
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[]>;
5928
6102
  /** Whether editing actions are enabled. (Editor chrome not yet ported.) */
5929
6103
  readonly canEdit: _angular_core.InputSignal<boolean>;
5930
6104
  /** Optional class applied to the root element. */
@@ -6011,6 +6185,7 @@ declare class PowerPointViewerComponent {
6011
6185
  private readonly smartArt3DSvc;
6012
6186
  private readonly zoomTarget;
6013
6187
  protected readonly presenterWindow: PresenterWindowService;
6188
+ private readonly destroyRef;
6014
6189
  protected readonly dialogs: ViewerDialogsService;
6015
6190
  private readonly compareSvc;
6016
6191
  protected readonly xport: ViewerExportService;
@@ -6054,6 +6229,11 @@ declare class PowerPointViewerComponent {
6054
6229
  protected readonly rootStyle: _angular_core.Signal<Record<string, string>>;
6055
6230
  /** Slide-sorter grid overlay visibility. */
6056
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>;
6057
6237
  /** Whether the left slides panel is collapsed (top-bar sidebar toggle). */
6058
6238
  protected readonly slidesPanelCollapsed: _angular_core.WritableSignal<boolean>;
6059
6239
  /** Whether periodic autosave is enabled (title-bar AutoSave toggle; default on). */
@@ -6098,6 +6278,13 @@ declare class PowerPointViewerComponent {
6098
6278
  * When editing, this serialises the editor's edited deck so changes persist.
6099
6279
  */
6100
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;
6101
6288
  goTo(index: number): void;
6102
6289
  goPrev(): void;
6103
6290
  goNext(): void;
@@ -6218,7 +6405,7 @@ declare class PowerPointViewerComponent {
6218
6405
  /** Resolve the live slide-stage element within `<main>`. */
6219
6406
  private stageElement;
6220
6407
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
6221
- 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>;
6222
6409
  }
6223
6410
 
6224
6411
  /** The eight resize-handle positions around a selection box. */
@@ -6634,6 +6821,8 @@ declare class SlideCanvasComponent implements SlideContext {
6634
6821
  onContextMenu(event: MouseEvent): void;
6635
6822
  onHandlePointerDown(event: PointerEvent, handle: ResizeHandle): void;
6636
6823
  onRotatePointerDown(event: PointerEvent): void;
6824
+ onResizeHandleKeydown(event: KeyboardEvent, handle: ResizeHandle): void;
6825
+ onRotateHandleKeydown(event: KeyboardEvent): void;
6637
6826
  onPointerMove(event: PointerEvent): void;
6638
6827
  onPointerUp(): void;
6639
6828
  readonly wrapperStyle: _angular_core.Signal<StyleMap>;
@@ -6956,7 +7145,8 @@ declare class ElementRendererComponent {
6956
7145
  * Compound (double/triple) lines render as parallel strands and line caps map
6957
7146
  * from `a:ln/@cap`; both derive from the shared connector geometry.
6958
7147
  *
6959
- * 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.
6960
7150
  */
6961
7151
  declare class ConnectorRendererComponent {
6962
7152
  readonly element: _angular_core.InputSignal<PptxElement>;
@@ -6970,6 +7160,11 @@ declare class ConnectorRendererComponent {
6970
7160
  /** All derived geometry, recomputed on every input change. */
6971
7161
  readonly geo: _angular_core.Signal<ConnectorGeometry>;
6972
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>;
6973
7168
  /**
6974
7169
  * Parallel strokes for compound (double/triple) line styles. A single line
6975
7170
  * yields one strand at offset 0. Each strand carries its own width and is
@@ -6989,6 +7184,7 @@ interface ConnectorStrand {
6989
7184
  key: number;
6990
7185
  width: number;
6991
7186
  transform: string | null;
7187
+ shadowFilter: string | null;
6992
7188
  markerStart: string | null;
6993
7189
  markerEnd: string | null;
6994
7190
  }
@@ -7513,8 +7709,9 @@ declare function buildInkContainerStyle(element: PptxElement, zIndex: number): S
7513
7709
  * radii follow the per-point pressure, matching React's `renderInk`. Strokes
7514
7710
  * without pressure variation degrade to a plain constant-width `<path>`.
7515
7711
  *
7516
- * Not ported (TODO): ink replay animation and the
7517
- * 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.
7518
7715
  *
7519
7716
  * All non-trivial pure computation lives in `ink-renderer-helpers.ts` (no
7520
7717
  * Angular dependency) so it can be unit-tested without TestBed.
@@ -7523,11 +7720,14 @@ declare class InkRendererComponent {
7523
7720
  readonly element: _angular_core.InputSignal<PptxElement>;
7524
7721
  readonly zIndex: _angular_core.InputSignal<number>;
7525
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}";
7526
7725
  readonly containerStyle: _angular_core.Signal<StyleMap>;
7527
7726
  readonly strokes: _angular_core.Signal<InkStroke[]>;
7727
+ readonly replayStyles: _angular_core.Signal<InkStrokeAnimationStyle[]>;
7528
7728
  readonly viewBox: _angular_core.Signal<string>;
7529
7729
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<InkRendererComponent, never>;
7530
- 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>;
7531
7731
  }
7532
7732
 
7533
7733
  /**
@@ -8153,6 +8353,7 @@ declare class PresentationAnnotationsService {
8153
8353
  * plain CSS overlay.
8154
8354
  */
8155
8355
  declare class PresentationOverlayComponent implements OnInit {
8356
+ protected readonly presenterWindow: PresenterWindowService;
8156
8357
  readonly slides: _angular_core.InputSignal<PptxSlide[]>;
8157
8358
  readonly canvasSize: _angular_core.InputSignal<CanvasSize>;
8158
8359
  readonly mediaDataUrls: _angular_core.InputSignal<Map<string, string>>;
@@ -8166,6 +8367,7 @@ declare class PresentationOverlayComponent implements OnInit {
8166
8367
  readonly annotationsExit: _angular_core.OutputEmitterRef<SlideAnnotationMap>;
8167
8368
  /** Zero-based index into `slides()`. */
8168
8369
  protected readonly currentIndex: _angular_core.WritableSignal<number>;
8370
+ private readonly syncExternalIndex;
8169
8371
  /**
8170
8372
  * Active slide-transition animation: the outgoing slide + the incoming
8171
8373
  * slide's transition, played over the new slide. Cleared on completion.
@@ -9277,6 +9479,8 @@ declare class MobileSlidesSheetComponent {
9277
9479
  }
9278
9480
 
9279
9481
  declare class MobileSheetComponent {
9482
+ private readonly panel;
9483
+ private releaseFocus;
9280
9484
  /** Controls whether the sheet is visible. */
9281
9485
  readonly open: _angular_core.InputSignal<boolean>;
9282
9486
  /** Optional header text displayed above the body. */
@@ -9297,7 +9501,7 @@ declare class MobileSheetComponent {
9297
9501
  /** Whether a drag is in progress (suppresses CSS transition during drag). */
9298
9502
  readonly isDragging: _angular_core.WritableSignal<boolean>;
9299
9503
  readonly panelStyle: _angular_core.Signal<Record<string, string>>;
9300
- onDocumentKeydown(event: KeyboardEvent): void;
9504
+ constructor();
9301
9505
  onPointerDown(event: PointerEvent): void;
9302
9506
  onPointerMove(event: PointerEvent): void;
9303
9507
  onPointerUp(event: PointerEvent): void;
@@ -9589,6 +9793,21 @@ declare class ExportService {
9589
9793
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ExportService>;
9590
9794
  }
9591
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
+
9592
9811
  /**
9593
9812
  * A drop-in replacement for `html2canvas(element, options)` that first
9594
9813
  * resolves any oklch / oklab / lch / lab / color() values in the cloned
@@ -9880,6 +10099,8 @@ declare class EmbeddedFontsService {
9880
10099
  */
9881
10100
  readonly fontFamilies: _angular_core.WritableSignal<string[]>;
9882
10101
  private styleEl;
10102
+ private embeddedCss;
10103
+ private userCss;
9883
10104
  /** Object URLs minted on the most recent `setFonts`; revoked when superseded. */
9884
10105
  private liveObjectUrls;
9885
10106
  /** Mints a Blob object URL for de-obfuscated font bytes (impure side effect). */
@@ -9893,6 +10114,8 @@ declare class EmbeddedFontsService {
9893
10114
  * leak across re-parses. Pass an empty list (or `null`) to clear everything.
9894
10115
  */
9895
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;
9896
10119
  /**
9897
10120
  * Remove the injected `<style>` element, revoke all live object URLs, and
9898
10121
  * reset the signals. Called automatically on destroy; safe to call manually.
@@ -9906,22 +10129,6 @@ declare class EmbeddedFontsService {
9906
10129
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<EmbeddedFontsService>;
9907
10130
  }
9908
10131
 
9909
- /**
9910
- * Thin re-export shim → vendored `pptx-viewer-shared` (`render/embedded-fonts`).
9911
- *
9912
- * The pure embedded-font `@font-face` assembly (URL/format validation, XOR
9913
- * de-obfuscation fallback, resolved-variant -> stylesheet/family-list build)
9914
- * was extracted to shared and is consumed by every binding. This shim preserves
9915
- * the historical Angular import surface.
9916
- *
9917
- * `EMBEDDED_FONTS_STYLE_ID` stays Angular-local: it is the DOM id of the managed
9918
- * `<style>` element this binding injects, and is intentionally distinct from the
9919
- * React binding's id.
9920
- */
9921
-
9922
- /** DOM id of the managed `<style>` element the service injects into `<head>`. */
9923
- declare const EMBEDDED_FONTS_STYLE_ID = "pptx-angular-embedded-fonts";
9924
-
9925
10132
  /** A single rendered playback step (one click group). */
9926
10133
  interface AnimationStepView {
9927
10134
  /** 1-based step number for display. */
@@ -9970,6 +10177,8 @@ declare class CollaborationCursorsComponent {
9970
10177
  }
9971
10178
 
9972
10179
  declare class ModalDialogComponent {
10180
+ private readonly panel;
10181
+ private releaseFocus;
9973
10182
  /** Whether the dialog is visible. */
9974
10183
  readonly open: _angular_core.InputSignal<boolean>;
9975
10184
  /** Optional heading shown in the header bar. */
@@ -9983,8 +10192,7 @@ declare class ModalDialogComponent {
9983
10192
  * mobile breakpoint. See {@link modalPanelClass}.
9984
10193
  */
9985
10194
  protected readonly panelClass: _angular_core.Signal<string>;
9986
- /** Close on `Escape`, regardless of where focus currently sits. */
9987
- onDocumentKeydown(event: KeyboardEvent): void;
10195
+ constructor();
9988
10196
  requestClose(): void;
9989
10197
  /**
9990
10198
  * Backdrop clicks close the dialog; clicks bubbling up from the panel are
@@ -10138,7 +10346,10 @@ declare class ShareDialogComponent {
10138
10346
  readonly roomId: _angular_core.WritableSignal<string>;
10139
10347
  readonly userName: _angular_core.WritableSignal<string>;
10140
10348
  readonly serverUrl: _angular_core.WritableSignal<string>;
10349
+ readonly invitation: _angular_core.WritableSignal<string>;
10350
+ readonly mode: _angular_core.WritableSignal<"create" | "join">;
10141
10351
  readonly copied: _angular_core.WritableSignal<boolean>;
10352
+ readonly pendingConfig: _angular_core.Signal<CollaborationConfig | null>;
10142
10353
  readonly canStart: _angular_core.Signal<boolean>;
10143
10354
  /** Blank server URL selects the serverless peer-to-peer (webrtc) transport. */
10144
10355
  readonly isP2p: _angular_core.Signal<boolean>;
@@ -11015,6 +11226,7 @@ declare class PresentationTransitionOverlayComponent {
11015
11226
  * - `closeAudienceWindow` : request closing the audience display window
11016
11227
  */
11017
11228
  declare class PresenterViewComponent {
11229
+ protected readonly presenterWindow: PresenterWindowService;
11018
11230
  protected readonly NOTES_FONT_SIZE_MIN = 10;
11019
11231
  protected readonly NOTES_FONT_SIZE_MAX = 32;
11020
11232
  readonly slides: _angular_core.InputSignal<PptxSlide[]>;
@@ -11028,6 +11240,7 @@ declare class PresenterViewComponent {
11028
11240
  readonly exit: _angular_core.OutputEmitterRef<void>;
11029
11241
  readonly openAudienceWindow: _angular_core.OutputEmitterRef<void>;
11030
11242
  readonly closeAudienceWindow: _angular_core.OutputEmitterRef<void>;
11243
+ readonly navigateToSlide: _angular_core.OutputEmitterRef<number>;
11031
11244
  /** Live wall-clock (epoch ms), advanced once per second. */
11032
11245
  private readonly now;
11033
11246
  /** Speaker-notes font size (px), clamped to the allowed range. */
@@ -11054,7 +11267,7 @@ declare class PresenterViewComponent {
11054
11267
  protected onToggleAudienceWindow(): void;
11055
11268
  private withTemplate;
11056
11269
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PresenterViewComponent, never>;
11057
- 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>;
11058
11271
  }
11059
11272
 
11060
11273
  /**
@@ -11198,16 +11411,16 @@ declare function isAudienceTab(): boolean;
11198
11411
  * Store PPTX content bytes so the audience tab can retrieve them.
11199
11412
  * Called by the presenter before opening the audience window.
11200
11413
  */
11201
- declare function storeAudienceContent(content: ArrayBuffer | Uint8Array): Promise<void>;
11414
+ declare function storeAudienceContent(content: ArrayBuffer | Uint8Array, sessionId?: string): Promise<void>;
11202
11415
  /**
11203
11416
  * Load PPTX content bytes stored by the presenter tab.
11204
11417
  * Returns `null` if nothing is stored.
11205
11418
  */
11206
- declare function loadAudienceContent(): Promise<Uint8Array | null>;
11419
+ declare function loadAudienceContent(sessionId?: string): Promise<Uint8Array | null>;
11207
11420
  /**
11208
11421
  * Remove stored audience content (cleanup).
11209
11422
  */
11210
- declare function clearAudienceContent(): Promise<void>;
11423
+ declare function clearAudienceContent(sessionId?: string): Promise<void>;
11211
11424
 
11212
11425
  /**
11213
11426
  * SVG path generators for WordArt text warp presets.
@@ -12251,6 +12464,7 @@ declare class RibbonComponent {
12251
12464
  readonly a11y: _angular_core.OutputEmitterRef<void>;
12252
12465
  readonly link: _angular_core.OutputEmitterRef<void>;
12253
12466
  readonly openSorter: _angular_core.OutputEmitterRef<void>;
12467
+ readonly openMasterView: _angular_core.OutputEmitterRef<void>;
12254
12468
  readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
12255
12469
  readonly toggleFormatPainter: _angular_core.OutputEmitterRef<void>;
12256
12470
  readonly exportPng: _angular_core.OutputEmitterRef<void>;
@@ -12339,7 +12553,7 @@ declare class RibbonComponent {
12339
12553
  /** Sync the draw-tool signals with a Draw-tab change and re-broadcast it. */
12340
12554
  protected onDrawChange(state: DrawToolState): void;
12341
12555
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonComponent, never>;
12342
- 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>;
12343
12557
  }
12344
12558
 
12345
12559
  declare class RibbonAnimationsSectionComponent {
@@ -12721,6 +12935,7 @@ declare class RibbonViewSectionComponent {
12721
12935
  readonly toggleNotes: _angular_core.OutputEmitterRef<void>;
12722
12936
  readonly print: _angular_core.OutputEmitterRef<void>;
12723
12937
  readonly openShortcuts: _angular_core.OutputEmitterRef<void>;
12938
+ readonly openMasterView: _angular_core.OutputEmitterRef<void>;
12724
12939
  readonly toggleGrid: _angular_core.OutputEmitterRef<void>;
12725
12940
  readonly toggleRulers: _angular_core.OutputEmitterRef<void>;
12726
12941
  readonly toggleGuides: _angular_core.OutputEmitterRef<void>;
@@ -12728,7 +12943,7 @@ declare class RibbonViewSectionComponent {
12728
12943
  readonly toggleSnapToGrid: _angular_core.OutputEmitterRef<void>;
12729
12944
  readonly toggleEyedropper: _angular_core.OutputEmitterRef<void>;
12730
12945
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<RibbonViewSectionComponent, never>;
12731
- 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>;
12732
12947
  }
12733
12948
 
12734
12949
  /**