pptx-angular-viewer 1.1.56 → 1.1.57

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,7 +1,7 @@
1
1
  import * as _angular_core from '@angular/core';
2
- import { Signal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
2
+ import { Signal, WritableSignal, OnDestroy, OnInit, OnChanges, SimpleChanges, InjectionToken, Provider } from '@angular/core';
3
3
  import * as pptx_viewer_core from 'pptx-viewer-core';
4
- import { PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxElementAnimation, PptxSlide, TextSegment, TextStyle, PptxTransitionType, PptxEmbeddedFont, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, PptxComment, SmartArtLayout, PptxTheme, PptxSlideMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxTableData, PptxPresentationProperties, PptxCustomShow, PptxThemePreset, InkPptxElement, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, TablePptxElement, ChartPptxElement, SmartArtPptxElement, PptxSmartArtData, PptxTableCellStyle, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartSeries, PptxChartType, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxAnimationPreset, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAnimationSequence, SignatureStatus } from 'pptx-viewer-core';
4
+ import { PptxElement, ShapeStyle, PptxTextWarpPreset, XmlObject, PptxElementAnimation, PptxSlide, TextSegment, TextStyle, PptxTransitionType, PptxEmbeddedFont, AccessibilityIssueSeverity, AccessibilityIssue, AccessibilityIssueType, AccessibilityCheckOptions, PptxComment, SmartArtLayout, PptxTheme, PptxSlideMaster, PptxCoreProperties, PptxCustomProperty, PptxHeaderFooter, ParsedSignature, PptxTableCell, PptxTableData, PptxCustomShow, PptxPresentationProperties, PptxThemePreset, InkPptxElement, Model3DPptxElement, ZoomPptxElement, PptxSlideTransition, TablePptxElement, ChartPptxElement, SmartArtPptxElement, PptxSmartArtData, PptxTableCellStyle, PptxChartDataLabelOptions, PptxChartAxisType, PptxChartAxisFormatting, PptxChartSeries, PptxChartType, PptxChartDataPoint, PptxChartTrendline, PptxChartErrBars, PptxAnimationPreset, PptxAnimationTrigger, PptxAnimationTimingCurve, PptxAnimationRepeatMode, PptxAnimationDirection, PptxAnimationSequence, SignatureStatus } from 'pptx-viewer-core';
5
5
  import * as pptx_angular_viewer from 'pptx-angular-viewer';
6
6
  import { Options } from 'html2canvas-pro';
7
7
  import { SafeHtml } from '@angular/platform-browser';
@@ -1295,6 +1295,16 @@ interface ConnectorGeometry {
1295
1295
  strokeColor: string;
1296
1296
  strokeOpacity: number;
1297
1297
  dashArray: string | undefined;
1298
+ /** SVG `stroke-linecap`, derived from the connector's `a:ln/@cap`. */
1299
+ strokeLinecap: 'butt' | 'round' | 'square';
1300
+ /**
1301
+ * Perpendicular offsets (px) for each parallel strand of a compound
1302
+ * (double/triple) line. A single line yields `[0]`. Strands render the same
1303
+ * path/line translated vertically by each offset.
1304
+ */
1305
+ compoundOffsets: number[];
1306
+ /** Per-strand stroke widths, index-aligned with {@link compoundOffsets}. */
1307
+ compoundWidths: number[];
1298
1308
  /** SVG width (clamped to at least 1). */
1299
1309
  svgW: number;
1300
1310
  /** SVG height (clamped to at least 1). */
@@ -2761,73 +2771,6 @@ declare class EditorStateService {
2761
2771
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<EditorStateService>;
2762
2772
  }
2763
2773
 
2764
- /** Emitted when the user changes the find query or the case-sensitive toggle. */
2765
- interface FindEvent {
2766
- query: string;
2767
- matchCase: boolean;
2768
- }
2769
- /** Emitted when the user confirms a replacement action. */
2770
- interface ReplaceEvent {
2771
- query: string;
2772
- replacement: string;
2773
- matchCase: boolean;
2774
- }
2775
- declare class FindReplaceBarComponent {
2776
- /**
2777
- * Total number of matches found across all slides for the current query.
2778
- * Kept at 0 when no search has been performed yet.
2779
- */
2780
- readonly matchCount: _angular_core.InputSignal<number>;
2781
- /**
2782
- * Zero-based index of the currently highlighted match.
2783
- * Used to derive the 1-based display counter.
2784
- */
2785
- readonly matchIndex: _angular_core.InputSignal<number>;
2786
- /**
2787
- * Emitted whenever the find query or the case-sensitive toggle changes.
2788
- * The parent should run `findInSlides` and update `matchCount`/`matchIndex`.
2789
- */
2790
- readonly find: _angular_core.OutputEmitterRef<FindEvent>;
2791
- /**
2792
- * Emitted when the user clicks ↑ / ↓ or presses Enter in the find input.
2793
- * Payload is `1` (next) or `-1` (previous).
2794
- * The parent advances `matchIndex` and navigates to the matching slide.
2795
- */
2796
- readonly navigate: _angular_core.OutputEmitterRef<1 | -1>;
2797
- /**
2798
- * Emitted when the user clicks "Replace" (single match).
2799
- * The parent calls `replaceMatch(...)` on `EditorStateService`.
2800
- */
2801
- readonly replaceOne: _angular_core.OutputEmitterRef<ReplaceEvent>;
2802
- /**
2803
- * Emitted when the user clicks "Replace All".
2804
- * The parent calls `replaceInSlides(...)` and commits the result to history.
2805
- */
2806
- readonly replaceAll: _angular_core.OutputEmitterRef<ReplaceEvent>;
2807
- /** Emitted when the user closes the bar (Escape or ✕ button). */
2808
- readonly close: _angular_core.OutputEmitterRef<void>;
2809
- private readonly findInputRef;
2810
- /** Current text in the find input. */
2811
- readonly query: _angular_core.WritableSignal<string>;
2812
- /** Current text in the replacement input. */
2813
- readonly replacement: _angular_core.WritableSignal<string>;
2814
- /** Whether the search should be case-sensitive. */
2815
- readonly matchCase: _angular_core.WritableSignal<boolean>;
2816
- /** 1-based display index for the counter (e.g. "2 / 5"). Clamps to bounds. */
2817
- readonly displayIndex: _angular_core.Signal<number>;
2818
- /** Escape anywhere on the document closes the bar. */
2819
- onDocumentKeydown(event: KeyboardEvent): void;
2820
- onQueryInput(event: Event): void;
2821
- onReplacementInput(event: Event): void;
2822
- toggleCase(): void;
2823
- emitReplaceOne(): void;
2824
- emitReplaceAll(): void;
2825
- /** Focus the find input (called by the parent after toggling the bar open). */
2826
- focusFindInput(): void;
2827
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FindReplaceBarComponent, never>;
2828
- static ɵcmp: _angular_core.ɵɵComponentDeclaration<FindReplaceBarComponent, "pptx-find-replace-bar", never, { "matchCount": { "alias": "matchCount"; "required": false; "isSignal": true; }; "matchIndex": { "alias": "matchIndex"; "required": false; "isSignal": true; }; }, { "find": "find"; "navigate": "navigate"; "replaceOne": "replaceOne"; "replaceAll": "replaceAll"; "close": "close"; }, never, never, true, never>;
2829
- }
2830
-
2831
2774
  /** Payload emitted when the user confirms an insert. */
2832
2775
  interface SmartArtInsertEvent {
2833
2776
  layout: SmartArtLayout;
@@ -3485,6 +3428,99 @@ declare class TableRendererComponent {
3485
3428
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<TableRendererComponent, "pptx-table-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, { "cellCommit": "cellCommit"; "tableChange": "tableChange"; }, never, never, true, never>;
3486
3429
  }
3487
3430
 
3431
+ /** Seed values for the Share dialog's start form. */
3432
+ interface ShareDefaults$1 {
3433
+ roomId?: string;
3434
+ userName?: string;
3435
+ serverUrl?: string;
3436
+ }
3437
+ /** Host accessors/emitters a service cannot own (inputs + outputs). */
3438
+ interface CollaborationSessionHost {
3439
+ readonly authorName: () => string | undefined;
3440
+ readonly shareDefaults: () => ShareDefaults$1 | undefined;
3441
+ readonly getTemplateElements: () => TemplateElementsBySlideId;
3442
+ readonly emitStart: (config: CollaborationConfig) => void;
3443
+ readonly emitStop: () => void;
3444
+ }
3445
+ declare class ViewerCollaborationSessionService {
3446
+ private readonly collab;
3447
+ /** Share (collaboration) dialog visibility. */
3448
+ readonly showShare: _angular_core.WritableSignal<boolean>;
3449
+ /** Broadcast dialog visibility. */
3450
+ readonly showBroadcast: _angular_core.WritableSignal<boolean>;
3451
+ /**
3452
+ * Room/server of the currently active session, used to build the shareable
3453
+ * join/follow links shown in the dialogs. Null when no session is active.
3454
+ */
3455
+ private readonly activeSession;
3456
+ private host;
3457
+ /** Wire the host inputs/outputs (called once from the component constructor). */
3458
+ bind(host: CollaborationSessionHost): void;
3459
+ private requireHost;
3460
+ /** Browser location used to assemble share/follow URLs (omitted in SSR). */
3461
+ private browserLocation;
3462
+ /** Shareable join link for the active collaboration session. */
3463
+ readonly shareUrl: _angular_core.Signal<string>;
3464
+ /** Shareable follow link for the active broadcast. */
3465
+ readonly broadcastViewerUrl: _angular_core.Signal<string>;
3466
+ /**
3467
+ * Seed values for the Share dialog: the host-supplied `shareDefaults`, with
3468
+ * `userName` falling back to `authorName` (then "You") so the local user's
3469
+ * name pre-fills the form. Mirrors React/Vue.
3470
+ */
3471
+ readonly shareDialogDefaults: _angular_core.Signal<ShareDefaults$1>;
3472
+ /**
3473
+ * Connect / disconnect real-time collaboration when the host `collaboration`
3474
+ * input changes (called from the component's effect).
3475
+ */
3476
+ syncHostConfig(config: CollaborationConfig | undefined): void;
3477
+ /** Start a real-time collaboration session from the share dialog config. */
3478
+ onShareStart(config: CollaborationConfig): void;
3479
+ onShareStop(): void;
3480
+ /** Start broadcasting (presenter as session owner) from the broadcast config. */
3481
+ onBroadcastStart(config: BroadcastConfig): void;
3482
+ onBroadcastStop(): void;
3483
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerCollaborationSessionService, never>;
3484
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerCollaborationSessionService>;
3485
+ }
3486
+
3487
+ declare class ViewerCustomShowsService {
3488
+ private readonly loader;
3489
+ /** Whether the custom-shows dialog is open. */
3490
+ readonly showDialog: _angular_core.WritableSignal<boolean>;
3491
+ /** The list of user-defined custom shows for this session. */
3492
+ readonly shows: _angular_core.WritableSignal<readonly CustomShow[]>;
3493
+ /** The id of the currently active custom show, or null. */
3494
+ readonly activeId: _angular_core.WritableSignal<string | null>;
3495
+ /** Active-slide index of the host viewer (bound from the component). */
3496
+ private activeSlideIndex;
3497
+ /** Wire the host's active-slide-index accessor (called once from the constructor). */
3498
+ bind(activeSlideIndex: () => number): void;
3499
+ /** Custom shows mapped to the core shape consumed by set-up-slide-show. */
3500
+ readonly pptxCustomShows: _angular_core.Signal<PptxCustomShow[]>;
3501
+ /** Slides shown in presentation mode: the active custom show, else the full deck. */
3502
+ readonly presentationSlides: _angular_core.Signal<PptxSlide[]>;
3503
+ /** Start index into {@link presentationSlides}: first slide of a custom show, else the active slide. */
3504
+ readonly presentationStartIndex: _angular_core.Signal<number>;
3505
+ onCreate(show: {
3506
+ name: string;
3507
+ slideIds: string[];
3508
+ }): void;
3509
+ onRemove(id: string): void;
3510
+ onUpdate(show: {
3511
+ id: string;
3512
+ name: string;
3513
+ slideIds: string[];
3514
+ }): void;
3515
+ /**
3516
+ * The active custom show's slides, in its defined order, or null when no show
3517
+ * is active (or it resolves to nothing). Used to filter the presentation.
3518
+ */
3519
+ private resolveActiveShowSlides;
3520
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerCustomShowsService, never>;
3521
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerCustomShowsService>;
3522
+ }
3523
+
3488
3524
  declare class ViewerDialogsService {
3489
3525
  /** Equation editor dialog visibility. */
3490
3526
  readonly showEquation: _angular_core.WritableSignal<boolean>;
@@ -3532,6 +3568,201 @@ declare class ViewerDialogsService {
3532
3568
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerDialogsService>;
3533
3569
  }
3534
3570
 
3571
+ /** Live accessors the export loop needs from the host component. */
3572
+ interface ExportHost {
3573
+ /** The component's active-slide index (read + written to flip the live stage). */
3574
+ readonly activeSlideIndex: WritableSignal<number>;
3575
+ /** Current slide count of the displayed deck. */
3576
+ readonly slideCount: () => number;
3577
+ /** The full deck (templates merged back) for the print job. */
3578
+ readonly mergedSlides: () => readonly PptxSlide[];
3579
+ /** Resolve the live slide-stage element, or `undefined` when not mounted. */
3580
+ readonly resolveStage: () => HTMLElement | undefined;
3581
+ }
3582
+ declare class ViewerExportService {
3583
+ private readonly exportSvc;
3584
+ private readonly loader;
3585
+ private readonly print;
3586
+ /** True while a PNG/PDF export is in progress (disables the buttons). */
3587
+ readonly exporting: WritableSignal<boolean>;
3588
+ /** Export-progress modal state (PDF / GIF / WebM). */
3589
+ readonly modalOpen: WritableSignal<boolean>;
3590
+ readonly modalTitle: WritableSignal<string>;
3591
+ readonly progress: WritableSignal<number>;
3592
+ readonly statusMessage: WritableSignal<string>;
3593
+ /** Cooperative cancellation: the capture loop checks `signal.aborted`. */
3594
+ private abort;
3595
+ private host;
3596
+ /** Wire the live host accessors (called once from the component constructor). */
3597
+ bind(host: ExportHost): void;
3598
+ private requireHost;
3599
+ /** Export the current slide as a PNG download. */
3600
+ exportPng(): Promise<void>;
3601
+ /**
3602
+ * Export every slide to a multi-page PDF. Each slide is made the live stage,
3603
+ * given a render tick to settle, captured to a canvas, then the original
3604
+ * slide is restored. Progress + Cancel drive the export-progress modal.
3605
+ */
3606
+ exportPdf(): Promise<void>;
3607
+ /** Export every slide as an animated GIF (2s per slide). */
3608
+ exportGif(): Promise<void>;
3609
+ /** Export every slide as a WebM video (3s per slide) via MediaRecorder. */
3610
+ exportVideo(): Promise<void>;
3611
+ /** Run a print job for the chosen settings, rasterising each slide off the live stage. */
3612
+ onPrint(settings: PrintSettings): Promise<void>;
3613
+ /** User pressed Cancel: abort the loop and close the modal. */
3614
+ onCancelExport(): void;
3615
+ /**
3616
+ * Open the progress modal and arm a fresh `AbortController` for an export.
3617
+ * Returns the controller whose `signal` the capture loop checks per slide.
3618
+ */
3619
+ private beginExport;
3620
+ /** Tear down the progress modal + export-in-flight state. */
3621
+ private endExport;
3622
+ /**
3623
+ * Render every slide to a canvas (each made the live stage in turn), reporting
3624
+ * per-slide progress and bailing out cooperatively when `abortSignal.aborted`.
3625
+ */
3626
+ private captureSlideCanvases;
3627
+ /** Flip the live stage to `index`, let it settle, and capture it to a PNG data URL. */
3628
+ private captureSlideDataUrl;
3629
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerExportService, never>;
3630
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerExportService>;
3631
+ }
3632
+
3633
+ /** Emitted when the user changes the find query or the case-sensitive toggle. */
3634
+ interface FindEvent {
3635
+ query: string;
3636
+ matchCase: boolean;
3637
+ }
3638
+ /** Emitted when the user confirms a replacement action. */
3639
+ interface ReplaceEvent {
3640
+ query: string;
3641
+ replacement: string;
3642
+ matchCase: boolean;
3643
+ }
3644
+ declare class FindReplaceBarComponent {
3645
+ /**
3646
+ * Total number of matches found across all slides for the current query.
3647
+ * Kept at 0 when no search has been performed yet.
3648
+ */
3649
+ readonly matchCount: _angular_core.InputSignal<number>;
3650
+ /**
3651
+ * Zero-based index of the currently highlighted match.
3652
+ * Used to derive the 1-based display counter.
3653
+ */
3654
+ readonly matchIndex: _angular_core.InputSignal<number>;
3655
+ /**
3656
+ * Emitted whenever the find query or the case-sensitive toggle changes.
3657
+ * The parent should run `findInSlides` and update `matchCount`/`matchIndex`.
3658
+ */
3659
+ readonly find: _angular_core.OutputEmitterRef<FindEvent>;
3660
+ /**
3661
+ * Emitted when the user clicks ↑ / ↓ or presses Enter in the find input.
3662
+ * Payload is `1` (next) or `-1` (previous).
3663
+ * The parent advances `matchIndex` and navigates to the matching slide.
3664
+ */
3665
+ readonly navigate: _angular_core.OutputEmitterRef<1 | -1>;
3666
+ /**
3667
+ * Emitted when the user clicks "Replace" (single match).
3668
+ * The parent calls `replaceMatch(...)` on `EditorStateService`.
3669
+ */
3670
+ readonly replaceOne: _angular_core.OutputEmitterRef<ReplaceEvent>;
3671
+ /**
3672
+ * Emitted when the user clicks "Replace All".
3673
+ * The parent calls `replaceInSlides(...)` and commits the result to history.
3674
+ */
3675
+ readonly replaceAll: _angular_core.OutputEmitterRef<ReplaceEvent>;
3676
+ /** Emitted when the user closes the bar (Escape or ✕ button). */
3677
+ readonly close: _angular_core.OutputEmitterRef<void>;
3678
+ private readonly findInputRef;
3679
+ /** Current text in the find input. */
3680
+ readonly query: _angular_core.WritableSignal<string>;
3681
+ /** Current text in the replacement input. */
3682
+ readonly replacement: _angular_core.WritableSignal<string>;
3683
+ /** Whether the search should be case-sensitive. */
3684
+ readonly matchCase: _angular_core.WritableSignal<boolean>;
3685
+ /** 1-based display index for the counter (e.g. "2 / 5"). Clamps to bounds. */
3686
+ readonly displayIndex: _angular_core.Signal<number>;
3687
+ /** Escape anywhere on the document closes the bar. */
3688
+ onDocumentKeydown(event: KeyboardEvent): void;
3689
+ onQueryInput(event: Event): void;
3690
+ onReplacementInput(event: Event): void;
3691
+ toggleCase(): void;
3692
+ emitReplaceOne(): void;
3693
+ emitReplaceAll(): void;
3694
+ /** Focus the find input (called by the parent after toggling the bar open). */
3695
+ focusFindInput(): void;
3696
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<FindReplaceBarComponent, never>;
3697
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<FindReplaceBarComponent, "pptx-find-replace-bar", never, { "matchCount": { "alias": "matchCount"; "required": false; "isSignal": true; }; "matchIndex": { "alias": "matchIndex"; "required": false; "isSignal": true; }; }, { "find": "find"; "navigate": "navigate"; "replaceOne": "replaceOne"; "replaceAll": "replaceAll"; "close": "close"; }, never, never, true, never>;
3698
+ }
3699
+
3700
+ declare class ViewerFindReplaceService {
3701
+ private readonly editor;
3702
+ /** Find-in-slides bar visibility. */
3703
+ readonly showFind: _angular_core.WritableSignal<boolean>;
3704
+ /** Find-and-replace bar visibility (edit mode only). */
3705
+ readonly showFindReplace: _angular_core.WritableSignal<boolean>;
3706
+ readonly results: _angular_core.WritableSignal<readonly FindResult[]>;
3707
+ readonly activeIndex: _angular_core.WritableSignal<number>;
3708
+ private matchCase;
3709
+ /** Navigate the viewer to a slide index (bound from the host component). */
3710
+ private goTo;
3711
+ /** Wire the host's slide-navigation callback (called once from the constructor). */
3712
+ bind(goTo: (index: number) => void): void;
3713
+ /** Open the find/replace bar (mutually exclusive with the find-only bar). */
3714
+ openFindReplace(): void;
3715
+ onFind(evt: FindEvent): void;
3716
+ onNavigate(dir: 1 | -1): void;
3717
+ onReplaceOne(evt: ReplaceEvent): void;
3718
+ onReplaceAll(evt: ReplaceEvent): void;
3719
+ /** Re-run the search over the editable deck and refresh the match list. */
3720
+ private refreshResults;
3721
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerFindReplaceService, never>;
3722
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerFindReplaceService>;
3723
+ }
3724
+
3725
+ /** Live selection/slide accessors the painter needs from the host component. */
3726
+ interface FormatPainterHost {
3727
+ readonly selectedElement: () => PptxElement | null;
3728
+ readonly activeSlideIndex: () => number;
3729
+ readonly findActiveElement: (id: string) => PptxElement | undefined;
3730
+ }
3731
+ declare class ViewerFormatPainterService {
3732
+ private readonly editor;
3733
+ /** True while the painter is armed (next element click applies the copied format). */
3734
+ readonly active: _angular_core.WritableSignal<boolean>;
3735
+ /** Whether the eyedropper is currently active. */
3736
+ readonly eyedropperActive: _angular_core.WritableSignal<boolean>;
3737
+ /** Format copied from the source element when the painter was armed. */
3738
+ private copiedFormat;
3739
+ private host;
3740
+ /** Wire the host selection/slide accessors (called once from the constructor). */
3741
+ bind(host: FormatPainterHost): void;
3742
+ private requireHost;
3743
+ /** Whether the painter can be armed: exactly one selected element with copyable format. */
3744
+ readonly canActivate: _angular_core.Signal<boolean>;
3745
+ /** Toggle the format painter: arm from the current selection, or disarm. */
3746
+ toggle(): void;
3747
+ /** Disarm the painter and drop the copied format. */
3748
+ cancel(): void;
3749
+ /** Apply the copied format to a target element (shape/text style only; one history entry). */
3750
+ applyToTarget(id: string): void;
3751
+ /**
3752
+ * Activate the eyedropper to pick a colour from the screen. Uses the native
3753
+ * EyeDropper API where available (Chrome/Edge); on Firefox/Safari it falls
3754
+ * back to a one-shot click that samples the slide DOM under the pointer.
3755
+ * When a shape/text/connector/image element is selected, applies the colour
3756
+ * to its fill; otherwise copies it to the clipboard. No-ops when the user
3757
+ * cancels (Escape) or nothing paintable is under the pointer.
3758
+ */
3759
+ toggleEyedropper(): Promise<void>;
3760
+ /** Apply a picked colour to the selected shape's fill, else copy to clipboard. */
3761
+ private applyEyedropperColor;
3762
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<ViewerFormatPainterService, never>;
3763
+ static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerFormatPainterService>;
3764
+ }
3765
+
3535
3766
  /**
3536
3767
  * PowerPointViewerComponent: Angular port of the React `PowerPointViewer.tsx`
3537
3768
  * and Vue `PowerPointViewer.vue`.
@@ -3626,23 +3857,18 @@ declare class PowerPointViewerComponent {
3626
3857
  protected readonly presenterWindow: PresenterWindowService;
3627
3858
  protected readonly dialogs: ViewerDialogsService;
3628
3859
  private readonly compareSvc;
3860
+ protected readonly xport: ViewerExportService;
3861
+ protected readonly findReplace: ViewerFindReplaceService;
3862
+ protected readonly customShowsCtl: ViewerCustomShowsService;
3863
+ protected readonly session: ViewerCollaborationSessionService;
3864
+ protected readonly formatPainter: ViewerFormatPainterService;
3865
+ private readonly keyboard;
3629
3866
  /** Handle on the secondary-dialog host (keep-annotations prompt). */
3630
3867
  private readonly extraDialogs;
3631
3868
  /** Surface the encrypted-file notice dialog alongside the inline fallback. */
3632
3869
  private readonly encryptedNotice;
3633
- /** Custom shows mapped to the core shape consumed by set-up-slide-show. */
3634
- protected readonly pptxCustomShows: _angular_core.Signal<PptxCustomShow[]>;
3635
3870
  /** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
3636
3871
  private readonly mainEl;
3637
- /** True while a PNG/PDF export is in progress (disables the buttons). */
3638
- protected readonly exporting: _angular_core.WritableSignal<boolean>;
3639
- /** Export-progress modal state (PDF / GIF / WebM). */
3640
- protected readonly exportModalOpen: _angular_core.WritableSignal<boolean>;
3641
- protected readonly exportModalTitle: _angular_core.WritableSignal<string>;
3642
- protected readonly exportProgress: _angular_core.WritableSignal<number>;
3643
- protected readonly exportStatusMessage: _angular_core.WritableSignal<string>;
3644
- /** Cooperative cancellation: the capture loop checks `signal.aborted`. */
3645
- private exportAbort;
3646
3872
  protected readonly activeSlideIndex: _angular_core.WritableSignal<number>;
3647
3873
  /** Slides to display: the editable deck when `canEdit`, else the loaded deck. */
3648
3874
  protected readonly displaySlides: _angular_core.Signal<readonly PptxSlide[]>;
@@ -3676,19 +3902,12 @@ declare class PowerPointViewerComponent {
3676
3902
  protected readonly showNotes: _angular_core.WritableSignal<boolean>;
3677
3903
  /** Whether the left slides panel is collapsed (top-bar sidebar toggle). */
3678
3904
  protected readonly slidesPanelCollapsed: _angular_core.WritableSignal<boolean>;
3679
- /** Find-in-slides bar visibility. */
3680
- protected readonly showFind: _angular_core.WritableSignal<boolean>;
3681
- /** Find-and-replace bar state (edit mode only). */
3682
- protected readonly showFindReplace: _angular_core.WritableSignal<boolean>;
3683
3905
  /** Active drawing tool (from the ribbon Draw tab). */
3684
3906
  protected readonly activeDrawTool: _angular_core.WritableSignal<"pen" | "highlighter" | "eraser" | "select" | "freeform">;
3685
3907
  /** Active ink stroke colour. */
3686
3908
  protected readonly activeDrawColor: _angular_core.WritableSignal<string>;
3687
3909
  /** Active ink stroke width in stage pixels. */
3688
3910
  protected readonly activeDrawWidth: _angular_core.WritableSignal<number>;
3689
- protected readonly findResults: _angular_core.WritableSignal<readonly FindResult[]>;
3690
- protected readonly findActiveIndex: _angular_core.WritableSignal<number>;
3691
- private findMatchCase;
3692
3911
  /** Active right-docked tool panel (comments / accessibility / selection), or null. */
3693
3912
  protected readonly activePanel: _angular_core.WritableSignal<"comments" | "accessibility" | "signatures" | "selection" | null>;
3694
3913
  /**
@@ -3718,34 +3937,6 @@ declare class PowerPointViewerComponent {
3718
3937
  protected readonly showProperties: _angular_core.WritableSignal<boolean>;
3719
3938
  /** Hyperlink-edit dialog visibility. */
3720
3939
  protected readonly showHyperlink: _angular_core.WritableSignal<boolean>;
3721
- /** Share (collaboration) dialog visibility. */
3722
- protected readonly showShare: _angular_core.WritableSignal<boolean>;
3723
- /** Broadcast dialog visibility. */
3724
- protected readonly showBroadcast: _angular_core.WritableSignal<boolean>;
3725
- /**
3726
- * Room/server of the currently active session, used to build the shareable
3727
- * join/follow links shown in the dialogs. Null when no session is active.
3728
- */
3729
- protected readonly activeSession: _angular_core.WritableSignal<{
3730
- roomId: string;
3731
- serverUrl: string;
3732
- } | null>;
3733
- /** Browser location used to assemble share/follow URLs (omitted in SSR). */
3734
- private readonly browserLocation;
3735
- /** Shareable join link for the active collaboration session. */
3736
- protected readonly shareUrl: _angular_core.Signal<string>;
3737
- /** Shareable follow link for the active broadcast. */
3738
- protected readonly broadcastViewerUrl: _angular_core.Signal<string>;
3739
- /**
3740
- * Seed values for the Share dialog: the host-supplied {@link shareDefaults},
3741
- * with `userName` falling back to {@link authorName} (then "You") so the
3742
- * local user's name pre-fills the form. Mirrors React/Vue.
3743
- */
3744
- protected readonly shareDialogDefaults: _angular_core.Signal<{
3745
- roomId?: string;
3746
- userName?: string;
3747
- serverUrl?: string;
3748
- }>;
3749
3940
  /** Local overrides applied to document properties via the Info dialog. */
3750
3941
  private readonly coreOverride;
3751
3942
  /** Comments on the active slide. */
@@ -3767,27 +3958,10 @@ declare class PowerPointViewerComponent {
3767
3958
  protected readonly showGuides: _angular_core.WritableSignal<boolean>;
3768
3959
  /** Whether snap-to-grid is active on the editor canvas. */
3769
3960
  protected readonly snapToGrid: _angular_core.WritableSignal<boolean>;
3770
- /** Whether the eyedropper is currently active. */
3771
- protected readonly eyedropperActive: _angular_core.WritableSignal<boolean>;
3772
3961
  /** Whether the theme-gallery overlay is visible (Design → Browse Themes). */
3773
3962
  protected readonly showThemeGallery: _angular_core.WritableSignal<boolean>;
3774
- /** Whether the custom-shows dialog is open. */
3775
- protected readonly showCustomShows: _angular_core.WritableSignal<boolean>;
3776
3963
  /** Whether the Insert SmartArt gallery dialog is open. */
3777
3964
  protected readonly showSmartArtInsert: _angular_core.WritableSignal<boolean>;
3778
- /** The list of user-defined custom shows for this session. */
3779
- protected readonly customShows: _angular_core.WritableSignal<readonly CustomShow[]>;
3780
- /** The id of the currently active custom show, or null. */
3781
- protected readonly activeCustomShowId: _angular_core.WritableSignal<string | null>;
3782
- /**
3783
- * The active custom show's slides, in its defined order, or null when no show
3784
- * is active (or it resolves to nothing). Used to filter the presentation.
3785
- */
3786
- private resolveActiveShowSlides;
3787
- /** Slides shown in presentation mode: the active custom show, else the full deck. */
3788
- protected readonly presentationSlides: _angular_core.Signal<PptxSlide[]>;
3789
- /** Start index into {@link presentationSlides}: first slide of a custom show, else the active slide. */
3790
- protected readonly presentationStartIndex: _angular_core.Signal<number>;
3791
3965
  /** The `name` property of the loaded deck's theme (for check-mark in gallery). */
3792
3966
  protected readonly activeThemeName: _angular_core.Signal<string | undefined>;
3793
3967
  /**
@@ -3799,12 +3973,6 @@ declare class PowerPointViewerComponent {
3799
3973
  protected readonly slidePropsKey: _angular_core.Signal<string>;
3800
3974
  /** The single selected element on the active slide (for the inspector). */
3801
3975
  protected readonly selectedElement: _angular_core.Signal<PptxElement | null>;
3802
- /** True while the painter is armed (next element click applies the copied format). */
3803
- protected readonly formatPainterActive: _angular_core.WritableSignal<boolean>;
3804
- /** Format copied from the source element when the painter was armed. */
3805
- private copiedFormat;
3806
- /** Whether the painter can be armed: exactly one selected element with copyable format. */
3807
- protected readonly canActivateFormatPainter: _angular_core.Signal<boolean>;
3808
3976
  /**
3809
3977
  * Built-in File ▸ Open override of the `content` input. The native picker
3810
3978
  * sets this to swap the deck in place; a fresh `content` input clears it so
@@ -3836,20 +4004,6 @@ declare class PowerPointViewerComponent {
3836
4004
  * baseline.
3837
4005
  */
3838
4006
  applyThemePreset(preset: PptxThemePreset): void;
3839
- /** Open the find/replace bar (mutually exclusive with the find-only bar). */
3840
- protected openFindReplace(): void;
3841
- /** Re-run the search over the editable deck and refresh the match list. */
3842
- private refreshFindResults;
3843
- protected onFindReplaceFind(evt: FindEvent): void;
3844
- protected onFindReplaceNavigate(dir: 1 | -1): void;
3845
- protected onFindReplaceReplaceOne(evt: ReplaceEvent): void;
3846
- protected onFindReplaceReplaceAll(evt: ReplaceEvent): void;
3847
- /** Start a real-time collaboration session from the share dialog config. */
3848
- protected onShareStart(config: CollaborationConfig): void;
3849
- protected onShareStop(): void;
3850
- /** Start broadcasting (presenter as session owner) from the broadcast config. */
3851
- protected onBroadcastStart(config: BroadcastConfig): void;
3852
- protected onBroadcastStop(): void;
3853
4007
  /**
3854
4008
  * Wire the framework-agnostic touch-gesture recogniser to the `<main>` canvas
3855
4009
  * host once it is in the DOM. Mirrors React's `useTouchGestures` wiring:
@@ -3955,17 +4109,6 @@ declare class PowerPointViewerComponent {
3955
4109
  protected onInkStrokeComplete(ink: InkPptxElement): void;
3956
4110
  /** Receive an eraser hit and delete the targeted ink element. */
3957
4111
  protected onEraserHit(id: string): void;
3958
- /**
3959
- * Activate the eyedropper to pick a colour from the screen. Uses the native
3960
- * EyeDropper API where available (Chrome/Edge); on Firefox/Safari it falls
3961
- * back to a one-shot click that samples the slide DOM under the pointer.
3962
- * When a shape/text/connector/image element is selected, applies the colour
3963
- * to its fill; otherwise copies it to the clipboard. No-ops when the user
3964
- * cancels (Escape) or nothing paintable is under the pointer.
3965
- */
3966
- protected onToggleEyedropper(): Promise<void>;
3967
- /** Apply a picked colour to the selected shape's fill, else copy to clipboard. */
3968
- private applyEyedropperColor;
3969
4112
  /** Append a comment to the active slide (one history entry). */
3970
4113
  onCommentAdd(text: string): void;
3971
4114
  /** Remove a comment from the active slide. */
@@ -3980,10 +4123,6 @@ declare class PowerPointViewerComponent {
3980
4123
  onPropertiesSave(patch: Partial<PptxCoreProperties>): void;
3981
4124
  /** Apply a hyperlink edit to the selected element (one history entry). */
3982
4125
  onHyperlinkSave(patch: Partial<PptxElement>): void;
3983
- /** Run a print job for the chosen settings, rasterising each slide off the live stage. */
3984
- onPrint(settings: PrintSettings): Promise<void>;
3985
- /** Flip the live stage to `index`, let it settle, and capture it to a PNG data URL. */
3986
- private captureSlideDataUrl;
3987
4126
  /**
3988
4127
  * Handle an element press from the canvas. Additive (Shift/Ctrl) toggles
3989
4128
  * membership; a plain press selects the element (keeping it selected if it
@@ -3995,12 +4134,6 @@ declare class PowerPointViewerComponent {
3995
4134
  }): void;
3996
4135
  /** Empty-stage press: disarm the painter if armed, else clear the selection. */
3997
4136
  onBackgroundClick(): void;
3998
- /** Toggle the format painter: arm from the current selection, or disarm. */
3999
- toggleFormatPainter(): void;
4000
- /** Disarm the painter and drop the copied format. */
4001
- cancelFormatPainter(): void;
4002
- /** Apply the copied format to a target element (shape/text style only; one history entry). */
4003
- private applyFormatToTarget;
4004
4137
  /** Right-click: select the element under the cursor and open the menu. */
4005
4138
  onContextMenu(event: {
4006
4139
  id: string | null;
@@ -4022,16 +4155,6 @@ declare class PowerPointViewerComponent {
4022
4155
  * assigns one; the insert is a single undo/redo history entry.
4023
4156
  */
4024
4157
  protected onInsertSmartArt(event: SmartArtInsertEvent): void;
4025
- onCustomShowCreate(show: {
4026
- name: string;
4027
- slideIds: string[];
4028
- }): void;
4029
- onCustomShowRemove(id: string): void;
4030
- onCustomShowUpdate(show: {
4031
- id: string;
4032
- name: string;
4033
- slideIds: string[];
4034
- }): void;
4035
4158
  /** Commit an inline text edit: replace the element's text (one history entry). */
4036
4159
  onTextCommit(event: {
4037
4160
  id: string;
@@ -4056,38 +4179,12 @@ declare class PowerPointViewerComponent {
4056
4179
  }): void;
4057
4180
  /**
4058
4181
  * Editing keyboard shortcuts (only when `canEdit` and not typing in a
4059
- * field or presenting): Delete, Ctrl/Cmd+Z/Y undo/redo, Ctrl/Cmd+D
4060
- * duplicate, arrow-key nudge (Shift = ×10).
4182
+ * field or presenting). The decorator must live on the component; the logic
4183
+ * is delegated to {@link ViewerKeyboardService}.
4061
4184
  */
4062
4185
  onKeyDown(event: KeyboardEvent): void;
4063
4186
  /** Resolve the live slide-stage element within `<main>`. */
4064
4187
  private stageElement;
4065
- /** Export the current slide as a PNG download. */
4066
- exportPng(): Promise<void>;
4067
- /**
4068
- * Open the progress modal and arm a fresh `AbortController` for an export.
4069
- * Returns the controller whose `signal` the capture loop checks per slide.
4070
- */
4071
- private beginExport;
4072
- /** Tear down the progress modal + export-in-flight state. */
4073
- private endExport;
4074
- /** User pressed Cancel: abort the loop and close the modal. */
4075
- onCancelExport(): void;
4076
- /**
4077
- * Render every slide to a canvas (each made the live stage in turn), reporting
4078
- * per-slide progress and bailing out cooperatively when `abortSignal.aborted`.
4079
- */
4080
- private captureSlideCanvases;
4081
- /**
4082
- * Export every slide to a multi-page PDF. Each slide is made the live stage,
4083
- * given a render tick to settle, captured to a canvas, then the original
4084
- * slide is restored. Progress + Cancel drive the export-progress modal.
4085
- */
4086
- exportPdf(): Promise<void>;
4087
- /** Export every slide as an animated GIF (2s per slide). */
4088
- exportGif(): Promise<void>;
4089
- /** Export every slide as a WebM video (3s per slide) via MediaRecorder. */
4090
- exportVideo(): Promise<void>;
4091
4188
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
4092
4189
  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; }; "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"; "startCollaboration": "startCollaboration"; "stopCollaboration": "stopCollaboration"; }, never, never, true, never>;
4093
4190
  }
@@ -4618,7 +4715,7 @@ interface Paragraph {
4618
4715
  * - `model3d` → poster / placeholder (no three.js)
4619
4716
  * - `zoom` → slide/section zoom thumbnail
4620
4717
  * - `picture` / `image` → `<img>`
4621
- * - `media` → poster frame (`<img>`); playback TODO
4718
+ * - `media` → native `<video>`/`<audio>` playback, poster fallback
4622
4719
  * - `group` → recursive children (self-referencing selector)
4623
4720
  * - everything else → labelled placeholder (TODO, see PORTING.md)
4624
4721
  *
@@ -4732,9 +4829,10 @@ declare class ElementRendererComponent {
4732
4829
  *
4733
4830
  * All path/style math lives in `connector-path.ts` / `connector-routing.ts`
4734
4831
  * (pure TS, no Angular dependency) so it can be unit-tested without TestBed.
4832
+ * Compound (double/triple) lines render as parallel strands and line caps map
4833
+ * from `a:ln/@cap`; both derive from the shared connector geometry.
4735
4834
  *
4736
- * Not yet ported (TODO, see PORTING.md): compound (double/triple) lines, line
4737
- * shadows/glow.
4835
+ * Not yet ported (TODO, see PORTING.md): line shadows/glow.
4738
4836
  */
4739
4837
  declare class ConnectorRendererComponent {
4740
4838
  readonly element: _angular_core.InputSignal<PptxElement>;
@@ -4748,6 +4846,13 @@ declare class ConnectorRendererComponent {
4748
4846
  /** All derived geometry, recomputed on every input change. */
4749
4847
  readonly geo: _angular_core.Signal<ConnectorGeometry>;
4750
4848
  readonly viewBox: _angular_core.Signal<string>;
4849
+ /**
4850
+ * Parallel strokes for compound (double/triple) line styles. A single line
4851
+ * yields one strand at offset 0. Each strand carries its own width and is
4852
+ * translated perpendicular to the line; only the first strand paints the
4853
+ * start marker and only the last paints the end marker.
4854
+ */
4855
+ readonly strands: _angular_core.Signal<ConnectorStrand[]>;
4751
4856
  private readonly textProps;
4752
4857
  readonly connectorText: _angular_core.Signal<string | undefined>;
4753
4858
  readonly connectorSegments: _angular_core.Signal<TextSegment[] | undefined>;
@@ -4755,6 +4860,14 @@ declare class ConnectorRendererComponent {
4755
4860
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConnectorRendererComponent, never>;
4756
4861
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ConnectorRendererComponent, "pptx-connector-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "obstacles": { "alias": "obstacles"; "required": false; "isSignal": true; }; "canvasWidth": { "alias": "canvasWidth"; "required": false; "isSignal": true; }; "canvasHeight": { "alias": "canvasHeight"; "required": false; "isSignal": true; }; "interactive": { "alias": "interactive"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
4757
4862
  }
4863
+ /** One parallel stroke of a (possibly compound) connector line. */
4864
+ interface ConnectorStrand {
4865
+ key: number;
4866
+ width: number;
4867
+ transform: string | null;
4868
+ markerStart: string | null;
4869
+ markerEnd: string | null;
4870
+ }
4758
4871
 
4759
4872
  /** A `TextSegment` pre-processed with its computed inline style. */
4760
4873
  interface StyledSegment {
@@ -5011,19 +5124,23 @@ declare class SmartArtRendererComponent {
5011
5124
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SmartArtRendererComponent, "pptx-smart-art-renderer", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "zIndex": { "alias": "zIndex"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
5012
5125
  }
5013
5126
 
5014
- /**
5015
- * Pure helpers for `InkRendererComponent`.
5016
- *
5017
- * All functions are framework-agnostic (no Angular dependency) so they can be
5018
- * unit-tested without TestBed, following the same pattern as
5019
- * `connector-path.ts`.
5020
- */
5021
- /** Resolved per-stroke data used to render a single `<path>`. */
5127
+ /** A circle representing a single pressure point on an ink stroke. */
5128
+ interface PressureCircle {
5129
+ cx: number;
5130
+ cy: number;
5131
+ r: number;
5132
+ }
5133
+ /** Resolved per-stroke data used to render a single `<path>` (or circle set). */
5022
5134
  interface InkStroke {
5023
5135
  d: string;
5024
5136
  color: string;
5025
5137
  width: number;
5026
5138
  opacity: number;
5139
+ /**
5140
+ * When present, render as pressure-sensitive circles instead of a plain
5141
+ * constant-width `<path>`. Empty/absent means a constant-width stroke.
5142
+ */
5143
+ circles?: PressureCircle[];
5027
5144
  }
5028
5145
 
5029
5146
  /**
@@ -5036,9 +5153,13 @@ interface InkStroke {
5036
5153
  * width, and opacity resolved from the parallel `inkColors`/`inkWidths`/
5037
5154
  * `inkOpacities` arrays.
5038
5155
  *
5039
- * Not ported (TODO, see PORTING.md): pressure-sensitive variable-width strokes
5040
- * (`inkPointPressures`), ink replay animation, and the highlighter/eraser tool
5041
- * blend modes. These all degrade gracefully to plain constant-width strokes.
5156
+ * Pressure-sensitive variable-width strokes (`inkPointPressures`, or a varying
5157
+ * `inkWidths` array) are rendered as a set of filled `<circle>` elements whose
5158
+ * radii follow the per-point pressure, matching React's `renderInk`. Strokes
5159
+ * without pressure variation degrade to a plain constant-width `<path>`.
5160
+ *
5161
+ * Not ported (TODO, see PORTING.md): ink replay animation and the
5162
+ * highlighter/eraser tool blend modes.
5042
5163
  *
5043
5164
  * All non-trivial pure computation lives in `ink-renderer-helpers.ts` (no
5044
5165
  * Angular dependency) so it can be unit-tested without TestBed.
@@ -8618,6 +8739,13 @@ declare function cn(...values: ClassValue[]): string;
8618
8739
  * instead of drifting into three separate copies.
8619
8740
  */
8620
8741
  declare const translationsEn: Record<string, string>;
8742
+ /**
8743
+ * Every key in the English dictionary. A new locale dictionary typed as
8744
+ * `Record<TranslationKey, string>` gets a compile error for any key it's
8745
+ * missing or misspells, so translation contributions stay complete without a
8746
+ * separate parity test.
8747
+ */
8748
+ type TranslationKey = keyof typeof translationsEn;
8621
8749
  /**
8622
8750
  * Convert a dotted translation key to a human-readable label when no
8623
8751
  * explicit dictionary entry exists yet. Takes the last segment and converts
@@ -8626,4 +8754,4 @@ declare const translationsEn: Record<string, string>;
8626
8754
  declare function keyToLabel(key: string): string;
8627
8755
 
8628
8756
  export { AUDIENCE_HASH, AUDIENCE_NONCE_KEY, AccessibilityPanelComponent, AccessibilityService, AdvancedChartEditorComponent, AnimationAuthorPanelComponent, AnimationPanelComponent, AnimationPlaybackService, BroadcastDialogComponent, CURSOR_PALETTE, ChartAxisOptionsComponent, ChartAxisStyleOptionsComponent, ChartComboTypeOptionsComponent, ChartDataEditorComponent, ChartDataLabelOptionsComponent, ChartDatapointOptionsComponent, ChartDisplayOptionsComponent, ChartErrorBarOptionsComponent, ChartMarkerOptionsComponent, ChartRendererComponent, ChartTrendlineOptionsComponent, CollaborationCursorsComponent, CollaborationService, CommentsPanelComponent, CommentsService, ComparePanelComponent, ConnectorRendererComponent, ConnectorTextOverlayComponent, DEFAULT_BROADCAST_SERVER_URL, DEFAULT_CANVAS_HEIGHT, DEFAULT_CANVAS_WIDTH, DEFAULT_FILL_COLOR, DEFAULT_PRINT_SETTINGS, DEFAULT_SLIDE_BACKGROUND, DEFAULT_STROKE_COLOR, DEFAULT_TEXT_COLOR, EMBEDDED_FONTS_STYLE_ID, TEMPLATES as EQUATION_TEMPLATES, EditorContextMenuComponent, EditorHistory, EditorStateService, EditorToolbarComponent, EffectsPanelComponent, ElementRendererComponent, EmbeddedFontsService, EncryptedFileDialogComponent, EquationEditorDialogComponent, EquationRendererComponent, EquationTemplateGalleryComponent, ExportService, FindBarComponent, FindReplaceBarComponent, FontEmbeddingListComponent, FontEmbeddingPanelComponent, GradientPickerComponent, HANDOUT_OPTIONS, HyperlinkDialogComponent, InkRendererComponent, InspectorPanelComponent, IsMobileService, KeepAnnotationsDialogComponent, LoadContentService, MobileBottomBarComponent, MobileMenuSheetComponent, MobilePresenterViewComponent, MobileSheetComponent, MobileSlidesSheetComponent, MobileToolbarComponent, ModalDialogComponent, Model3DRendererComponent, NotesPanelComponent, OleRendererComponent, PRESENTER_CHANNEL_NAME, PRESENTER_MSG_ORIGIN, PasswordProtectionDialogComponent, PasswordStrengthMeterComponent, PowerPointViewerComponent, PresentationAnnotationOverlayComponent, PresentationAnnotationsService, PresentationOverlayComponent, PresentationSubtitleBarComponent, PresentationTransitionOverlayComponent, PresenterViewComponent, PresenterWindowService, PrintDialogComponent, PrintService, PrintSettingsPanelComponent, PropertiesDialogComponent, RESIZE_HANDLES, SEVERITY_GROUPS, SEVERITY_LABELS, SLIDE_TRANSITION_KEYFRAMES, SVG_WARP_PRESETS, SetUpSlideShowDialogComponent, ShareDialogComponent, ShortcutPanelComponent, ShowOptionsFieldsetComponent, ShowSlidesFieldsetComponent, SignatureStrippedDialogComponent, SignaturesPanelComponent, SignaturesService, SlideCanvasComponent, SlideDiffChangesComponent, SlideDiffRowComponent, SlideDiffThumbnailsComponent, SlideSorterOverlayComponent, SlidesPanelComponent, SmartArtRendererComponent, StatusBarComponent, TYPE_LABELS, TableCellAdvancedFillComponent, TableCellFormattingComponent, TableDataEditorComponent, TablePropertiesComponent, TableRendererComponent, TableResizeOverlayComponent, TableSelectionService, TextAdvancedPanelComponent, VIEWER_THEME, VersionHistoryPanelComponent, ViewerCompareService, ViewerDialogsService, ViewerExtraDialogsComponent, WEBM_MIME_CANDIDATES, ZoomRendererComponent, addCommentToList, advanceStep, annotationMapToInkInserts, applyAcceptedDiff, applyFindReplacements, applyFormatToElement, applyMove, applyResize, assignUserColor, bringForward, bringToFront, buildBroadcastConfig, buildBroadcastViewerUrl, buildClearHyperlinkPatch, buildClickGroups, buildCollaborationConfig, buildCssGradientFromShapeStyle, buildDuotoneFilter, buildDuotoneFilterId, buildEmbeddedFontStyles, buildEquationElement, buildEquationSegment, buildFontFaceRule, buildHyperlinkPatch, buildPatternFillCss, buildPrintHtmlDocument as buildPrintDocument, buildPropertiesPatch, buildShareUrl, bulletIndentPx, canStartBroadcast, canStartShare, canUseClipboard, changeCountLabel, changeIcon, checkFontAvailable, clampCursorPosition, clampGifDimensions, clampNotesFontSize, clampStep, clearAudienceContent, cn, collectAccessibilityIssues, collectElementText, collectSlideText, collectUsedFontFamilies, computeHandoutLayout, computeIsMobile, computeIsTablet, computePageCount, computeSlideIndices, computeTimerProgress, convertOmmlToMathMl, copyFormatFromElement, countAccessibilityIssues, countAnnotationStrokes, defaultCssVars, defaultRadius, defaultThemeColors, deleteElementsByIds, deleteVersion as deleteRecoveryVersion, derivePresenceList, duplicateElementById, durationOf, encodeGif, estimatePageCount, findInSlides, fontMimeForFormat, formatAutoNumber, formatCursorLabel, formatElapsed, formatFileSize, formatPropertyDate, formatTime, fpsToFrameIntervalMs, generateBroadcastRoomId, generateCommentId, getContainerStyle, getDuotoneFilterDef, getImageSrc, getPasswordStrength, getPatternSvg, getVersions as getRecoveryVersions, getResolvedShapeClipPath, getResolvedShapeClipPathFor, getShapeFillStrokeStyle, getSlideBackgroundStyle, getSlideTransitionAnimations, getTextBlockStyle, getTextWarp, getWarpCategory, getWarpPath, groupIssuesBySeverity, hasCopyableFormat, hasExistingLink, headerLabel, isAudienceTab, isInjectableUrl, isPpactionUrl, isPresenterMessage, isSigned, isUrlSafe, isValidRoomId, issueTrackKey, issueTypeLabel, keyToLabel, latexToMathml, loadAudienceContent, moveElementBy, msToFrameDelayCs, normalizeFontFormat, normalizeSlidesPerPage, ommlToMathml, overallStatus, parseAudienceNonce, pendingElementStyles, pickSupportedMimeType, planGifFrames, planVideoSegments, presenceToCursors, provideViewerTheme, recordWebm, removeCommentFromList, renderToCanvas, replaceInSlides, replaceMatch, resizeElement, resolveFontVariant, resolveHyperlinkHref, resolveParagraphBullet, resolvePresenterNotes, resolveTransitionDuration, revealedElementStyles, routeOrthogonalConnector, sanitizeColor, sanitizeSlideIndex, sanitizeUserName, scanAvailableFonts, searchSlides, seedBroadcastFields, seedHyperlinkDraft, seedPropertiesDraft, seedShareFields, segmentFrameCount, sendBackward, sendToBack, setElementPosition, shouldUseSvgWarp, signatureCountLabel, signatureKey, signatureTimestamp, signerName, statusLabel as slideDiffStatusLabel, slideNumberOf, statusKind, statusLabel$1 as statusLabel, storeAudienceContent, themeStyle, themeToCssVars, toggleCommentResolvedInList, translationsEn, updateElementById, validatePassword, validatePrintSettings, validateRoomId, waypointsToPathD, worstStatus };
8629
- export type { AccessibilityIssueGroup, AnimationClickGroup, AnnotationInkInsert, AnnotationStroke, Box, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, ClassValue, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, DocumentProperties, DuotoneFilterDef, EmbeddedFontStyles, EquationTemplate, FindOptions, FindResult, GifFrame, GifFramePlan, GifPlanOptions, HandoutSlidesPerPage, HyperlinkDraft, NotesSegmentViewModel, ObjectUrlFactory, OverallSignatureStatus, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, RecordWebmOptions, RecoveryVersion, RemoteCursor, SanitizedPresence as RemotePresence, ReplaceResult, ResizeHandle, ResolvedFontVariant, ShareDefaults, ShareFormFields, SignatureStatusKind, SlideTransitionAnimations, StyleMap, TableCellSelection, TextWarpCssDef, TextWarpDef, TextWarpPathDef, TimerProgress, VideoPlanOptions, VideoSegmentPlan, ViewerTheme, ViewerThemeColors };
8757
+ export type { AccessibilityIssueGroup, AnimationClickGroup, AnnotationInkInsert, AnnotationStroke, Box, BroadcastConfig, BroadcastDefaults, CSSProperties, CanvasSize, ClassValue, CollaborationConfig, CollaborationRole, RouterRect as ConnectorObstacle, RouterPoint as ConnectorPoint, ConnectorRouting, CopiedFormat, DocumentProperties, DuotoneFilterDef, EmbeddedFontStyles, EquationTemplate, FindOptions, FindResult, GifFrame, GifFramePlan, GifPlanOptions, HandoutSlidesPerPage, HyperlinkDraft, NotesSegmentViewModel, ObjectUrlFactory, OverallSignatureStatus, PresentationTool, PresenterExitMessage, PresenterMessage, PresenterNotes, PresenterSlideChangeMessage, PrintColorMode, PrintHtmlDocumentOptions as PrintDocumentOptions, PrintOrientation, PrintSettings, PrintSlideRange, PrintWhat, PropertiesDraft, RecordWebmOptions, RecoveryVersion, RemoteCursor, SanitizedPresence as RemotePresence, ReplaceResult, ResizeHandle, ResolvedFontVariant, ShareDefaults, ShareFormFields, SignatureStatusKind, SlideTransitionAnimations, StyleMap, TableCellSelection, TextWarpCssDef, TextWarpDef, TextWarpPathDef, TimerProgress, TranslationKey, VideoPlanOptions, VideoSegmentPlan, ViewerTheme, ViewerThemeColors };