pptx-angular-viewer 1.1.55 → 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';
@@ -391,10 +391,11 @@ declare function ommlToMathml(omml: OmmlNode | string): string;
391
391
  * Vue, and Angular consume one source of truth instead of duplicating the
392
392
  * (long) option arrays.
393
393
  *
394
- * Names mirror React's local `chart-panel-constants.ts` (minus the i18n label
395
- * keys). Labels here are plain ASCII display strings; bindings that localise
396
- * (React's i18n) keep their own label-key tables, while the value lists,
397
- * supported-type Sets, and row metadata are what is genuinely shared.
394
+ * Each option carries both a plain-ASCII `label` (for non-i18n consumers) and
395
+ * a `labelKey` (a `pptx.chart.*` dotted key resolvable via each binding's
396
+ * translation function, defined in `pptx-viewer-shared/i18n`). The `labelKey`
397
+ * values mirror React's local `chart-panel-constants.ts`, which keeps its own
398
+ * copy of these tables for historical reasons but resolves to the same keys.
398
399
  */
399
400
 
400
401
  /** Display units selectable for a value axis (empty string = none). */
@@ -419,6 +420,7 @@ type ChartGridlineDashValue = '' | 'solid' | 'dash' | 'dot' | 'dashDot' | 'lgDas
419
420
  interface ChartOption<V> {
420
421
  value: V;
421
422
  label: string;
423
+ labelKey: string;
422
424
  }
423
425
 
424
426
  /**
@@ -1293,6 +1295,16 @@ interface ConnectorGeometry {
1293
1295
  strokeColor: string;
1294
1296
  strokeOpacity: number;
1295
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[];
1296
1308
  /** SVG width (clamped to at least 1). */
1297
1309
  svgW: number;
1298
1310
  /** SVG height (clamped to at least 1). */
@@ -2759,73 +2771,6 @@ declare class EditorStateService {
2759
2771
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<EditorStateService>;
2760
2772
  }
2761
2773
 
2762
- /** Emitted when the user changes the find query or the case-sensitive toggle. */
2763
- interface FindEvent {
2764
- query: string;
2765
- matchCase: boolean;
2766
- }
2767
- /** Emitted when the user confirms a replacement action. */
2768
- interface ReplaceEvent {
2769
- query: string;
2770
- replacement: string;
2771
- matchCase: boolean;
2772
- }
2773
- declare class FindReplaceBarComponent {
2774
- /**
2775
- * Total number of matches found across all slides for the current query.
2776
- * Kept at 0 when no search has been performed yet.
2777
- */
2778
- readonly matchCount: _angular_core.InputSignal<number>;
2779
- /**
2780
- * Zero-based index of the currently highlighted match.
2781
- * Used to derive the 1-based display counter.
2782
- */
2783
- readonly matchIndex: _angular_core.InputSignal<number>;
2784
- /**
2785
- * Emitted whenever the find query or the case-sensitive toggle changes.
2786
- * The parent should run `findInSlides` and update `matchCount`/`matchIndex`.
2787
- */
2788
- readonly find: _angular_core.OutputEmitterRef<FindEvent>;
2789
- /**
2790
- * Emitted when the user clicks ↑ / ↓ or presses Enter in the find input.
2791
- * Payload is `1` (next) or `-1` (previous).
2792
- * The parent advances `matchIndex` and navigates to the matching slide.
2793
- */
2794
- readonly navigate: _angular_core.OutputEmitterRef<1 | -1>;
2795
- /**
2796
- * Emitted when the user clicks "Replace" (single match).
2797
- * The parent calls `replaceMatch(...)` on `EditorStateService`.
2798
- */
2799
- readonly replaceOne: _angular_core.OutputEmitterRef<ReplaceEvent>;
2800
- /**
2801
- * Emitted when the user clicks "Replace All".
2802
- * The parent calls `replaceInSlides(...)` and commits the result to history.
2803
- */
2804
- readonly replaceAll: _angular_core.OutputEmitterRef<ReplaceEvent>;
2805
- /** Emitted when the user closes the bar (Escape or ✕ button). */
2806
- readonly close: _angular_core.OutputEmitterRef<void>;
2807
- private readonly findInputRef;
2808
- /** Current text in the find input. */
2809
- readonly query: _angular_core.WritableSignal<string>;
2810
- /** Current text in the replacement input. */
2811
- readonly replacement: _angular_core.WritableSignal<string>;
2812
- /** Whether the search should be case-sensitive. */
2813
- readonly matchCase: _angular_core.WritableSignal<boolean>;
2814
- /** 1-based display index for the counter (e.g. "2 / 5"). Clamps to bounds. */
2815
- readonly displayIndex: _angular_core.Signal<number>;
2816
- /** Escape anywhere on the document closes the bar. */
2817
- onDocumentKeydown(event: KeyboardEvent): void;
2818
- onQueryInput(event: Event): void;
2819
- onReplacementInput(event: Event): void;
2820
- toggleCase(): void;
2821
- emitReplaceOne(): void;
2822
- emitReplaceAll(): void;
2823
- /** Focus the find input (called by the parent after toggling the bar open). */
2824
- focusFindInput(): void;
2825
- static ɵfac: _angular_core.ɵɵFactoryDeclaration<FindReplaceBarComponent, never>;
2826
- 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>;
2827
- }
2828
-
2829
2774
  /** Payload emitted when the user confirms an insert. */
2830
2775
  interface SmartArtInsertEvent {
2831
2776
  layout: SmartArtLayout;
@@ -2981,7 +2926,7 @@ type MobileBarSheet = 'slides' | 'inspector' | 'comments' | 'notes' | null;
2981
2926
  /** Internal action descriptor used to build the bar. */
2982
2927
  interface BarAction {
2983
2928
  key: NonNullable<MobileBarSheet> | 'insert';
2984
- label: string;
2929
+ labelKey: string;
2985
2930
  /** SVG path data for the icon (24 × 24 view-box). */
2986
2931
  svgPath: string;
2987
2932
  disabled: boolean;
@@ -3483,6 +3428,99 @@ declare class TableRendererComponent {
3483
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>;
3484
3429
  }
3485
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
+
3486
3524
  declare class ViewerDialogsService {
3487
3525
  /** Equation editor dialog visibility. */
3488
3526
  readonly showEquation: _angular_core.WritableSignal<boolean>;
@@ -3530,6 +3568,201 @@ declare class ViewerDialogsService {
3530
3568
  static ɵprov: _angular_core.ɵɵInjectableDeclaration<ViewerDialogsService>;
3531
3569
  }
3532
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
+
3533
3766
  /**
3534
3767
  * PowerPointViewerComponent: Angular port of the React `PowerPointViewer.tsx`
3535
3768
  * and Vue `PowerPointViewer.vue`.
@@ -3624,23 +3857,18 @@ declare class PowerPointViewerComponent {
3624
3857
  protected readonly presenterWindow: PresenterWindowService;
3625
3858
  protected readonly dialogs: ViewerDialogsService;
3626
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;
3627
3866
  /** Handle on the secondary-dialog host (keep-annotations prompt). */
3628
3867
  private readonly extraDialogs;
3629
3868
  /** Surface the encrypted-file notice dialog alongside the inline fallback. */
3630
3869
  private readonly encryptedNotice;
3631
- /** Custom shows mapped to the core shape consumed by set-up-slide-show. */
3632
- protected readonly pptxCustomShows: _angular_core.Signal<PptxCustomShow[]>;
3633
3870
  /** The `<main>` host; used to locate the live `.pptx-ng-canvas-stage`. */
3634
3871
  private readonly mainEl;
3635
- /** True while a PNG/PDF export is in progress (disables the buttons). */
3636
- protected readonly exporting: _angular_core.WritableSignal<boolean>;
3637
- /** Export-progress modal state (PDF / GIF / WebM). */
3638
- protected readonly exportModalOpen: _angular_core.WritableSignal<boolean>;
3639
- protected readonly exportModalTitle: _angular_core.WritableSignal<string>;
3640
- protected readonly exportProgress: _angular_core.WritableSignal<number>;
3641
- protected readonly exportStatusMessage: _angular_core.WritableSignal<string>;
3642
- /** Cooperative cancellation: the capture loop checks `signal.aborted`. */
3643
- private exportAbort;
3644
3872
  protected readonly activeSlideIndex: _angular_core.WritableSignal<number>;
3645
3873
  /** Slides to display: the editable deck when `canEdit`, else the loaded deck. */
3646
3874
  protected readonly displaySlides: _angular_core.Signal<readonly PptxSlide[]>;
@@ -3674,19 +3902,12 @@ declare class PowerPointViewerComponent {
3674
3902
  protected readonly showNotes: _angular_core.WritableSignal<boolean>;
3675
3903
  /** Whether the left slides panel is collapsed (top-bar sidebar toggle). */
3676
3904
  protected readonly slidesPanelCollapsed: _angular_core.WritableSignal<boolean>;
3677
- /** Find-in-slides bar visibility. */
3678
- protected readonly showFind: _angular_core.WritableSignal<boolean>;
3679
- /** Find-and-replace bar state (edit mode only). */
3680
- protected readonly showFindReplace: _angular_core.WritableSignal<boolean>;
3681
3905
  /** Active drawing tool (from the ribbon Draw tab). */
3682
3906
  protected readonly activeDrawTool: _angular_core.WritableSignal<"pen" | "highlighter" | "eraser" | "select" | "freeform">;
3683
3907
  /** Active ink stroke colour. */
3684
3908
  protected readonly activeDrawColor: _angular_core.WritableSignal<string>;
3685
3909
  /** Active ink stroke width in stage pixels. */
3686
3910
  protected readonly activeDrawWidth: _angular_core.WritableSignal<number>;
3687
- protected readonly findResults: _angular_core.WritableSignal<readonly FindResult[]>;
3688
- protected readonly findActiveIndex: _angular_core.WritableSignal<number>;
3689
- private findMatchCase;
3690
3911
  /** Active right-docked tool panel (comments / accessibility / selection), or null. */
3691
3912
  protected readonly activePanel: _angular_core.WritableSignal<"comments" | "accessibility" | "signatures" | "selection" | null>;
3692
3913
  /**
@@ -3703,8 +3924,8 @@ declare class PowerPointViewerComponent {
3703
3924
  protected readonly inspectorPaneOpen: _angular_core.Signal<boolean>;
3704
3925
  /** Inspector content, but null on mobile once the user has swiped it away. */
3705
3926
  protected readonly visibleInspectorKind: _angular_core.Signal<"slide" | "element" | "comments" | "accessibility" | "signatures" | "selection" | null>;
3706
- /** Accessible label for the inspector host, by active content. */
3707
- protected readonly inspectorLabel: _angular_core.Signal<"" | "Comments" | "Slide properties" | "Accessibility checker" | "Digital signatures" | "Selection pane" | "Element properties">;
3927
+ /** Accessible-label translation key for the inspector host, by active content. */
3928
+ protected readonly inspectorLabel: _angular_core.Signal<"" | "pptx.toolbar.comments" | "pptx.accessibility.title" | "pptx.viewer.digitalSignatures" | "pptx.selectionPane.title" | "pptx.viewer.elementProperties" | "pptx.viewer.slideProperties">;
3708
3929
  /**
3709
3930
  * Which mobile bottom-bar slot is currently "active" (highlighted). The
3710
3931
  * comments panel maps to the Comments slot; an open notes strip maps to
@@ -3716,34 +3937,6 @@ declare class PowerPointViewerComponent {
3716
3937
  protected readonly showProperties: _angular_core.WritableSignal<boolean>;
3717
3938
  /** Hyperlink-edit dialog visibility. */
3718
3939
  protected readonly showHyperlink: _angular_core.WritableSignal<boolean>;
3719
- /** Share (collaboration) dialog visibility. */
3720
- protected readonly showShare: _angular_core.WritableSignal<boolean>;
3721
- /** Broadcast dialog visibility. */
3722
- protected readonly showBroadcast: _angular_core.WritableSignal<boolean>;
3723
- /**
3724
- * Room/server of the currently active session, used to build the shareable
3725
- * join/follow links shown in the dialogs. Null when no session is active.
3726
- */
3727
- protected readonly activeSession: _angular_core.WritableSignal<{
3728
- roomId: string;
3729
- serverUrl: string;
3730
- } | null>;
3731
- /** Browser location used to assemble share/follow URLs (omitted in SSR). */
3732
- private readonly browserLocation;
3733
- /** Shareable join link for the active collaboration session. */
3734
- protected readonly shareUrl: _angular_core.Signal<string>;
3735
- /** Shareable follow link for the active broadcast. */
3736
- protected readonly broadcastViewerUrl: _angular_core.Signal<string>;
3737
- /**
3738
- * Seed values for the Share dialog: the host-supplied {@link shareDefaults},
3739
- * with `userName` falling back to {@link authorName} (then "You") so the
3740
- * local user's name pre-fills the form. Mirrors React/Vue.
3741
- */
3742
- protected readonly shareDialogDefaults: _angular_core.Signal<{
3743
- roomId?: string;
3744
- userName?: string;
3745
- serverUrl?: string;
3746
- }>;
3747
3940
  /** Local overrides applied to document properties via the Info dialog. */
3748
3941
  private readonly coreOverride;
3749
3942
  /** Comments on the active slide. */
@@ -3765,27 +3958,10 @@ declare class PowerPointViewerComponent {
3765
3958
  protected readonly showGuides: _angular_core.WritableSignal<boolean>;
3766
3959
  /** Whether snap-to-grid is active on the editor canvas. */
3767
3960
  protected readonly snapToGrid: _angular_core.WritableSignal<boolean>;
3768
- /** Whether the eyedropper is currently active. */
3769
- protected readonly eyedropperActive: _angular_core.WritableSignal<boolean>;
3770
3961
  /** Whether the theme-gallery overlay is visible (Design → Browse Themes). */
3771
3962
  protected readonly showThemeGallery: _angular_core.WritableSignal<boolean>;
3772
- /** Whether the custom-shows dialog is open. */
3773
- protected readonly showCustomShows: _angular_core.WritableSignal<boolean>;
3774
3963
  /** Whether the Insert SmartArt gallery dialog is open. */
3775
3964
  protected readonly showSmartArtInsert: _angular_core.WritableSignal<boolean>;
3776
- /** The list of user-defined custom shows for this session. */
3777
- protected readonly customShows: _angular_core.WritableSignal<readonly CustomShow[]>;
3778
- /** The id of the currently active custom show, or null. */
3779
- protected readonly activeCustomShowId: _angular_core.WritableSignal<string | null>;
3780
- /**
3781
- * The active custom show's slides, in its defined order, or null when no show
3782
- * is active (or it resolves to nothing). Used to filter the presentation.
3783
- */
3784
- private resolveActiveShowSlides;
3785
- /** Slides shown in presentation mode: the active custom show, else the full deck. */
3786
- protected readonly presentationSlides: _angular_core.Signal<PptxSlide[]>;
3787
- /** Start index into {@link presentationSlides}: first slide of a custom show, else the active slide. */
3788
- protected readonly presentationStartIndex: _angular_core.Signal<number>;
3789
3965
  /** The `name` property of the loaded deck's theme (for check-mark in gallery). */
3790
3966
  protected readonly activeThemeName: _angular_core.Signal<string | undefined>;
3791
3967
  /**
@@ -3797,12 +3973,6 @@ declare class PowerPointViewerComponent {
3797
3973
  protected readonly slidePropsKey: _angular_core.Signal<string>;
3798
3974
  /** The single selected element on the active slide (for the inspector). */
3799
3975
  protected readonly selectedElement: _angular_core.Signal<PptxElement | null>;
3800
- /** True while the painter is armed (next element click applies the copied format). */
3801
- protected readonly formatPainterActive: _angular_core.WritableSignal<boolean>;
3802
- /** Format copied from the source element when the painter was armed. */
3803
- private copiedFormat;
3804
- /** Whether the painter can be armed: exactly one selected element with copyable format. */
3805
- protected readonly canActivateFormatPainter: _angular_core.Signal<boolean>;
3806
3976
  /**
3807
3977
  * Built-in File ▸ Open override of the `content` input. The native picker
3808
3978
  * sets this to swap the deck in place; a fresh `content` input clears it so
@@ -3834,20 +4004,6 @@ declare class PowerPointViewerComponent {
3834
4004
  * baseline.
3835
4005
  */
3836
4006
  applyThemePreset(preset: PptxThemePreset): void;
3837
- /** Open the find/replace bar (mutually exclusive with the find-only bar). */
3838
- protected openFindReplace(): void;
3839
- /** Re-run the search over the editable deck and refresh the match list. */
3840
- private refreshFindResults;
3841
- protected onFindReplaceFind(evt: FindEvent): void;
3842
- protected onFindReplaceNavigate(dir: 1 | -1): void;
3843
- protected onFindReplaceReplaceOne(evt: ReplaceEvent): void;
3844
- protected onFindReplaceReplaceAll(evt: ReplaceEvent): void;
3845
- /** Start a real-time collaboration session from the share dialog config. */
3846
- protected onShareStart(config: CollaborationConfig): void;
3847
- protected onShareStop(): void;
3848
- /** Start broadcasting (presenter as session owner) from the broadcast config. */
3849
- protected onBroadcastStart(config: BroadcastConfig): void;
3850
- protected onBroadcastStop(): void;
3851
4007
  /**
3852
4008
  * Wire the framework-agnostic touch-gesture recogniser to the `<main>` canvas
3853
4009
  * host once it is in the DOM. Mirrors React's `useTouchGestures` wiring:
@@ -3953,17 +4109,6 @@ declare class PowerPointViewerComponent {
3953
4109
  protected onInkStrokeComplete(ink: InkPptxElement): void;
3954
4110
  /** Receive an eraser hit and delete the targeted ink element. */
3955
4111
  protected onEraserHit(id: string): void;
3956
- /**
3957
- * Activate the eyedropper to pick a colour from the screen. Uses the native
3958
- * EyeDropper API where available (Chrome/Edge); on Firefox/Safari it falls
3959
- * back to a one-shot click that samples the slide DOM under the pointer.
3960
- * When a shape/text/connector/image element is selected, applies the colour
3961
- * to its fill; otherwise copies it to the clipboard. No-ops when the user
3962
- * cancels (Escape) or nothing paintable is under the pointer.
3963
- */
3964
- protected onToggleEyedropper(): Promise<void>;
3965
- /** Apply a picked colour to the selected shape's fill, else copy to clipboard. */
3966
- private applyEyedropperColor;
3967
4112
  /** Append a comment to the active slide (one history entry). */
3968
4113
  onCommentAdd(text: string): void;
3969
4114
  /** Remove a comment from the active slide. */
@@ -3978,10 +4123,6 @@ declare class PowerPointViewerComponent {
3978
4123
  onPropertiesSave(patch: Partial<PptxCoreProperties>): void;
3979
4124
  /** Apply a hyperlink edit to the selected element (one history entry). */
3980
4125
  onHyperlinkSave(patch: Partial<PptxElement>): void;
3981
- /** Run a print job for the chosen settings, rasterising each slide off the live stage. */
3982
- onPrint(settings: PrintSettings): Promise<void>;
3983
- /** Flip the live stage to `index`, let it settle, and capture it to a PNG data URL. */
3984
- private captureSlideDataUrl;
3985
4126
  /**
3986
4127
  * Handle an element press from the canvas. Additive (Shift/Ctrl) toggles
3987
4128
  * membership; a plain press selects the element (keeping it selected if it
@@ -3993,12 +4134,6 @@ declare class PowerPointViewerComponent {
3993
4134
  }): void;
3994
4135
  /** Empty-stage press: disarm the painter if armed, else clear the selection. */
3995
4136
  onBackgroundClick(): void;
3996
- /** Toggle the format painter: arm from the current selection, or disarm. */
3997
- toggleFormatPainter(): void;
3998
- /** Disarm the painter and drop the copied format. */
3999
- cancelFormatPainter(): void;
4000
- /** Apply the copied format to a target element (shape/text style only; one history entry). */
4001
- private applyFormatToTarget;
4002
4137
  /** Right-click: select the element under the cursor and open the menu. */
4003
4138
  onContextMenu(event: {
4004
4139
  id: string | null;
@@ -4020,16 +4155,6 @@ declare class PowerPointViewerComponent {
4020
4155
  * assigns one; the insert is a single undo/redo history entry.
4021
4156
  */
4022
4157
  protected onInsertSmartArt(event: SmartArtInsertEvent): void;
4023
- onCustomShowCreate(show: {
4024
- name: string;
4025
- slideIds: string[];
4026
- }): void;
4027
- onCustomShowRemove(id: string): void;
4028
- onCustomShowUpdate(show: {
4029
- id: string;
4030
- name: string;
4031
- slideIds: string[];
4032
- }): void;
4033
4158
  /** Commit an inline text edit: replace the element's text (one history entry). */
4034
4159
  onTextCommit(event: {
4035
4160
  id: string;
@@ -4054,38 +4179,12 @@ declare class PowerPointViewerComponent {
4054
4179
  }): void;
4055
4180
  /**
4056
4181
  * Editing keyboard shortcuts (only when `canEdit` and not typing in a
4057
- * field or presenting): Delete, Ctrl/Cmd+Z/Y undo/redo, Ctrl/Cmd+D
4058
- * 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}.
4059
4184
  */
4060
4185
  onKeyDown(event: KeyboardEvent): void;
4061
4186
  /** Resolve the live slide-stage element within `<main>`. */
4062
4187
  private stageElement;
4063
- /** Export the current slide as a PNG download. */
4064
- exportPng(): Promise<void>;
4065
- /**
4066
- * Open the progress modal and arm a fresh `AbortController` for an export.
4067
- * Returns the controller whose `signal` the capture loop checks per slide.
4068
- */
4069
- private beginExport;
4070
- /** Tear down the progress modal + export-in-flight state. */
4071
- private endExport;
4072
- /** User pressed Cancel: abort the loop and close the modal. */
4073
- onCancelExport(): void;
4074
- /**
4075
- * Render every slide to a canvas (each made the live stage in turn), reporting
4076
- * per-slide progress and bailing out cooperatively when `abortSignal.aborted`.
4077
- */
4078
- private captureSlideCanvases;
4079
- /**
4080
- * Export every slide to a multi-page PDF. Each slide is made the live stage,
4081
- * given a render tick to settle, captured to a canvas, then the original
4082
- * slide is restored. Progress + Cancel drive the export-progress modal.
4083
- */
4084
- exportPdf(): Promise<void>;
4085
- /** Export every slide as an animated GIF (2s per slide). */
4086
- exportGif(): Promise<void>;
4087
- /** Export every slide as a WebM video (3s per slide) via MediaRecorder. */
4088
- exportVideo(): Promise<void>;
4089
4188
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<PowerPointViewerComponent, never>;
4090
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>;
4091
4190
  }
@@ -4616,7 +4715,7 @@ interface Paragraph {
4616
4715
  * - `model3d` → poster / placeholder (no three.js)
4617
4716
  * - `zoom` → slide/section zoom thumbnail
4618
4717
  * - `picture` / `image` → `<img>`
4619
- * - `media` → poster frame (`<img>`); playback TODO
4718
+ * - `media` → native `<video>`/`<audio>` playback, poster fallback
4620
4719
  * - `group` → recursive children (self-referencing selector)
4621
4720
  * - everything else → labelled placeholder (TODO, see PORTING.md)
4622
4721
  *
@@ -4730,9 +4829,10 @@ declare class ElementRendererComponent {
4730
4829
  *
4731
4830
  * All path/style math lives in `connector-path.ts` / `connector-routing.ts`
4732
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.
4733
4834
  *
4734
- * Not yet ported (TODO, see PORTING.md): compound (double/triple) lines, line
4735
- * shadows/glow.
4835
+ * Not yet ported (TODO, see PORTING.md): line shadows/glow.
4736
4836
  */
4737
4837
  declare class ConnectorRendererComponent {
4738
4838
  readonly element: _angular_core.InputSignal<PptxElement>;
@@ -4746,6 +4846,13 @@ declare class ConnectorRendererComponent {
4746
4846
  /** All derived geometry, recomputed on every input change. */
4747
4847
  readonly geo: _angular_core.Signal<ConnectorGeometry>;
4748
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[]>;
4749
4856
  private readonly textProps;
4750
4857
  readonly connectorText: _angular_core.Signal<string | undefined>;
4751
4858
  readonly connectorSegments: _angular_core.Signal<TextSegment[] | undefined>;
@@ -4753,6 +4860,14 @@ declare class ConnectorRendererComponent {
4753
4860
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<ConnectorRendererComponent, never>;
4754
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>;
4755
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
+ }
4756
4871
 
4757
4872
  /** A `TextSegment` pre-processed with its computed inline style. */
4758
4873
  interface StyledSegment {
@@ -4921,6 +5036,7 @@ declare class SmartArtRendererComponent {
4921
5036
  */
4922
5037
  private readonly editor;
4923
5038
  private readonly injector;
5039
+ private readonly translate;
4924
5040
  /** The node currently being edited on the canvas, or null. */
4925
5041
  protected readonly editState: _angular_core.WritableSignal<InlineEditState | null>;
4926
5042
  /** The mounted `<textarea>` for the active node edit, if any. */
@@ -5008,19 +5124,23 @@ declare class SmartArtRendererComponent {
5008
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>;
5009
5125
  }
5010
5126
 
5011
- /**
5012
- * Pure helpers for `InkRendererComponent`.
5013
- *
5014
- * All functions are framework-agnostic (no Angular dependency) so they can be
5015
- * unit-tested without TestBed, following the same pattern as
5016
- * `connector-path.ts`.
5017
- */
5018
- /** 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). */
5019
5134
  interface InkStroke {
5020
5135
  d: string;
5021
5136
  color: string;
5022
5137
  width: number;
5023
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[];
5024
5144
  }
5025
5145
 
5026
5146
  /**
@@ -5033,9 +5153,13 @@ interface InkStroke {
5033
5153
  * width, and opacity resolved from the parallel `inkColors`/`inkWidths`/
5034
5154
  * `inkOpacities` arrays.
5035
5155
  *
5036
- * Not ported (TODO, see PORTING.md): pressure-sensitive variable-width strokes
5037
- * (`inkPointPressures`), ink replay animation, and the highlighter/eraser tool
5038
- * 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.
5039
5163
  *
5040
5164
  * All non-trivial pure computation lives in `ink-renderer-helpers.ts` (no
5041
5165
  * Angular dependency) so it can be unit-tested without TestBed.
@@ -6103,11 +6227,11 @@ declare class TableCellAdvancedFillComponent {
6103
6227
  readonly styleChange: _angular_core.OutputEmitterRef<Partial<PptxTableCellStyle>>;
6104
6228
  protected readonly fillModes: {
6105
6229
  value: "none" | "solid" | "gradient" | "pattern";
6106
- label: string;
6230
+ i18nKey: string;
6107
6231
  }[];
6108
6232
  protected readonly gradientTypes: {
6109
6233
  value: string;
6110
- label: string;
6234
+ i18nKey: string;
6111
6235
  }[];
6112
6236
  protected readonly patterns: ("horz" | "vert" | "pct5" | "pct10" | "pct20" | "pct25" | "pct30" | "pct40" | "pct50" | "pct60" | "pct70" | "pct75" | "pct80" | "pct90" | "ltHorz" | "dkHorz" | "narHorz" | "wdHorz" | "ltVert" | "dkVert" | "narVert" | "wdVert" | "dashHorz" | "dashVert" | "cross" | "dnDiag" | "ltDnDiag" | "dkDnDiag" | "wdDnDiag" | "dashDnDiag" | "upDiag" | "ltUpDiag" | "dkUpDiag" | "wdUpDiag" | "dashUpDiag" | "diagCross" | "smCheck" | "lgCheck" | "smGrid" | "lgGrid" | "dotGrid" | "smConfetti" | "lgConfetti" | "horzBrick" | "diagBrick" | "solidDmnd" | "openDmnd" | "dotDmnd" | "plaid" | "sphere" | "weave" | "divot" | "shingle" | "wave" | "trellis" | "zigZag")[];
6113
6237
  protected readonly margins: ReadonlyArray<{
@@ -6229,6 +6353,7 @@ declare class ChartDataLabelOptionsComponent {
6229
6353
  protected readonly contentOptions: readonly {
6230
6354
  key: ChartDataLabelContentKey;
6231
6355
  label: string;
6356
+ labelKey: string;
6232
6357
  }[];
6233
6358
  protected readonly positionOptions: readonly ChartOption<ChartDataLabelPositionValue>[];
6234
6359
  protected readonly style: _angular_core.Signal<pptx_viewer_core.PptxChartStyle>;
@@ -6239,10 +6364,10 @@ declare class ChartDataLabelOptionsComponent {
6239
6364
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<ChartDataLabelOptionsComponent, "pptx-chart-data-label-options", never, { "element": { "alias": "element"; "required": true; "isSignal": true; }; "canEdit": { "alias": "canEdit"; "required": false; "isSignal": true; }; }, { "elementChange": "elementChange"; }, never, never, true, never>;
6240
6365
  }
6241
6366
 
6242
- /** Axis kinds the inspector exposes, with their label and whether they scale. */
6367
+ /** Axis kinds the inspector exposes, with their label key and whether they scale. */
6243
6368
  interface AxisRow$1 {
6244
6369
  type: PptxChartAxisType;
6245
- label: string;
6370
+ labelKey: string;
6246
6371
  hasScale: boolean;
6247
6372
  axis: PptxChartAxisFormatting;
6248
6373
  }
@@ -6252,7 +6377,7 @@ declare class ChartAxisOptionsComponent {
6252
6377
  readonly elementChange: _angular_core.OutputEmitterRef<ChartPptxElement>;
6253
6378
  protected readonly scaleFields: readonly {
6254
6379
  key: "min" | "max" | "majorUnit" | "minorUnit";
6255
- label: string;
6380
+ labelKey: string;
6256
6381
  }[];
6257
6382
  protected readonly displayUnitOptions: readonly ChartOption<ChartDisplayUnitsValue>[];
6258
6383
  protected readonly tickPositionOptions: readonly ChartOption<ChartTickLabelPosition>[];
@@ -6272,7 +6397,7 @@ declare class ChartAxisOptionsComponent {
6272
6397
 
6273
6398
  interface AxisRow {
6274
6399
  type: PptxChartAxisType;
6275
- label: string;
6400
+ labelKey: string;
6276
6401
  hasScale: boolean;
6277
6402
  axis: PptxChartAxisFormatting;
6278
6403
  }
@@ -6401,35 +6526,43 @@ declare class AnimationAuthorPanelComponent {
6401
6526
  protected readonly entrancePresets: readonly {
6402
6527
  value: PptxAnimationPreset;
6403
6528
  label: string;
6529
+ labelKey: string;
6404
6530
  }[];
6405
6531
  protected readonly exitPresets: readonly {
6406
6532
  value: PptxAnimationPreset;
6407
6533
  label: string;
6534
+ labelKey: string;
6408
6535
  }[];
6409
6536
  protected readonly emphasisPresets: readonly {
6410
6537
  value: PptxAnimationPreset;
6411
6538
  label: string;
6539
+ labelKey: string;
6412
6540
  }[];
6413
6541
  protected readonly triggerOptions: readonly {
6414
6542
  value: PptxAnimationTrigger;
6415
6543
  label: string;
6544
+ labelKey: string;
6416
6545
  }[];
6417
6546
  protected readonly timingCurveOptions: readonly {
6418
6547
  value: PptxAnimationTimingCurve;
6419
6548
  label: string;
6549
+ labelKey: string;
6420
6550
  }[];
6421
6551
  protected readonly repeatModeOptions: readonly {
6422
6552
  value: "none" | PptxAnimationRepeatMode;
6423
6553
  label: string;
6554
+ labelKey: string;
6424
6555
  }[];
6425
6556
  protected readonly directionOptions: readonly {
6426
6557
  value: PptxAnimationDirection;
6427
6558
  label: string;
6559
+ labelKey: string;
6428
6560
  arrow: string;
6429
6561
  }[];
6430
6562
  protected readonly sequenceOptions: readonly {
6431
6563
  value: PptxAnimationSequence;
6432
6564
  label: string;
6565
+ labelKey: string;
6433
6566
  }[];
6434
6567
  /**
6435
6568
  * Changes only when a *different* element is selected. Used as the
@@ -6492,8 +6625,8 @@ declare class AnimationAuthorPanelComponent {
6492
6625
  /** Descriptor for a single menu row. */
6493
6626
  interface MenuRow {
6494
6627
  key: string;
6495
- label: string;
6496
- sublabel?: string;
6628
+ labelKey: string;
6629
+ sublabelKey?: string;
6497
6630
  /** SVG path data (24 × 24 view-box). */
6498
6631
  svgPath: string;
6499
6632
  disabled?: boolean;
@@ -7462,7 +7595,9 @@ declare class BroadcastDialogComponent {
7462
7595
  readonly serverUrl: _angular_core.WritableSignal<string>;
7463
7596
  readonly copied: _angular_core.WritableSignal<boolean>;
7464
7597
  readonly canStart: _angular_core.Signal<boolean>;
7465
- readonly dialogTitle: _angular_core.Signal<"Broadcasting" | "Broadcast to a live audience">;
7598
+ private readonly broadcastingTitle;
7599
+ private readonly startTitle;
7600
+ readonly dialogTitle: _angular_core.Signal<any>;
7466
7601
  readonly canCopy: _angular_core.Signal<boolean>;
7467
7602
  constructor();
7468
7603
  asValue(event: Event): string;
@@ -7559,7 +7694,7 @@ declare class EquationEditorDialogComponent {
7559
7694
  /** True when editing an existing equation (drives the title / button label). */
7560
7695
  readonly isEditing: _angular_core.Signal<boolean>;
7561
7696
  /** Header title: edit vs insert. */
7562
- readonly dialogTitle: _angular_core.Signal<"Edit Equation" | "Insert Equation">;
7697
+ readonly dialogTitle: _angular_core.Signal<"pptx.equation.editTitle" | "pptx.equation.insertTitle">;
7563
7698
  /** Live OMML compiled from the current LaTeX ({} on failure / empty input). */
7564
7699
  private readonly omml;
7565
7700
  /** Whether there is a renderable equation (drives preview + insert enabling). */
@@ -7601,6 +7736,7 @@ declare class EquationTemplateGalleryComponent {
7601
7736
  /** Templates with pre-computed MathML previews (built once). */
7602
7737
  protected readonly templates: ReadonlyArray<EquationTemplate & {
7603
7738
  mathml: SafeHtml;
7739
+ i18nKey: string;
7604
7740
  }>;
7605
7741
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<EquationTemplateGalleryComponent, never>;
7606
7742
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<EquationTemplateGalleryComponent, "pptx-equation-template-gallery", never, { "activeLatex": { "alias": "activeLatex"; "required": false; "isSignal": true; }; }, { "select": "select"; }, never, never, true, never>;
@@ -7945,7 +8081,6 @@ declare class KeepAnnotationsDialogComponent {
7945
8081
  readonly keep: _angular_core.OutputEmitterRef<void>;
7946
8082
  /** Fired when the user discards the annotations (also on dismiss). */
7947
8083
  readonly discard: _angular_core.OutputEmitterRef<void>;
7948
- readonly description: _angular_core.Signal<string>;
7949
8084
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<KeepAnnotationsDialogComponent, never>;
7950
8085
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<KeepAnnotationsDialogComponent, "pptx-keep-annotations-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "annotationCount": { "alias": "annotationCount"; "required": false; "isSignal": true; }; "slideCount": { "alias": "slideCount"; "required": false; "isSignal": true; }; }, { "keep": "keep"; "discard": "discard"; }, never, never, true, never>;
7951
8086
  }
@@ -7959,7 +8094,6 @@ declare class SignatureStrippedDialogComponent {
7959
8094
  readonly confirm: _angular_core.OutputEmitterRef<void>;
7960
8095
  /** Fired when the user backs out (also on dismiss). */
7961
8096
  readonly cancel: _angular_core.OutputEmitterRef<void>;
7962
- readonly message: _angular_core.Signal<string>;
7963
8097
  static ɵfac: _angular_core.ɵɵFactoryDeclaration<SignatureStrippedDialogComponent, never>;
7964
8098
  static ɵcmp: _angular_core.ɵɵComponentDeclaration<SignatureStrippedDialogComponent, "pptx-signature-stripped-dialog", never, { "open": { "alias": "open"; "required": false; "isSignal": true; }; "signatureCount": { "alias": "signatureCount"; "required": false; "isSignal": true; }; }, { "confirm": "confirm"; "cancel": "cancel"; }, never, never, true, never>;
7965
8099
  }
@@ -8058,15 +8192,15 @@ declare class PrintSettingsPanelComponent {
8058
8192
  protected readonly handoutOptions: HandoutSlidesPerPage[];
8059
8193
  protected readonly printWhatOptions: {
8060
8194
  value: PrintWhat;
8061
- label: string;
8195
+ labelKey: string;
8062
8196
  }[];
8063
8197
  protected readonly orientationOptions: {
8064
8198
  value: PrintOrientation;
8065
- label: string;
8199
+ labelKey: string;
8066
8200
  }[];
8067
8201
  protected readonly colorModeOptions: {
8068
8202
  value: PrintColorMode;
8069
- label: string;
8203
+ labelKey: string;
8070
8204
  }[];
8071
8205
  /** Emit a settings patch. */
8072
8206
  emit(patch: Partial<PrintSettings>): void;
@@ -8181,6 +8315,9 @@ declare class PresentationSubtitleBarComponent implements OnChanges {
8181
8315
  readonly visible: _angular_core.InputSignal<boolean>;
8182
8316
  private readonly _captionText;
8183
8317
  private readonly _supportState;
8318
+ /** Reactive translated caption strings (used inside the recognition wiring). */
8319
+ private readonly listeningLabel;
8320
+ private readonly notSupportedLabel;
8184
8321
  /** The text string rendered in the caption bar. */
8185
8322
  protected readonly displayText: _angular_core.WritableSignal<string>;
8186
8323
  /**
@@ -8592,5 +8729,29 @@ declare function themeStyle(theme: ViewerTheme | undefined): Record<string, stri
8592
8729
  type ClassValue = string | number | false | null | undefined;
8593
8730
  declare function cn(...values: ClassValue[]): string;
8594
8731
 
8595
- 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, 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, updateElementById, validatePassword, validatePrintSettings, validateRoomId, waypointsToPathD, worstStatus };
8596
- 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 };
8732
+ /**
8733
+ * The canonical English UI-string dictionary for pptx-viewer. None of the
8734
+ * React/Vue/Angular binding packages ship translations themselves - each
8735
+ * only calls its framework's translation function (react-i18next's `t()`,
8736
+ * vue-i18n's `t()`, ngx-translate's `TranslateService`/`translate` pipe)
8737
+ * against dotted `pptx.*` keys. The host app supplies the dictionary; this
8738
+ * module is that dictionary for the demos, shared so all three stay in sync
8739
+ * instead of drifting into three separate copies.
8740
+ */
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;
8749
+ /**
8750
+ * Convert a dotted translation key to a human-readable label when no
8751
+ * explicit dictionary entry exists yet. Takes the last segment and converts
8752
+ * camelCase to Title Case, e.g. "pptx.slideSorter.zoomIn" -> "Zoom In".
8753
+ */
8754
+ declare function keyToLabel(key: string): string;
8755
+
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 };
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 };